domain.install in Domain Access 7.3
Same filename and directory in other branches
Install file.
File
domain.installView source
<?php
/**
* @file
* Install file.
*/
/**
* Implements hook_install().
*/
function domain_install() {
domain_set_primary_domain();
}
/**
* Implements hook_schema().
*/
function domain_schema() {
$schema['domain'] = array(
'description' => 'The base table for domain records',
'fields' => array(
'domain_id' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'description' => 'Domain numeric id.',
),
'subdomain' => array(
'type' => 'varchar',
'length' => '255',
'not null' => TRUE,
'default' => '',
'description' => 'Registered DNS entry, will match HTTP_HOST requests',
),
'sitename' => array(
'type' => 'varchar',
'length' => '255',
'not null' => TRUE,
'default' => '',
'description' => 'Site display name',
),
'scheme' => array(
'type' => 'varchar',
'length' => '8',
'not null' => TRUE,
'default' => 'http',
'description' => 'Protocol',
),
'valid' => array(
'type' => 'varchar',
'length' => '1',
'not null' => TRUE,
'default' => '1',
'description' => 'Active status',
),
'weight' => array(
'type' => 'int',
'unsigned' => FALSE,
'not null' => TRUE,
'default' => 0,
'description' => 'Sort order',
),
'is_default' => array(
'type' => 'int',
'size' => 'tiny',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'description' => 'Indicates primary domain',
),
'machine_name' => array(
'type' => 'varchar',
'length' => '255',
'not null' => TRUE,
'default' => '',
'description' => 'The machine name for this domain.',
),
),
'primary key' => array(
'domain_id',
),
'indexes' => array(
'subdomain' => array(
'subdomain',
),
'weight' => array(
'weight',
),
'is_default' => array(
'is_default',
),
),
'foreign_keys' => array(
'domain_id' => array(
'domain_export' => 'domain_id',
),
'machine_name' => array(
'domain_export' => 'machine_name',
),
),
);
$schema['domain_access'] = array(
'description' => 'Stores domain information for each node',
'fields' => array(
'nid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'description' => 'Node id, foreign key to {node}',
),
'gid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'description' => 'Node access grant id',
),
'realm' => array(
'type' => 'varchar',
'length' => '255',
'not null' => TRUE,
'default' => '',
'description' => 'Node access realm',
),
),
'primary key' => array(
'nid',
'gid',
'realm',
),
'indexes' => array(
'nid' => array(
'nid',
),
),
'foreign_keys' => array(
'nid' => array(
'node' => 'nid',
),
),
);
$schema['domain_editor'] = array(
'description' => 'Stores domain information for each user',
'fields' => array(
'uid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'description' => 'User id, foreign key to {user}',
),
'domain_id' => array(
'type' => 'int',
'unsigned' => FALSE,
'not null' => TRUE,
'default' => 0,
'description' => 'Domain id, foreign key to {domain}',
),
),
'primary key' => array(
'uid',
'domain_id',
),
'foreign_keys' => array(
'uid' => array(
'user' => 'uid',
),
'domain_id' => array(
'domain' => 'domain_id',
),
),
);
$schema['domain_export'] = array(
'description' => 'Stores canonical machine names for domains.',
'fields' => array(
'domain_id' => array(
'type' => 'serial',
'not null' => TRUE,
'description' => 'Domain id. Automatic master key.',
),
'machine_name' => array(
'type' => 'varchar',
'length' => '255',
'not null' => TRUE,
'default' => '',
'description' => 'The machine name for this domain.',
),
),
'unique keys' => array(
'machine_name' => array(
'machine_name',
),
),
'indexes' => array(
'domain_id' => array(
'domain_id',
),
),
);
return $schema;
}
/**
* Implements hook_uninstall().
*/
function domain_uninstall() {
$variables = array(
'domain_bootstrap_modules',
'domain_classes',
'domain_cron_rule',
'domain_debug',
'domain_default_source',
'domain_edit_on_primary',
'domain_force_admin',
'domain_grant_all',
'domain_list_size',
'domain_paths',
'domain_search',
'domain_select_format',
'domain_sitename_override',
'domain_seo',
'domain_vertical_tab',
'domain_www',
'domain_xmlrpc_rule',
);
if (function_exists('node_type_get_types')) {
$types = node_type_get_types();
foreach ($types as $key => $type) {
$variables[] = 'domain_node_' . $key;
}
}
foreach ($variables as $variable) {
variable_del($variable);
}
}
/**
* Checks module requirements.
*/
function domain_requirements($phase) {
$requirements = array();
switch ($phase) {
case 'install':
module_load_include('module', 'domain');
$root = strtolower(rtrim($_SERVER['HTTP_HOST']));
if ($error = domain_valid_domain($root)) {
$requirements['domain'] = array(
'title' => t('Domain Access'),
'value' => $error . t('If you are using drush, please provide the --uri option (e.g. drush en domain --uri="http://example.com/optional_subdirectory").'),
'severity' => REQUIREMENT_ERROR,
);
}
break;
case 'runtime':
$messages = array();
$severity = REQUIREMENT_ERROR;
// Ensure we have a primary domain.
$check = domain_default();
if ($check['domain_id'] == 0) {
$updated = t('set by an administrator');
if (user_access('administer domains')) {
$updated = l(t('set properly'), 'admin/structure/domain');
}
$messages[] = t('The site has no primary domain and needs to be !updated.', array(
'!updated' => $updated,
));
}
// Check for domain_id 0.
$list = domain_update_module_check();
domain_update_messages($messages, $list);
// Now report.
$t = get_t();
if (empty($messages)) {
$severity = REQUIREMENT_OK;
$messages[] = t('Module installed correctly.');
}
$requirements['domain'] = array(
'title' => $t('Domain Access'),
'value' => theme('item_list', array(
'items' => $messages,
)),
'severity' => $severity,
);
break;
}
return $requirements;
}
/**
* Update note.
*
* Upgrading from Drupal 5 to Drupal 7 is not supported.
* You must first upgrade to Drupal 6.x.2.3 or higher, and then proceed to Drupal 7.
*
*/
/**
* Update block deltas to Drupal 7.
*/
function domain_update_7000(&$sandbox) {
// Get an array of the renamed block deltas, organized by module.
$renamed_deltas = array(
'domain' => array(
'0' => 'switcher',
'1' => 'information',
),
);
$moved_deltas = array();
update_fix_d7_block_deltas($sandbox, $renamed_deltas, $moved_deltas);
return t('Domain Access blocks updated.');
}
/**
* Change the edit and delete permissions.
*/
function domain_update_7001(&$sandbox) {
db_update('role_permission')
->condition('permission', 'edit domain nodes')
->fields(array(
'permission' => 'edit domain content',
))
->execute();
db_update('role_permission')
->condition('permission', 'delete domain nodes')
->fields(array(
'permission' => 'delete domain content',
))
->execute();
return t('Updated Domain Access permission names.');
}
/**
* Add sorting to domains.
*/
function domain_update_7300(&$sandbox) {
if (db_field_exists('domain', 'weight')) {
return t('No update required');
}
db_add_field('domain', 'weight', array(
'type' => 'int',
'unsigned' => FALSE,
'not null' => TRUE,
'default' => 0,
), array());
db_add_index('domain', 'weight', array(
'weight',
));
variable_del('domain_sort');
return t('Domain sorting added.');
}
/**
* Add default domain flag and weight the default higher.
*/
function domain_update_7301(&$sandbox) {
if (db_field_exists('domain', 'is_default')) {
return t('No update required');
}
db_add_field('domain', 'is_default', array(
'type' => 'int',
'size' => 'tiny',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
), array());
db_update('domain')
->fields(array(
'is_default' => 1,
'weight' => -1,
))
->condition('domain_id', 0)
->execute();
variable_del('domain_default');
return t('Default domain updated.');
}
/**
* Add an index on {domain}.is_default.
*/
function domain_update_7302(&$sandbox) {
if (!db_index_exists('domain', 'is_default')) {
db_add_index('domain', 'is_default', array(
'is_default',
));
}
return t('Domain default indexed properly.');
}
/**
* Remove the zero record from the database.
*/
function domain_update_7303(&$sandbox) {
// We grab the default domain, remove it from the database, and
// then re-save it into the table, using the new value as the default domain.
$default = db_query("SELECT * FROM {domain} WHERE domain_id = 0")
->fetchAssoc();
if (empty($default)) {
return t('Domain Access did not find an existing domain 0. No updates required.');
}
// We have to do a delete and re-insert here to properly increment the id.
// Since the module might be disabled, we can't use drupal_write_record();
db_delete('domain')
->condition('domain_id', 0)
->execute();
db_insert('domain')
->fields(array(
'subdomain' => $default['subdomain'],
'sitename' => $default['sitename'],
'scheme' => $default['scheme'],
'valid' => $default['valid'],
'weight' => $default['weight'],
'is_default' => $default['is_default'],
))
->execute();
// Update tables that use a domain_id and we control directly.
$default_id = db_query("SELECT domain_id FROM {domain} WHERE is_default = 1")
->fetchField();
db_update('domain_editor')
->fields(array(
'domain_id' => $default_id,
))
->condition('domain_id', 0)
->execute();
db_update('domain_access')
->fields(array(
'gid' => $default_id,
))
->condition('gid', 0)
->condition('realm', 'domain_id')
->execute();
db_update('node_access')
->fields(array(
'gid' => $default_id,
))
->condition('gid', 0)
->condition('realm', 'domain_id')
->execute();
// Remove the old variables.
variable_del('domain_root');
variable_del('domain_sitename');
variable_del('domain_scheme');
// Update message.
return t('Domain Access updated domain 0 successfully');
}
/**
* Rebuild the {domain} table.
*/
function domain_update_7304(&$sandbox) {
// Reset the domain_id field as a plain integer.
$spec = array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'description' => 'Domain numeric id.',
);
db_change_field('domain', 'domain_id', 'domain_id', $spec);
db_drop_primary_key('domain');
// Add the machine name column.
if (!db_field_exists('domain', 'machine_name')) {
$spec = array(
'type' => 'varchar',
'length' => '255',
'not null' => TRUE,
'default' => '',
'description' => 'The machine name for this domain.',
);
db_add_field('domain', 'machine_name', $spec);
}
// Now we can safely add the new primary key.
db_add_primary_key('domain', array(
'domain_id',
));
return t('{domain} table updated with machine_name column.');
}
/**
* Allow domains to be made exportable.
*/
function domain_update_7305(&$sandbox) {
if (db_table_exists('domain_export')) {
return t('{domain_export} table exists.');
}
$schema = array(
'description' => 'Stores canonical machine names for domains.',
'fields' => array(
'domain_id' => array(
'type' => 'serial',
'description' => 'Domain id. Automatic master key.',
),
'machine_name' => array(
'type' => 'varchar',
'length' => '255',
'not null' => TRUE,
'default' => '',
'description' => 'The machine name for this domain.',
),
),
'primary key' => array(
'machine_name',
),
'indexes' => array(
'domain_id' => array(
'domain_id',
),
),
);
db_create_table('domain_export', $schema);
return t('{domain_export} table created.');
}
/**
* Insert existing domain records into {domain_export} and {domain}.
*/
function domain_update_7306(&$sandbox) {
$domains = db_query("SELECT domain_id, subdomain FROM {domain} ORDER BY domain_id")
->fetchAll();
foreach ($domains as $domain) {
$query = db_insert('domain_export')
->fields(array(
'domain_id' => $domain->domain_id,
'machine_name' => domain_update_machine_name($domain->subdomain),
));
$query
->execute();
$query = db_update('domain')
->condition('domain_id', $domain->domain_id)
->fields(array(
'machine_name' => domain_update_machine_name($domain->subdomain),
));
$query
->execute();
}
return t('{domain_export} table populated.');
}
/**
* Updates the {domain_export} table for new key handling.
*/
function domain_update_7307(&$sandbox) {
db_drop_primary_key('domain_export');
// Just in case a unique key already exists, drop it.
db_drop_unique_key('domain_export', 'machine_name');
db_add_unique_key('domain_export', 'machine_name', array(
'machine_name',
));
return t('{domain_export} table keys updated.');
}
/**
* Generates a machine name during the update process.
*
* @param $subdomain
* The subdomain string of the record, which should be unique.
*
* @return
* A string with dot and colon transformed to underscore.
*/
function domain_update_machine_name($subdomain) {
return preg_replace('/[^a-z0-9_]+/', '_', $subdomain);
}
/**
* Replace domain_behavior with default node access settings.
*/
function domain_update_7308(&$sandbox) {
$behavior = variable_get('domain_behavior', 0);
if (function_exists('node_type_get_types')) {
$types = node_type_get_types();
foreach ($types as $key => $type) {
$node_access_values = array(
'DOMAIN_ACTIVE',
);
$all_sites = variable_get('domain_node_' . $key, 0);
if ($behavior == 1 || $all_sites == 1) {
$node_access_values[] = 'DOMAIN_ALL';
}
variable_set('domain_node_' . $key, $node_access_values);
}
}
variable_del('domain_behavior');
return t('Ported domain behavior to default node access settings.');
}
/**
* Updates domain_roles variable to use machine names.
*/
function domain_update_7309(&$sandbox) {
drupal_load('module', 'domain');
$defaults = variable_get('domain_roles', array());
$new = array();
foreach ($defaults as $rid => $domains) {
// We cannot use a constant here. See https://drupal.org/node/2042461.
$new[$rid]['DOMAIN_ALL'] = $domains['all'];
foreach ($domains as $domain_id => $check) {
$domain = domain_lookup($domain_id);
if ($domain != -1) {
$new[$rid][$domain['machine_name']] = $check;
}
}
}
variable_set('domain_roles', $new);
}
/**
* Updates node grants for unpublished content.
*/
function domain_update_7310(&$sandbox) {
node_access_rebuild(TRUE);
}
/**
* Remove stale domain_node_{bundle} variables.
*/
function domain_update_7311(&$sandbox) {
if (function_exists('node_type_get_types')) {
$variable_names = array();
foreach (node_type_get_types() as $key => $type) {
$variable_names[] = 'domain_node_' . $key;
}
db_delete('variable')
->condition('name', 'domain_node_%', 'LIKE')
->condition('name', $variable_names, 'NOT IN')
->execute();
}
}
/**
* Removes deprecated setting 'domain_form_elements'.
*/
function domain_update_7312(&$sandbox) {
variable_del('domain_form_elements');
}
Functions
Name![]() |
Description |
---|---|
domain_install | Implements hook_install(). |
domain_requirements | Checks module requirements. |
domain_schema | Implements hook_schema(). |
domain_uninstall | Implements hook_uninstall(). |
domain_update_7000 | Update block deltas to Drupal 7. |
domain_update_7001 | Change the edit and delete permissions. |
domain_update_7300 | Add sorting to domains. |
domain_update_7301 | Add default domain flag and weight the default higher. |
domain_update_7302 | Add an index on {domain}.is_default. |
domain_update_7303 | Remove the zero record from the database. |
domain_update_7304 | Rebuild the {domain} table. |
domain_update_7305 | Allow domains to be made exportable. |
domain_update_7306 | Insert existing domain records into {domain_export} and {domain}. |
domain_update_7307 | Updates the {domain_export} table for new key handling. |
domain_update_7308 | Replace domain_behavior with default node access settings. |
domain_update_7309 | Updates domain_roles variable to use machine names. |
domain_update_7310 | Updates node grants for unpublished content. |
domain_update_7311 | Remove stale domain_node_{bundle} variables. |
domain_update_7312 | Removes deprecated setting 'domain_form_elements'. |
domain_update_machine_name | Generates a machine name during the update process. |