diff --git a/sites/all/modules/unl/cron.php b/sites/all/modules/unl/cron.php index a4e417593a42cc36bd52f246570eb4657bf31f5b..f04a230e4ab3b58adff372eb8f6ed97c260aa6ce 100644 --- a/sites/all/modules/unl/cron.php +++ b/sites/all/modules/unl/cron.php @@ -65,7 +65,7 @@ function unl_add_aliases() { $query = db_select('unl_sites_aliases', 'a'); $query->join('unl_sites', 's', 's.site_id = a.site_id'); $query->fields('s', array('uri')); - $query->fields('a', array('site_alias_id', 'uri')); + $query->fields('a', array('site_alias_id', 'base_uri', 'path')); $query->condition('a.installed', 0); $results = $query->execute()->fetchAll(); @@ -74,7 +74,7 @@ function unl_add_aliases() { ->fields(array('installed' => 1)) ->condition('site_alias_id', $row->site_alias_id) ->execute(); - if (unl_add_alias($row->uri, $row->a_uri)) { + if (unl_add_alias($row->uri, $row->base_uri, $row->path, $row->site_alias_id)) { db_update('unl_sites_aliases') ->fields(array('installed' => 2)) ->condition('site_alias_id', $row->site_alias_id) @@ -91,7 +91,7 @@ function unl_add_aliases() { function unl_remove_aliases() { $query = db_select('unl_sites_aliases', 'a'); - $query->fields('a', array('site_alias_id', 'uri')); + $query->fields('a', array('site_alias_id', 'base_uri', 'path')); $query->condition('a.installed', 3); $results = $query->execute()->fetchAll(); @@ -100,7 +100,7 @@ function unl_remove_aliases() { ->fields(array('installed' => 4)) ->condition('site_alias_id', $row->site_alias_id) ->execute(); - if (unl_remove_alias($row->uri)) { + if (unl_remove_alias($row->base_uri, $row->path, $row->site_alias_id)) { db_delete('unl_sites_aliases') ->condition('site_alias_id', $row->site_alias_id) ->execute(); @@ -164,22 +164,8 @@ function unl_add_site($site_path, $uri, $clean_url, $db_prefix, $site_id) { $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"; shell_exec($command); - $stub_token = ' # %UNL_CREATION_TOOL_STUB%'; - $htaccess = file_get_contents(DRUPAL_ROOT . '/.htaccess'); - $stub_pos = strpos($htaccess, $stub_token); - if ($stub_pos === FALSE) { - return FALSE; - } - $new_htaccess = substr($htaccess, 0, $stub_pos) - . " # %UNL_START_SITE_ID_$site_id%\n"; - foreach (array('misc', 'modules', 'sites', 'themes') as $drupal_dir) { - $new_htaccess .= " RewriteRule $site_path/$drupal_dir/(.*) $drupal_dir/$1\n"; - } - $new_htaccess .= " # %UNL_END_SITE_ID_$site_id%\n\n" - . $stub_token - . substr($htaccess, $stub_pos + strlen($stub_token)); + unl_add_site_to_htaccess($site_id, $site_path, FALSE); - file_put_contents(DRUPAL_ROOT . '/.htaccess', $new_htaccess); return TRUE; } @@ -233,23 +219,83 @@ function unl_remove_site($site_path, $uri, $db_prefix, $site_id) { ; file_put_contents(DRUPAL_ROOT . '/.htaccess', $new_htaccess); + unl_remove_site_from_htaccess($site_id, FALSE); + return TRUE; } -function unl_add_alias($site_uri, $alias_uri) { +function unl_add_alias($site_uri, $base_uri, $path, $alias_id) { + $alias_uri = $base_uri . $path; $real_config_dir = _unl_get_sites_subdir($site_uri); $alias_config_dir = _unl_get_sites_subdir($alias_uri, FALSE); - return symlink($real_config_dir, DRUPAL_ROOT . '/sites/' . $alias_config_dir); + $result = symlink($real_config_dir, DRUPAL_ROOT . '/sites/' . $alias_config_dir); + + if ($path) { + unl_add_site_to_htaccess($alias_id, $path, TRUE); + } + + return TRUE; } -function unl_remove_alias($alias_uri) { +function unl_remove_alias($base_uri, $path, $alias_id) { + $alias_uri = $base_uri . $path; $alias_config_dir = _unl_get_sites_subdir($alias_uri, FALSE); - return unlink(DRUPAL_ROOT . '/sites/' . $alias_config_dir); + unlink(DRUPAL_ROOT . '/sites/' . $alias_config_dir); + + unl_remove_site_from_htaccess($alias_id, TRUE); + + return TRUE; } +function unl_add_site_to_htaccess($site_id, $site_path, $is_alias) { + if ($is_alias) { + $site_or_alias = 'ALIAS'; + } + else { + $site_or_alias = 'SITE'; + } + + $stub_token = ' # %UNL_CREATION_TOOL_STUB%'; + $htaccess = file_get_contents(DRUPAL_ROOT . '/.htaccess'); + $stub_pos = strpos($htaccess, $stub_token); + if ($stub_pos === FALSE) { + return FALSE; + } + $new_htaccess = substr($htaccess, 0, $stub_pos) + . " # %UNL_START_{$site_or_alias}_ID_{$site_id}%\n"; + foreach (array('misc', 'modules', 'sites', 'themes') as $drupal_dir) { + $new_htaccess .= " RewriteRule $site_path/$drupal_dir/(.*) $drupal_dir/$1\n"; + } + $new_htaccess .= " # %UNL_END_{$site_or_alias}_ID_{$site_id}%\n\n" + . $stub_token + . substr($htaccess, $stub_pos + strlen($stub_token)); + + file_put_contents(DRUPAL_ROOT . '/.htaccess', $new_htaccess); +} - - +function unl_remove_site_from_htaccess($site_id, $is_alias) { + if ($is_alias) { + $site_or_alias = 'ALIAS'; + } + else { + $site_or_alias = 'SITE'; + } + + $htaccess = file_get_contents(DRUPAL_ROOT . '/.htaccess'); + $site_start_token = "\n # %UNL_START_{$site_or_alias}_ID_{$site_id}%"; + $site_end_token = " # %UNL_END_{$site_or_alias}_ID_{$site_id}%\n"; + + $start_pos = strpos($htaccess, $site_start_token); + $end_pos = strpos($htaccess, $site_end_token); + + if ($start_pos === FALSE || $end_pos === FALSE) { + return FALSE; + } + $new_htaccess = substr($htaccess, 0, $start_pos) + . substr($htaccess, $end_pos + strlen($site_end_token)) + ; + file_put_contents(DRUPAL_ROOT . '/.htaccess', $new_htaccess); +} diff --git a/sites/all/modules/unl/unl.install b/sites/all/modules/unl/unl.install index b337818dc0cb01f6d2fd788c52ae69c85d1aa6bf..eae46f20e5a260c0cae638e7f4f4f5be4c165b5f 100644 --- a/sites/all/modules/unl/unl.install +++ b/sites/all/modules/unl/unl.install @@ -77,7 +77,12 @@ function unl_schema() { 'unsigned' => TRUE, 'not null' => TRUE, ), - 'uri' => array( + 'base_uri' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => TRUE, + ), + 'path' => array( 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, @@ -90,7 +95,7 @@ function unl_schema() { ), 'primary key' => array('site_alias_id'), 'unique keys' => array( - 'alias_uri' => array('uri'), + 'alias_uri' => array('base_uri', 'path'), ), 'foreign keys' => array( 'aliased_site' => array( @@ -231,3 +236,22 @@ function unl_update_7105() { 'default' => '', )); } + +function unl_update_7106() { + db_drop_unique_key('unl_sites_aliases', 'alias_uri'); + + db_change_field('unl_sites_aliases', 'uri', 'base_uri', array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => TRUE, + )); + + db_add_field('unl_sites_aliases', 'path', array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => TRUE, + 'default' => '', + )); + + db_add_unique_key('unl_sites_aliases', 'alias_uri', array('base_uri', 'path')); +} diff --git a/sites/all/modules/unl/unl.module b/sites/all/modules/unl/unl.module index 60df190836ac065765f2ea47ba2b8c76c944b75a..29d479fe61bdbc3866fda78c185525cfaeb2a391 100644 --- a/sites/all/modules/unl/unl.module +++ b/sites/all/modules/unl/unl.module @@ -387,6 +387,10 @@ function unl_url_outbound_alter(&$path, &$options, $original_path) { $generic_user = FALSE; } + if (isset($options['https'])) { + return; + } + $options['https'] = (bool) (variable_get('https', 0) && !$generic_user); } @@ -560,7 +564,7 @@ function unl_get_alternate_base_uris() { return array(); } $rows = db_query( - "SELECT s.uri AS uri, a.uri AS a_uri " + "SELECT s.uri, a.base_uri, a.path " . "FROM {$shared_prefix}unl_sites AS s " . "LEFT JOIN {$shared_prefix}unl_sites_aliases AS a " . " ON s.site_id = a.site_id " @@ -574,8 +578,8 @@ function unl_get_alternate_base_uris() { $uris = array($rows[0]->uri); foreach ($rows as $row) { - if ($row->a_uri) { - $uris[] = $row->a_uri; + if ($row->base_uri . $row->path) { + $uris[] = $row->base_uri . $row->path; } } diff --git a/sites/all/modules/unl/unl_site_creation.php b/sites/all/modules/unl/unl_site_creation.php index 3519ab41df4f4fa2e567d8cb94b0610cca776639..fa8ce3d052692c38d60f615b2081da72bc30339c 100644 --- a/sites/all/modules/unl/unl_site_creation.php +++ b/sites/all/modules/unl/unl_site_creation.php @@ -66,7 +66,7 @@ function unl_site_create_submit($form, &$form_state) { $site_path = $form_state['values']['site_path']; $clean_url = $form_state['values']['clean_url']; - $uri = url($site_path, array('absolute' => TRUE)); + $uri = url($site_path, array('absolute' => TRUE, 'https' => FALSE)); $clean_url = intval($clean_url); @@ -293,15 +293,21 @@ function unl_alias_create($form, &$form_state) { '#options' => $site_list, '#required' => TRUE, ); - - $form['root']['alias_uri'] = array( + + $form['root']['base_uri'] = array( '#type' => 'textfield', - '#title' => t('Alias URL'), - '#description' => t('Full URL for the new alias.'), - '#default_value' => t('http://newsite.example.com/'), + '#title' => t('Alias Base URL'), + '#description' => t('The base URL for the new alias.'), + '#default_value' => url('', array('https' => FALSE)), '#required' => TRUE, ); + $form['root']['path'] = array( + '#type' => 'textfield', + '#title' => t('Path'), + '#description' => t('Path for the new alias.'), + ); + $form['root']['submit'] = array( '#type' => 'submit', '#value' => 'Create Alias', @@ -312,8 +318,9 @@ function unl_alias_create($form, &$form_state) { function unl_alias_create_submit($form, &$form_state) { db_insert('unl_sites_aliases')->fields(array( - 'site_id' => $form_state['values']['site'], - 'uri' => $form_state['values']['alias_uri'], + 'site_id' => $form_state['values']['site'], + 'base_uri' => $form_state['values']['base_uri'], + 'path' => $form_state['values']['path'], ))->execute(); } @@ -351,13 +358,13 @@ function unl_alias_list($form, &$form_state) { ->orderByHeader($headers); $query->join('unl_sites', 's', 's.site_id = a.site_id'); $query->fields('s', array('uri')); - $query->fields('a', array('site_alias_id', 'uri', 'installed')); + $query->fields('a', array('site_alias_id', 'base_uri', 'path', 'installed')); $sites = $query->execute()->fetchAll(); foreach ($sites as $site) { $form['root']['alias_list']['rows'][$site->site_alias_id] = array( 'site_uri' => array('#prefix' => $site->uri), - 'alias_uri' => array('#prefix' => $site->a_uri), + 'alias_uri' => array('#prefix' => $site->base_uri . $site->path), 'installed' => array('#prefix' => _unl_get_install_status_text($site->installed)), 'remove' => array( '#type' => 'checkbox',