diff --git a/profiles/unl_profile/unl_profile.install b/profiles/unl_profile/unl_profile.install index 2eb5c146dfc4c199f451679dc34f513f91f28237..10ad169a2a7a6f9537f7bc42ea025eb1b8054acf 100644 --- a/profiles/unl_profile/unl_profile.install +++ b/profiles/unl_profile/unl_profile.install @@ -295,16 +295,15 @@ EOF; ); foreach ($data as $row) { if ($row->site_admin) { + $account = unl_cas_import_user($row->site_admin); $userData = array( - 'name' => $row->site_admin, - 'status' => 1, - 'timezone' => variable_get('date_default_timezone', @date_default_timezone_get()), 'roles' => array($site_admin_role->rid => $site_admin_role->name), ); - user_save(NULL, $userData); + user_save($account, $userData); } if ($row->migration_url) { + // If there's a site to migrate, add the job to the queue. require_once DRUPAL_ROOT . '/sites/all/modules/unl/unl_migration.php'; $migration = new Unl_Migration_Tool( $row->migration_url, @@ -316,6 +315,10 @@ EOF; DrupalQueue::get('unl_migration', TRUE) ->createItem(Unl_Migration_Tool::save_to_disk($migration)); } + else { + // If there's no migration to be done, we can send the site created email now. + unl_send_site_created_email($row); + } } } diff --git a/sites/all/modules/unl/cron.php b/sites/all/modules/unl/cron.php index f04a230e4ab3b58adff372eb8f6ed97c260aa6ce..ef13733ecffe2153eecee1613056749cc4f439a4 100644 --- a/sites/all/modules/unl/cron.php +++ b/sites/all/modules/unl/cron.php @@ -160,8 +160,12 @@ function unl_add_site($site_path, $uri, $clean_url, $db_prefix, $site_id) { $sites_subdir = escapeshellarg($sites_subdir); $db_url = escapeshellarg($db_url); $db_prefix = escapeshellarg($db_prefix); + $site_mail = escapeshellarg(variable_get('site_mail')); $command = "$php_path sites/all/modules/drush/drush.php -y --uri=$uri site-install unl_profile --sites-subdir=$sites_subdir --db-url=$db_url --db-prefix=$db_prefix --clean-url=$clean_url"; + if ($site_mail) { + $command .= " --site-mail=$site_mail"; + } shell_exec($command); unl_add_site_to_htaccess($site_id, $site_path, FALSE); diff --git a/sites/all/modules/unl/unl.module b/sites/all/modules/unl/unl.module index 29d479fe61bdbc3866fda78c185525cfaeb2a391..30c4f8bb01f4c4be181dde3e9a64ba4c08f29e1f 100644 --- a/sites/all/modules/unl/unl.module +++ b/sites/all/modules/unl/unl.module @@ -437,7 +437,9 @@ function unl_cron() { require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'unl_migration.php'; $item = $queue->claimItem(120); $queue->deleteItem($item); - unl_migration_queue_step($item->data); + if (unl_migration_queue_step($item->data)) { + unl_send_site_created_email(); + } } if (conf_path() == 'sites/default') { @@ -484,9 +486,7 @@ function unl_cron() { $path = $department . '/' . $site_name; $db_prefix = unl_create_db_prefix($site); - - $path = 'incubator/' . $path; - + $sites_to_create[] = array( 'site_path' => $path, 'uri' => url($path), @@ -599,3 +599,81 @@ function unl_init() { drupal_goto($primary_base_url . current_path()); } } + +function unl_mail($key, &$message, $params) { + if ($key == 'site_created') { + $site = $params['site']; + $message['subject'] = 'New Site!'; + $message['body'][] = 'A site has been set up!'; + $message['body'][] = print_r($site, TRUE); + } +} + +function unl_send_site_created_email($site = NULL) { + $shared_prefix = unl_get_shared_db_prefix(); + + // If no site was specified, get the current site. + if (!$site) { + if (!is_array($GLOBALS['databases']['default']['default']['prefix'])) { + return; + } + + $db_prefix = $GLOBALS['databases']['default']['default']['prefix']['default']; + $db_prefix = substr($db_prefix, 0, 0 - strlen($shared_prefix) - 1); + $data = db_query( + "SELECT * " + . "FROM {$shared_prefix}unl_sites " + . "WHERE db_prefix = :prefix ", + array(':prefix' => $db_prefix) + )->fetchAll(); + if (count($data) == 0) { + return; + } + $site = $data[0]; + } + + $unl_site_created_email_address = unl_shared_variable_get('unl_site_created_email_address'); + $unl_site_created_alert_admins = unl_shared_variable_get('unl_site_created_alert_admins'); + + $recipients = array(); + + if ($unl_site_created_email_address) { + $recipients[] = $unl_site_created_email_address; + } + + if ($unl_site_created_alert_admins) { + $role = user_role_load_by_name('Site Admin'); + $select = db_select('users_roles', 'r'); + $select->fields('r', array('uid')); + $select->condition('r.rid', $role->rid); + $uids = $select->execute()->fetchCol(); + + $users = user_load_multiple($uids); + foreach ($users as $user) { + if (!$user->mail) { + continue; + } + $recipients[] = $user->mail; + } + } + + foreach ($recipients as $recipient) { + drupal_mail('unl', 'site_created', $recipient, language_default(), array('site' => $site), unl_shared_variable_get('site_mail')); + } +} + +function unl_shared_variable_get($name, $default = NULL) { + $shared_prefix = unl_get_shared_db_prefix(); + $data = db_query( + "SELECT * " + . "FROM {$shared_prefix}variable " + . "WHERE name = :name", + array(':name' => $name) + )->fetchAll(); + + if (count($data) == 0) { + return $default; + } + + return unserialize($data[0]->value); +} diff --git a/sites/all/modules/unl/unl_cas.module b/sites/all/modules/unl/unl_cas.module index d0b6175447cc26b316470cecfa7ee3e865307830..78e23f8c0703ed6a2b128a2894bd0b9311915cda 100644 --- a/sites/all/modules/unl/unl_cas.module +++ b/sites/all/modules/unl/unl_cas.module @@ -1,12 +1,13 @@ <?php +require_once dirname(__FILE__) . '/unl_loader.php'; +unl_load_zend_framework(); + function unl_cas_enable() { variable_set('user_register', 0); } function unl_cas_init() { - require_once dirname(__FILE__) . '/unl_loader.php'; - unl_load_zend_framework(); drupal_session_start(); if (isset($_SESSION['unl_cas']['current_path'])) { @@ -254,6 +255,9 @@ function unl_cas_user_presave(&$edit, $account, $category) { if (_unl_cas_is_user_default_site_administrator($username)) { $local_admin_role = user_role_load($local_admin_role_id); + if (!isset($edit['roles'])) { + $edit['roles'] = $account->roles; + } $edit['roles'][$local_admin_role_id] = $local_admin_role->name; } else { diff --git a/sites/all/modules/unl/unl_migration.php b/sites/all/modules/unl/unl_migration.php index 8d27a059a7f7dfae7e29d571341ad4c3ff21e781..a39750e4443164a9888edfc55d6777a89191702f 100644 --- a/sites/all/modules/unl/unl_migration.php +++ b/sites/all/modules/unl/unl_migration.php @@ -108,10 +108,11 @@ function unl_migration_step($migration, &$context) function unl_migration_queue_step($migration_storage_file) { $migration = Unl_Migration_Tool::load_from_disk($migration_storage_file); if ($migration->migrate(30)) { - return; + return TRUE; } DrupalQueue::get('unl_migration', TRUE) ->createItem(Unl_Migration_Tool::save_to_disk($migration)); + return FALSE; } diff --git a/sites/all/modules/unl/unl_site_creation.php b/sites/all/modules/unl/unl_site_creation.php index fa8ce3d052692c38d60f615b2081da72bc30339c..040fd538b2cdd4335bcd1697775c5b0773d607bb 100644 --- a/sites/all/modules/unl/unl_site_creation.php +++ b/sites/all/modules/unl/unl_site_creation.php @@ -9,6 +9,7 @@ function unl_sites_page() { $page[] = drupal_get_form('unl_site_create'); $page[] = drupal_get_form('unl_site_list'); $page[] = drupal_get_form('unl_site_updates'); + $page[] = drupal_get_form('unl_site_email_settings'); return $page; } @@ -206,6 +207,40 @@ function unl_site_updates_step($site_uri, &$context) { } +function unl_site_email_settings($form, &$form_state) { + $form['root'] = array( + '#type' => 'fieldset', + '#title' => 'Email Alert Settings', + '#description' => 'When a new site is created, who should be emailed?', + ); + + $form['root']['unl_site_created_email_address'] = array( + '#type' => 'textfield', + '#title' => 'Address for Notification', + '#description' => 'When a site has been been created and migrated, send an email to this address.', + '#default_value' => variable_get('unl_site_created_email_address'), + ); + + $form['root']['unl_site_created_alert_admins'] = array( + '#type' => 'checkbox', + '#title' => 'Email Site Admins', + '#description' => 'When a site has been created and migrated, send an email to the Site Admins.', + '#default_value' => variable_get('unl_site_created_alert_admins'), + ); + + $form['root']['submit'] = array( + '#type' => 'submit', + '#value' => 'Update Settings', + ); + + return $form; +} + +function unl_site_email_settings_submit($form, &$form_state) { + variable_set('unl_site_created_email_address', $form_state['values']['unl_site_created_email_address']); + variable_set('unl_site_created_alert_admins', $form_state['values']['unl_site_created_alert_admins']); +} + function unl_site_remove($site_id) { $uri = db_select('unl_sites', 's')