Skip to content
Snippets Groups Projects
Commit 8cb4d26b authored by Tim Steiner's avatar Tim Steiner
Browse files

Updates to the unl migration tool, including a UI change and the addition of...

Updates to the unl migration tool, including a UI change and the addition of the ability to manage site aliases.

git-svn-id: file:///tmp/wdn_thm_drupal/trunk@283 20a16fea-79d4-4915-8869-1ea9d5ebf173
parent ed265033
No related branches found
No related tags found
No related merge requests found
......@@ -12,44 +12,125 @@ require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_override_server_variables();
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$query = db_query('SELECT * FROM {unl_sites} WHERE installed=0');
while ($row = $query->fetchAssoc()) {
db_update('unl_sites')
->fields(array('installed' => 1))
->condition('site_id', $row['site_id'])
->execute();
if (unl_add_site($row['site_path'], $row['uri'], $row['clean_url'], $row['db_prefix'], $row['site_id'])) {
unl_remove_aliases();
unl_remove_sites();
unl_add_sites();
unl_add_aliases();
function unl_add_sites() {
$query = db_query('SELECT * FROM {unl_sites} WHERE installed=0');
while ($row = $query->fetchAssoc()) {
db_update('unl_sites')
->fields(array('installed' => 2))
->fields(array('installed' => 1))
->condition('site_id', $row['site_id'])
->execute();
if (unl_add_site($row['site_path'], $row['uri'], $row['clean_url'], $row['db_prefix'], $row['site_id'])) {
db_update('unl_sites')
->fields(array('installed' => 2))
->condition('site_id', $row['site_id'])
->execute();
}
else {
db_update('unl_sites')
->fields(array('installed' => 5))
->condition('site_id', $row['site_id'])
->execute();
}
}
else {
}
function unl_remove_sites() {
$query = db_query('SELECT * FROM {unl_sites} WHERE installed=3');
while ($row = $query->fetchAssoc()) {
db_update('unl_sites')
->fields(array('installed' => 5))
->fields(array('installed' => 4))
->condition('site_id', $row['site_id'])
->execute();
if (unl_remove_site($row['site_path'], $row['uri'], $row['db_prefix'], $row['site_id'])) {
db_delete('unl_sites')
->condition('site_id', $row['site_id'])
->execute();
}
else {
db_update('unl_sites')
->fields(array('installed' => 5))
->condition('site_id', $row['site_id'])
->execute();
}
}
}
$query = db_query('SELECT * FROM {unl_sites} WHERE installed=3');
while ($row = $query->fetchAssoc()) {
db_update('unl_sites')
->fields(array('installed' => 4))
->condition('site_id', $row['site_id'])
->execute();
if (unl_remove_site($row['site_path'], $row['uri'], $row['db_prefix'], $row['site_id'])) {
db_delete('unl_sites')
->condition('site_id', $row['site_id'])
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->condition('a.installed', 0);
$results = $query->execute()->fetchAll();
foreach ($results as $row) {
db_update('unl_sites_aliases')
->fields(array('installed' => 1))
->condition('site_alias_id', $row->site_alias_id)
->execute();
if (unl_add_alias($row->uri, $row->a_uri)) {
db_update('unl_sites_aliases')
->fields(array('installed' => 2))
->condition('site_alias_id', $row->site_alias_id)
->execute();
}
else {
db_update('unl_sites_aliases')
->fields(array('installed' => 5))
->condition('site_alias_id', $row->site_alias_id)
->execute();
}
}
else {
db_update('unl_sites')
->fields(array('installed' => 5))
->condition('site_id', $row['site_id'])
}
function unl_remove_aliases() {
$query = db_select('unl_sites_aliases', 'a');
$query->fields('a', array('site_alias_id', 'uri'));
$query->condition('a.installed', 3);
$results = $query->execute()->fetchAll();
foreach ($results as $row) {
db_update('unl_sites_aliases')
->fields(array('installed' => 4))
->condition('site_alias_id', $row->site_alias_id)
->execute();
if (unl_remove_alias($row->uri)) {
db_delete('unl_sites_aliases')
->condition('site_alias_id', $row->site_alias_id)
->execute();
}
else {
db_update('unl_sites_aliases')
->fields(array('installed' => 5))
->condition('site_alias_id', $row->site_alias_id)
->execute();
}
}
}
function _unl_get_sites_subdir($uri, $trim_subdomain = TRUE) {
$path_parts = parse_url($uri);
if ($trim_subdomain && substr($path_parts['host'], -7) == 'unl.edu') {
$path_parts['host'] = 'unl.edu';
}
$sites_subdir = $path_parts['host'] . $path_parts['path'];
$sites_subdir = strtr($sites_subdir, array('/' => '.'));
while (substr($sites_subdir, 0, 1) == '.') {
$sites_subdir = substr($sites_subdir, 1);
}
while (substr($sites_subdir, -1) == '.') {
$sites_subdir = substr($sites_subdir, 0, -1);
}
return $sites_subdir;
}
......@@ -155,18 +236,16 @@ function unl_remove_site($site_path, $uri, $db_prefix, $site_id) {
return TRUE;
}
function _unl_get_sites_subdir($uri) {
$path_parts = parse_url($uri);
if (substr($path_parts['host'], -7) == 'unl.edu') {
$path_parts['host'] = 'unl.edu';
}
$sites_subdir = $path_parts['host'] . $path_parts['path'];
$sites_subdir = strtr($sites_subdir, array('/' => '.'));
return $sites_subdir;
function unl_add_alias($site_uri, $alias_uri) {
$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);
}
function unl_remove_alias($alias_uri) {
$alias_config_dir = _unl_get_sites_subdir($alias_uri, FALSE);
return unlink(DRUPAL_ROOT . '/sites/' . $alias_config_dir);
}
......
......@@ -42,7 +42,43 @@ function unl_schema() {
'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(
'site_alias_id' => array(
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
),
'site_id' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
'uri' => array(
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
),
'installed' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
),
'primary key' => array('site_alias_id'),
'unique keys' => array(
'alias_uri' => array('uri'),
),
'foreign keys' => array(
'aliased_site' => array(
'table' => 'unl_sites',
'columns' => array('site_id' => 'site_id'),
),
),
);
return $schema;
......@@ -112,3 +148,43 @@ function unl_update_7102() {
db_query("UPDATE {unl_sites} SET site_path = CONCAT(site_path_prefix, '/', site_path) WHERE site_path_prefix != ''");
db_drop_field('unl_sites', 'site_path_prefix');
}
function unl_update_7103() {
$table = array(
'description' => 'Table of URL aliases for UNL sites.',
'fields' => array(
'site_alias_id' => array(
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
),
'site_id' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
'uri' => array(
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
),
'installed' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
),
'primary key' => array('site_alias_id'),
'unique keys' => array(
'alias_uri' => array('uri'),
),
'foreign keys' => array(
'aliased_site' => array(
'table' => 'unl_sites',
'columns' => array('site_id' => 'site_id'),
),
),
);
db_create_table('unl_sites_aliases', $table);
}
......@@ -105,27 +105,25 @@ function unl_menu() {
if (conf_path() == 'sites/default') {
$items['admin/sites/unl'] = array(
'title' => 'UNL Site Creation Tool',
'description' => 'Create a new UNL Drupal site',
'description' => 'Create and manage UNL Drupal sites and aliases.',
'access arguments' => array('unl site creation'),
'page callback' => 'drupal_get_form',
'page arguments' => array('unl_site_creation'),
'page callback' => 'unl_sites_page',
'type' => MENU_LOCAL_TASK,
'file' => 'unl_site_creation.php',
);
$items['admin/sites/unl/add'] = array(
'title' => 'Add',
'description' => 'Determine access to features by selecting permissions for roles.',
$items['admin/sites/unl/sites'] = array(
'title' => 'Sites',
'description' => 'Create and manage UNL Drupal sites.',
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => -8,
);
$items['admin/sites/unl/list'] = array(
'title' => 'List',
'description' => 'List UNL Drupal sites',
$items['admin/sites/unl/aliases'] = array(
'title' => 'Aliases',
'description' => 'Manage aliases of UNL Drupal sites.',
'access arguments' => array('unl site creation'),
'page callback' => 'drupal_get_form',
'page arguments' => array('unl_site_list'),
'page callback' => 'unl_aliases_page',
'type' => MENU_LOCAL_TASK,
'file' => 'unl_site_creation.php',
);
......@@ -224,7 +222,10 @@ function unl_theme() {
return array(
'unl_site_list_table' => array(
'render element' => 'form'
)
),
'unl_alias_list_table' => array(
'render element' => 'form'
),
);
}
......
......@@ -2,10 +2,21 @@
require_once DRUPAL_ROOT . '/includes/install.core.inc';
function unl_site_creation($form, &$form_state) {
function unl_sites_page() {
$page = array();
$page[] = drupal_get_form('unl_site_create');
$page[] = drupal_get_form('unl_site_list');
return $page;
}
function unl_site_create($form, &$form_state) {
$form['root'] = array(
'#type' => 'fieldset',
'#title' => 'Site Creation Tool',
'#title' => 'Create New Site',
);
$form['root']['site_path'] = array(
......@@ -23,7 +34,7 @@ function unl_site_creation($form, &$form_state) {
'#default_value' => 1,
);
$form['submit'] = array(
$form['root']['submit'] = array(
'#type' => 'submit',
'#value' => 'Create Site',
);
......@@ -31,7 +42,7 @@ function unl_site_creation($form, &$form_state) {
return $form;
}
function unl_site_creation_validate($form, &$form_state) {
function unl_site_create_validate($form, &$form_state) {
$site_path = trim($form_state['values']['site_path']);
if (substr($site_path, 0, 1) == '/') {
......@@ -50,7 +61,7 @@ function unl_site_creation_validate($form, &$form_state) {
$form_state['values']['site_path'] = $site_path;
}
function unl_site_creation_submit($form, &$form_state) {
function unl_site_create_submit($form, &$form_state) {
$site_path = $form_state['values']['site_path'];
$clean_url = $form_state['values']['clean_url'];
......@@ -77,8 +88,11 @@ function unl_site_creation_submit($form, &$form_state) {
function unl_site_list($form, &$form_state) {
$form['root'] = array(
'#type' => 'fieldset',
'#title' => 'UNL Site List',
'#theme' => 'unl_site_list_table'
'#title' => 'Existing Sites',
);
$form['root']['site_list'] = array(
'#theme' => 'unl_site_list_table',
);
$sites = db_select('unl_sites', 's')
......@@ -87,7 +101,7 @@ function unl_site_list($form, &$form_state) {
->fetchAll();
foreach ($sites as $site) {
$form['root'][$site->site_id] = array(
$form['root']['site_list'][$site->site_id] = array(
'site_path' => array('#value' => $site->site_path),
'db_prefix' => array('#value' => $site->db_prefix . '_' . $GLOBALS['databases']['default']['default']['prefix']),
'installed' => array('#value' => $site->installed),
......@@ -100,12 +114,11 @@ function unl_site_list($form, &$form_state) {
);
}
$form['submit'] = array(
$form['root']['submit'] = array(
'#type' => 'submit',
'#value' => 'Delete Selected Sites',
);
//print_r($form); exit;
return $form;
}
......@@ -115,32 +128,7 @@ function theme_unl_site_list_table($variables) {
$headers = array('Site Path', 'Datbase Prefix', 'Status', 'Link', 'Remove (can not undo!)');
$rows = array();
foreach (element_children($form) as $key) {
$installed = $form[$key]['installed']['#value'];
switch ($installed) {
case 0:
$installed = 'Scheduled for creation.';
break;
case 1:
$installed = 'Curently being created.';
break;
case 2:
$installed = 'In production.';
break;
case 3:
$installed = 'Scheduled for removal.';
break;
case 4:
$installed = 'Currently being removed.';
break;
default:
$installed = 'Unknown';
break;
}
$installed = _unl_get_install_status_text($form[$key]['installed']['#value']);
$rows[] = array(
'data' => array(
$form[$key]['site_path']['#value'],
......@@ -152,7 +140,7 @@ function theme_unl_site_list_table($variables) {
);
}
return theme('table', array('header' => $headers, 'rows' => $rows, 'caption' => $form['#title']));
return theme('table', array('header' => $headers, 'rows' => $rows));
}
function unl_site_list_submit($form, &$form_state) {
......@@ -167,6 +155,7 @@ function unl_site_list_submit($form, &$form_state) {
}
}
function unl_site_remove($site_id) {
$uri = db_select('unl_sites', 's')
->fields('s', array('uri'))
......@@ -202,6 +191,10 @@ function unl_site_remove($site_id) {
->fields(array('installed' => 3))
->condition('site_id', $site_id)
->execute();
db_update('unl_sites_aliases')
->fields(array('installed' => 3))
->condition('site_id', $site_id)
->execute();
drupal_set_message('The site has been scheduled for removal.');
}
......@@ -218,12 +211,163 @@ 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');
return $page;
}
function unl_alias_create($form, &$form_state) {
$sites = db_select('unl_sites', 's')
->fields('s', array('site_id', 'uri'))
->execute()
->fetchAll();
foreach ($sites as $site) {
$site_list[$site->site_id] = $site->uri . '/';
}
$form['root'] = array(
'#type' => 'fieldset',
'#title' => 'Create New Alias',
);
$form['root']['site'] = array(
'#type' => 'select',
'#title' => 'Aliased Site',
'#description' => 'The site the alias will point to.',
'#options' => $site_list,
'#required' => TRUE,
);
$form['root']['alias_uri'] = array(
'#type' => 'textfield',
'#title' => t('Alias URL'),
'#description' => t('Full URL for the new alias.'),
'#default_value' => t('http://newsite.example.com/'),
'#required' => TRUE,
);
$form['root']['submit'] = array(
'#type' => 'submit',
'#value' => 'Create Alias',
);
return $form;
}
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'],
))->execute();
}
function unl_alias_list($form, &$form_state) {
$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', 'installed'));
$sites = $query->execute()->fetchAll();
$form['root'] = array(
'#type' => 'fieldset',
'#title' => 'Existing Aliases',
);
$form['root']['alias_list'] = array(
'#theme' => 'unl_alias_list_table',
);
foreach ($sites as $site) {
$form['root']['alias_list'][$site->site_alias_id] = array(
'site_uri' => array('#value' => $site->uri),
'alias_uri' => array('#value' => $site->a_uri),
'installed' => array('#value' => $site->installed),
'remove' => array(
'#type' => 'checkbox',
'#parents' => array('aliases', $site->site_alias_id, 'remove'),
'#default_value' => 0
),
);
}
$form['root']['submit'] = array(
'#type' => 'submit',
'#value' => 'Delete Selected Aliases',
);
return $form;
}
function theme_unl_alias_list_table($variables) {
$form = $variables['form'];
$headers = array('Site URI', 'Alias URI', 'Status', 'Remove (can not undo!)');
$rows = array();
foreach (element_children($form) as $key) {
$installed = _unl_get_install_status_text($form[$key]['installed']['#value']);
$rows[] = array(
'data' => array(
$form[$key]['site_uri']['#value'],
$form[$key]['alias_uri']['#value'],
$installed,
drupal_render($form[$key]['remove']),
)
);
}
return theme('table', array('header' => $headers, 'rows' => $rows));
}
function unl_alias_list_submit($form, &$form_state) {
$site_alias_ids = array();
foreach ($form_state['values']['aliases'] as $site_alias_id => $alias) {
if ($alias['remove']) {
$site_alias_ids[] = $site_alias_id;
}
}
db_update('unl_sites_aliases')
->fields(array('installed' => 3))
->condition('site_alias_id', $site_alias_ids, 'IN')
->execute();
}
function _unl_get_install_status_text($id) {
switch ($id) {
case 0:
$installed = 'Scheduled for creation.';
break;
case 1:
$installed = 'Curently being created.';
break;
case 2:
$installed = 'In production.';
break;
case 3:
$installed = 'Scheduled for removal.';
break;
case 4:
$installed = 'Currently being removed.';
break;
default:
$installed = 'Unknown';
break;
}
return $installed;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment