diff --git a/sites/all/modules/unl/cron.php b/sites/all/modules/unl/cron.php index ef13733ecffe2153eecee1613056749cc4f439a4..05f945594d561410bdf0ffd0373b98a3d2cb8488 100644 --- a/sites/all/modules/unl/cron.php +++ b/sites/all/modules/unl/cron.php @@ -14,8 +14,10 @@ drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); unl_remove_aliases(); unl_remove_sites(); +unl_remove_page_aliases(); unl_add_sites(); unl_add_aliases(); +unl_add_page_aliases(); function unl_add_sites() { $query = db_query('SELECT * FROM {unl_sites} WHERE installed=0'); @@ -114,6 +116,57 @@ function unl_remove_aliases() { } } +function unl_add_page_aliases() { + $query = db_select('unl_page_aliases', 'a'); + $query->fields('a', array('page_alias_id', 'from_uri', 'to_uri')); + $query->condition('a.installed', 0); + $results = $query->execute()->fetchAll(); + + foreach ($results as $row) { + db_update('unl_page_aliases') + ->fields(array('installed' => 1)) + ->condition('page_alias_id', $row->page_alias_id) + ->execute(); + if (unl_add_page_alias($row->from_uri, $row->to_uri, $row->page_alias_id)) { + db_update('unl_page_aliases') + ->fields(array('installed' => 2)) + ->condition('page_alias_id', $row->page_alias_id) + ->execute(); + } + else { + db_update('unl_sites_aliases') + ->fields(array('installed' => 5)) + ->condition('site_alias_id', $row->page_alias_id) + ->execute(); + } + } +} + +function unl_remove_page_aliases() { + $query = db_select('unl_page_aliases', 'a'); + $query->fields('a', array('page_alias_id')); + $query->condition('a.installed', 3); + $results = $query->execute()->fetchAll(); + + foreach ($results as $row) { + db_update('unl_page_aliases') + ->fields(array('installed' => 4)) + ->condition('page_alias_id', $row->page_alias_id) + ->execute(); + if (unl_remove_page_alias($row->page_alias_id)) { + db_delete('unl_page_aliases') + ->condition('page_alias_id', $row->page_alias_id) + ->execute(); + } + else { + db_update('unl_page_aliases') + ->fields(array('installed' => 5)) + ->condition('page_alias_id', $row->page_alias_id) + ->execute(); + } + } +} + function _unl_get_sites_subdir($uri, $trim_subdomain = TRUE) { $path_parts = parse_url($uri); @@ -251,6 +304,21 @@ function unl_remove_alias($base_uri, $path, $alias_id) { return TRUE; } +function unl_add_page_alias($from_uri, $to_uri, $alias_id) { + $host = parse_url($from_uri, PHP_URL_HOST); + $path = parse_url($from_uri, PHP_URL_PATH); + + unl_add_page_alias_to_htaccess($alias_id, $host, $path, $to_uri); + + return TRUE; +} + +function unl_remove_page_alias($alias_id) { + unl_remove_page_alias_from_htaccess($alias_id); + + return TRUE; +} + function unl_add_site_to_htaccess($site_id, $site_path, $is_alias) { if ($is_alias) { $site_or_alias = 'ALIAS'; @@ -301,6 +369,42 @@ function unl_remove_site_from_htaccess($site_id, $is_alias) { file_put_contents(DRUPAL_ROOT . '/.htaccess', $new_htaccess); } +function unl_add_page_alias_to_htaccess($site_id, $host, $path, $to_uri) { + $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_PAGE_ALIAS_ID_{$site_id}%\n" + . " RewriteCond %{HTTP_HOST} ^{$host}$\n" + . " RewriteCond %{REQUEST_URI} ^{$path}$\n" + . " RewriteRule (.*) {$to_uri} [R,L]\n" + . " # %UNL_END_PAGE_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_page_alias_from_htaccess($site_id) { + $htaccess = file_get_contents(DRUPAL_ROOT . '/.htaccess'); + $site_start_token = "\n # %UNL_START_PAGE_ALIAS_ID_{$site_id}%"; + $site_end_token = " # %UNL_END_PAGE_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 eae46f20e5a260c0cae638e7f4f4f5be4c165b5f..97b001e718417d36473afcb19da7a2333f8acb06 100644 --- a/sites/all/modules/unl/unl.install +++ b/sites/all/modules/unl/unl.install @@ -56,14 +56,14 @@ function unl_schema() { 'not null' => TRUE, 'default' => '', ), - + ), 'primary key' => array('site_id'), 'unique keys' => array( 'sub_site' => array('site_path'), ), ); - + $schema['unl_sites_aliases'] = array( 'description' => 'Table of URL aliases for UNL sites.', 'fields' => array( @@ -104,7 +104,37 @@ function unl_schema() { ), ), ); - + + $schema['unl_page_aliases'] = array( + 'description' => 'Table of URL aliases for UNL pages.', + 'fields' => array( + 'page_alias_id' => array( + 'type' => 'serial', + 'unsigned' => TRUE, + 'not null' => TRUE, + ), + 'from_uri' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => TRUE, + ), + 'to_uri' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => TRUE, + ), + 'installed' => array( + 'type' => 'int', + 'not null' => TRUE, + 'default' => 0, + ), + ), + 'primary key' => array('page_alias_id'), + 'unique keys' => array( + 'from_uri' => array('from_uri'), + ), + ); + return $schema; } @@ -149,7 +179,7 @@ function unl_update_7100() { 'sub_site' => array('site_path_prefix', 'site_path'), ) ); - + db_create_table('unl_sites', $table); } @@ -209,7 +239,7 @@ function unl_update_7103() { ), ), ); - + db_create_table('unl_sites_aliases', $table); } @@ -239,19 +269,53 @@ function unl_update_7105() { 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')); } + +function unl_update_7107() { + $table = array( + 'description' => 'Table of URL aliases for UNL pages.', + 'fields' => array( + 'page_alias_id' => array( + 'type' => 'serial', + 'unsigned' => TRUE, + 'not null' => TRUE, + ), + 'from_uri' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => TRUE, + ), + 'to_uri' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => TRUE, + ), + 'installed' => array( + 'type' => 'int', + 'not null' => TRUE, + 'default' => 0, + ), + ), + 'primary key' => array('page_alias_id'), + 'unique keys' => array( + 'from_uri' => array('from_uri'), + ), + ); + + db_create_table('unl_page_aliases', $table); +} diff --git a/sites/all/modules/unl/unl_site_creation.php b/sites/all/modules/unl/unl_site_creation.php index 040fd538b2cdd4335bcd1697775c5b0773d607bb..214d84843b98823e1c477cca7de28e1a80aa02de 100644 --- a/sites/all/modules/unl/unl_site_creation.php +++ b/sites/all/modules/unl/unl_site_creation.php @@ -299,14 +299,16 @@ function _unl_get_sites_subdir($uri) { function unl_aliases_page() { $page = array(); - $page[] = drupal_get_form('unl_alias_create'); - $page[] = drupal_get_form('unl_alias_list'); + $page[] = drupal_get_form('unl_site_alias_create'); + $page[] = drupal_get_form('unl_site_alias_list'); + $page[] = drupal_get_form('unl_page_alias_create'); + $page[] = drupal_get_form('unl_page_alias_list'); return $page; } -function unl_alias_create($form, &$form_state) { +function unl_site_alias_create($form, &$form_state) { $sites = db_select('unl_sites', 's') ->fields('s', array('site_id', 'uri')) @@ -318,7 +320,7 @@ function unl_alias_create($form, &$form_state) { $form['root'] = array( '#type' => 'fieldset', - '#title' => 'Create New Alias', + '#title' => 'Create New Site Alias', ); $form['root']['site'] = array( @@ -351,7 +353,7 @@ function unl_alias_create($form, &$form_state) { return $form; } -function unl_alias_create_submit($form, &$form_state) { +function unl_site_alias_create_submit($form, &$form_state) { db_insert('unl_sites_aliases')->fields(array( 'site_id' => $form_state['values']['site'], 'base_uri' => $form_state['values']['base_uri'], @@ -360,11 +362,11 @@ function unl_alias_create_submit($form, &$form_state) { } -function unl_alias_list($form, &$form_state) { +function unl_site_alias_list($form, &$form_state) { $form['root'] = array( '#type' => 'fieldset', - '#title' => 'Existing Aliases', + '#title' => 'Existing Site Aliases', ); $headers = array( @@ -417,7 +419,7 @@ function unl_alias_list($form, &$form_state) { return $form; } -function unl_alias_list_submit($form, &$form_state) { +function unl_site_alias_list_submit($form, &$form_state) { $site_alias_ids = array(); foreach ($form_state['values']['aliases'] as $site_alias_id => $alias) { if ($alias['remove']) { @@ -432,6 +434,115 @@ function unl_alias_list_submit($form, &$form_state) { } +function unl_page_alias_create($form, &$form_state) { + + $form['root'] = array( + '#type' => 'fieldset', + '#title' => 'Create New Page Alias', + ); + + $form['root']['from_uri'] = array( + '#type' => 'textfield', + '#title' => t('From URL'), + '#description' => 'The URL that users will visit.', + '#default_value' => url('', array('https' => FALSE)), + '#required' => TRUE, + ); + + $form['root']['to_uri'] = array( + '#type' => 'textfield', + '#title' => t('To URL'), + '#description' => t('The URL users will be redirected to.'), + '#default_value' => url('', array('https' => FALSE)), + '#required' => TRUE, + ); + + $form['root']['submit'] = array( + '#type' => 'submit', + '#value' => 'Create Alias', + ); + + return $form; +} + +function unl_page_alias_create_submit($form, &$form_state) { + db_insert('unl_page_aliases')->fields(array( + 'from_uri' => $form_state['values']['from_uri'], + 'to_uri' => $form_state['values']['to_uri'], + ))->execute(); +} + + +function unl_page_alias_list($form, &$form_state) { + + $form['root'] = array( + '#type' => 'fieldset', + '#title' => 'Existing Page Aliases', + ); + + $headers = array( + 'site_uri' => array( + 'data' => 'From URI', + 'field' => 'a.from_uri', + ), + 'alias_uri' => array( + 'data' => 'To URI', + 'field' => 'a.to_uri', + ), + 'installed' => array( + 'data' => 'Status', + 'field' => 'a.installed', + ), + 'remove' => 'Remove (can not undo!)' + ); + + $form['root']['alias_list'] = array( + '#theme' => 'unl_table', + '#header' => $headers, + ); + + $query = db_select('unl_page_aliases', 'a') + ->extend('TableSort') + ->orderByHeader($headers); + $query->fields('a', array('page_alias_id', 'from_uri', 'to_uri', 'installed')); + $sites = $query->execute()->fetchAll(); + + foreach ($sites as $site) { + $form['root']['alias_list']['rows'][$site->page_alias_id] = array( + 'site_uri' => array('#prefix' => $site->from_uri), + 'alias_uri' => array('#prefix' => $site->to_uri), + 'installed' => array('#prefix' => _unl_get_install_status_text($site->installed)), + 'remove' => array( + '#type' => 'checkbox', + '#parents' => array('aliases', $site->page_alias_id, 'remove'), + '#default_value' => 0 + ), + ); + } + + $form['root']['submit'] = array( + '#type' => 'submit', + '#value' => 'Delete Selected Aliases', + ); + + return $form; +} + +function unl_page_alias_list_submit($form, &$form_state) { + $page_alias_ids = array(); + foreach ($form_state['values']['aliases'] as $page_alias_id => $alias) { + if ($alias['remove']) { + $page_alias_ids[] = $page_alias_id; + } + } + + db_update('unl_page_aliases') + ->fields(array('installed' => 3)) + ->condition('page_alias_id', $page_alias_ids, 'IN') + ->execute(); +} + + function unl_wdn_registry($form, &$form_state) { $form['root'] = array(