domain_conf.module in Domain Access 5
Same filename and directory in other branches
Domain manager configuration options.
For this module to work correctly, you will need to follow the INSTALL.txt instructions for editing your settings.php file.
File
domain_conf/domain_conf.moduleView source
<?php
/**
* @defgroup domain_conf Domain Conf: configuration extension
* Functions for the Domain Conf module.
*/
/**
* @file
* Domain manager configuration options.
*
* For this module to work correctly, you will need to follow the INSTALL.txt
* instructions for editing your settings.php file.
*
* @ingroup domain_conf
*/
/**
* Implement hook_menu()
*/
function domain_conf_menu($may_cache) {
$items = array();
if (!$may_cache) {
$items[] = array(
'title' => t('Domain site settings'),
'path' => 'admin/build/domain/conf',
'access' => user_access('administer domains') && user_access('administer site congifuration'),
'type' => MENU_CALLBACK,
'callback' => 'domain_conf_page',
'callback arguments' => array(
arg(4),
),
);
$items[] = array(
'title' => t('Domain site settings'),
'path' => 'admin/build/domain/conf-reset',
'access' => user_access('administer domains') && user_access('administer site congifuration'),
'type' => MENU_CALLBACK,
'callback' => 'domain_conf_reset',
'callback arguments' => array(
arg(4),
),
);
// Allow sites to add implementations of hook_domainconf() without hacking.
// See http://drupal.org/node/236877.
if (arg(0) == 'admin') {
$extra = drupal_get_path('module', 'domain_conf') . '/domain_conf.inc';
if (file_exists($extra)) {
include_once $extra;
}
}
}
return $items;
}
/**
* The domain conf page callback router.
*
* @param $domain_id
* The unique identifier for this domain, taken from {domain}.
*/
function domain_conf_page($domain_id) {
global $_domain;
$domain = domain_lookup($domain_id);
$output = theme_domain_conf_reset($domain);
if ($domain['domain_id'] > 0) {
// Ensure we are on the proper domain.
domain_goto($domain);
drupal_set_title(t('@site : Domain site settings', array(
'@site' => $domain['sitename'],
)));
return $output . drupal_get_form('system_site_information_settings');
}
else {
if ($domain['domain_id'] == 0) {
return $output . drupal_get_form('domain_conf_default', $domain);
}
else {
return t('Invalid domain request.');
}
}
}
/**
* Special configuration options for the main domain.
*
* @param $domain
* The $domain object for the default domain.
* @return
* A $form array according to the FormsAPI, if unique configuration is possible.
*/
function domain_conf_default($domain) {
drupal_set_title(t('@site : Domain site settings', array(
'@site' => $domain['sitename'],
)));
$form = array();
// Grab any extra elements defined by other modules.
$extra = domain_conf_api();
if (!empty($extra)) {
// Convert the $extra array to the $form array.
$form = $extra;
$form['domain_conf_message'] = array(
'#type' => 'markup',
'#value' => t('<p>The following custom settings may be applied to the main domain. These options are specific to the Domain module and do not have standard configuration pages.</p>'),
'#weight' => -100,
);
// Domain information, for saving.
$form['domain_id'] = array(
'#type' => 'value',
'#value' => $domain['domain_id'],
);
// Submit functions
$form['#submit']['domain_conf_form_submit'] = array();
$form['#validate']['domain_conf_form_validate'] = array();
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save domain settings'),
'#weight' => 10,
);
}
else {
$form['domain_conf_message'] = array(
'#type' => 'markup',
'#value' => t('There are no custom domain settings to configure.'),
);
}
return $form;
}
/**
* Implement hook_domainlinks()
*/
function domain_conf_domainlinks($domain) {
$links[] = array(
'title' => t('settings'),
'path' => 'admin/build/domain/conf/' . $domain['domain_id'],
);
return $links;
}
/**
* Implement hook_form_alter()
*
* Since this function is only loaded at the path admin/build/domain/conf, we
* don't have to worry about hook_form_alter() being called when not wanted.
*/
function domain_conf_form_alter($form_id, &$form) {
// We use the system_site_information_settings form as a base, and add the elements we need
// from other forms. The default values are altered based on stored settings.
if ($form_id == 'system_site_information_settings') {
// Check to be certain that we are on the right form page.
$module = arg(2);
$action = arg(3);
if ($module == 'domain' && $action == 'conf') {
$domain_id = arg(4);
$domain = domain_lookup($domain_id);
$data = db_result(db_query("SELECT settings FROM {domain_conf} WHERE domain_id = %d", $domain['domain_id']));
if (!empty($data)) {
$settings = unserialize($data);
}
else {
$settings = array();
}
$unset = array(
'buttons',
'#submit',
);
foreach ($unset as $key) {
unset($form[$key]);
}
$form['main'] = array(
'#type' => 'fieldset',
'#title' => t('Domain information'),
'#collapsible' => TRUE,
'#weight' => -10,
);
// Put the defaults in the fieldset
$fields = array(
'site_name',
'site_mail',
'site_slogan',
'site_mission',
'site_footer',
'site_frontpage',
'anonymous',
);
foreach ($fields as $field) {
$form['main'][$field] = $form[$field];
unset($form[$field]);
}
// Change the path for the frontpage.
$prefix = $form['main']['site_frontpage']['#field_prefix'];
$_path = parse_url($prefix);
$str = $_path['host'];
$fix = preg_replace("/{$str}/", $domain['subdomain'], $prefix, 1);
$form['main']['site_frontpage']['#field_prefix'] = $fix;
// Admin theme settings
$themes = list_themes();
ksort($themes);
$options[] = t('Use domain default theme');
foreach ($themes as $key => $value) {
$options[$key] = $key;
}
$form['main']['admin_theme'] = array(
'#type' => 'select',
'#title' => t('Administrative theme'),
'#options' => $options,
'#default_value' => variable_get('admin_theme', '0'),
);
// Date settings: set the default timezone
$form['date'] = array(
'#type' => 'fieldset',
'#title' => t('Timezone settings'),
'#collapsible' => TRUE,
'#weight' => -5,
);
$zones = _system_zonelist();
$form['date']['date_default_timezone'] = array(
'#type' => 'select',
'#title' => t('Default time zone'),
'#default_value' => isset($settings['date_default_timezone']) ? $settings['date_default_timezone'] : variable_get('date_default_timezone', 0),
'#options' => $zones,
'#description' => t('Select the default site time zone.'),
);
// Offline notices.
$form['offline'] = array(
'#type' => 'fieldset',
'#title' => t('Maintenance settings'),
'#collapsible' => TRUE,
'#weight' => 5,
);
$form['offline']['site_offline'] = array(
'#type' => 'radios',
'#title' => t('Site status'),
'#default_value' => isset($settings['site_offline']) ? $settings['site_offline'] : variable_get('site_offline', 0),
'#options' => array(
t('Online'),
t('Off-line'),
),
'#description' => t('When set to "Online", all visitors will be able to browse your site normally. When set to "Off-line", only users with the "administer site configuration" permission will be able to access your site to perform maintenance; all other visitors will see the site off-line message configured below. Authorized users can log in during "Off-line" mode directly via the <a href="@user-login">user login</a> page.', array(
'@user-login' => url('user'),
)),
);
$form['offline']['site_offline_message'] = array(
'#type' => 'textarea',
'#title' => t('Site off-line message'),
'#default_value' => isset($settings['site_offline_message']) ? $settings['site_offline_message'] : variable_get('site_offline_message', t('@site is currently under maintenance. We should be back shortly. Thank you for your patience.', array(
'@site' => $domain['sitename'],
))),
'#description' => t('Message to show visitors when the site is in off-line mode.'),
);
// Site name must be edited at the domain creation screen.
$form['main']['site_name']['#disabled'] = TRUE;
$form['main']['site_name']['#description'] = t('The name of this web site, as entered in the <a href="!url">domain-specific settings</a>.', array(
'!url' => url('admin/build/domain/edit/' . $domain['domain_id']),
));
// Reset the provided form defaults, if needed
$form['main']['site_name']['#default_value'] = $domain['sitename'];
$form['main']['site_mail']['#default_value'] = isset($settings['site_mail']) ? $settings['site_mail'] : variable_get('site_mail', ini_get('sendmail_from'));
$form['main']['site_slogan']['#default_value'] = isset($settings['site_slogan']) ? $settings['site_slogan'] : variable_get('site_slogan', '');
$form['main']['site_mission']['#default_value'] = isset($settings['site_mission']) ? $settings['site_mission'] : variable_get('site_mission', '');
$form['main']['site_footer']['#default_value'] = isset($settings['site_footer']) ? $settings['site_footer'] : variable_get('site_footer', '');
$form['main']['site_frontpage']['#default_value'] = isset($settings['site_frontpage']) ? $settings['site_frontpage'] : variable_get('site_frontpage', 'node');
$form['main']['anonymous']['#default_value'] = isset($settings['anonymous']) ? $settings['anonymous'] : variable_get('anonymous', t('Guest'));
// Domain information, for saving.
$form['domain_id'] = array(
'#type' => 'value',
'#value' => $domain['domain_id'],
);
// Grab any extra elements defined by other modules.
$extra = domain_conf_api(TRUE);
// Merge the $extra and $form arrays.
$form = array_merge($form, $extra);
// Submit functions
$form['#submit']['domain_conf_form_submit'] = array();
$form['#validate']['domain_conf_form_validate'] = array();
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save domain settings'),
'#weight' => 10,
);
}
}
}
/**
* FormsAPI
*/
function domain_conf_form_submit($form_id, $form_values) {
// Throw away what we don't need.
$settings = $form_values;
$unset = array(
'form_token',
'form_id',
'op',
'submit',
);
foreach ($unset as $key) {
unset($settings[$key]);
}
// INSERT or UPDATE?
$check = db_fetch_array(db_query("SELECT domain_id FROM {domain_conf} WHERE domain_id = %d", $form_values['domain_id']));
if (isset($check['domain_id'])) {
$sql = "UPDATE {domain_conf} SET settings = %b WHERE domain_id = %d";
db_query($sql, serialize($settings), $form_values['domain_id']);
}
else {
$sql = "INSERT INTO {domain_conf} VALUES (%d, %b)";
db_query($sql, $form_values['domain_id'], serialize($settings));
}
// Clear the cache.
cache_clear_all();
drupal_set_message(t('Domain options saved successfully.'));
}
/**
* Implement hook_domainwarnings()
*/
function domain_conf_domainwarnings() {
// These are the forms for variables set by Domain Conf.
return array(
'system_admin_theme_settings',
'system_date_time_settings',
'system_site_information_settings',
'system_site_maintenance_settings',
);
}
/**
* Implement hook_domaininstall()
*/
function domain_conf_domaininstall() {
// If Domain Conf is being used, check to see that it is installed correctly.
if (module_exists('domain_conf') && !function_exists('_domain_conf_load')) {
drupal_set_message(t('The Domain Configuration module is not installed correctly. Please edit your settings.php file as described in <a href="!url">INSTALL.txt</a>', array(
'!url' => base_path() . drupal_get_path('module', 'domain_conf') . '/INSTALL.txt',
)));
}
}
/**
* Resets configuration settings by removing the domain row from {domain_conf}.
*
* @param $domain_id
* The domain_id of the requested domain.
* @return
* A confirmation form.
*/
function domain_conf_reset($domain_id) {
$domain = domain_lookup($domain_id);
if ($domain == -1) {
return t('An invalid request has been made.');
}
return drupal_get_form('domain_conf_reset_form', $domain);
}
/**
* FormsAPI for resetting a domain configuration.
*
* @param $domain
* The $domain object for the selected domain.
* @return
* Themed HTML form.
*/
function domain_conf_reset_form($domain) {
$extra['domain_id'] = array(
'#type' => 'value',
'#value' => $domain['domain_id'],
);
$extra['#redirect'] = 'admin/build/domain/conf/' . $domain['domain_id'];
$form = confirm_form($extra, t('Are you sure you wish to reset the settings for %name?', array(
'%name' => $domain['sitename'],
)), 'admin/build/domain/conf/' . $domain_id, t('Submitting this form will restore default settings for this domain.'));
return $form;
}
/**
* FormsAPI for domain_conf_reset_form.
*/
function domain_conf_reset_form_submit($form_id, $form_values) {
db_query("DELETE FROM {domain_conf} WHERE domain_id = %d", $form_values['domain_id']);
drupal_set_message(t('Domain configuration settings have been reset.'));
}
/**
* Theme a message at the top of domain configuration pages.
*
* @param $domain
* The $domain object for the selected domain.
* @return
* Themed HTML messages.
*/
function theme_domain_conf_reset($domain) {
$output = '';
$output .= '<p>' . t('These settings will replace or supplement your default site settings when %name is the active domain.', array(
'%name' => $domain['sitename'],
)) . '</p>';
$data = db_fetch_array(db_query("SELECT settings FROM {domain_conf} WHERE domain_id = %d", $domain['domain_id']));
if (!empty($data)) {
$output .= '<p>' . t('You may <a href="!url">erase these settings</a> to restore the default behavior.', array(
'!url' => url('admin/build/domain/conf-reset/' . $domain['domain_id']),
)) . '</p>';
}
return $output;
}
/**
* Implement hook_domainbatch()
*/
function domain_conf_domainbatch() {
$batch = array();
// Allows the deletion of all Domain Configuration rows.
$batch['domain_conf'] = array(
'#form' => array(
'#title' => t('Reset configurations'),
'#type' => 'checkbox',
'#options' => array(
t('Reset'),
),
'#description' => t('Delete custom settings for this domain.'),
),
'#domain_action' => 'domain_delete',
'#system_default' => 0,
'#variable' => 'domain_conf',
'#meta_description' => t('Delete custom settings for domains as supplied by Domain Configuration.'),
'#table' => 'domain_conf',
'#weight' => -2,
);
// Change the email address.
$batch['site_mail'] = array(
'#form' => array(
'#title' => t('Email address'),
'#type' => 'textfield',
'#size' => 40,
'#maxlength' => 255,
'#description' => t('Set the email address for this domain.'),
),
'#domain_action' => 'domain_conf',
'#system_default' => variable_get('site_mail', ''),
'#variable' => 'site_mail',
'#meta_description' => t('Set the email address for all domains.'),
'#data_type' => 'string',
'#weight' => -8,
);
// Change the site slogan.
$batch['site_slogan'] = array(
'#form' => array(
'#title' => t('Site slogan'),
'#type' => 'textfield',
'#size' => 60,
'#maxlength' => 255,
'#description' => t('The slogan of this domain. Some themes display a slogan when available.'),
),
'#domain_action' => 'domain_conf',
'#system_default' => variable_get('site_slogan', ''),
'#variable' => 'site_slogan',
'#meta_description' => t('Set the site slogan for all domains.'),
'#data_type' => 'string',
'#weight' => -8,
);
// Change the site slogan.
$batch['site_mission'] = array(
'#form' => array(
'#title' => t('Site mission'),
'#type' => 'textarea',
'#cols' => 30,
'#rows' => 5,
'#description' => t('The mission statement or focus for this domain.'),
),
'#domain_action' => 'domain_conf',
'#system_default' => variable_get('site_mission', ''),
'#variable' => 'site_mission',
'#meta_description' => t('Set the site mission for all domains.'),
'#data_type' => 'string',
'#weight' => -8,
);
// Change the site footer.
$batch['site_footer'] = array(
'#form' => array(
'#title' => t('Site footer'),
'#type' => 'textarea',
'#cols' => 30,
'#rows' => 5,
'#description' => t('This text will be displayed at the bottom of each page for this domain.'),
),
'#domain_action' => 'domain_conf',
'#system_default' => variable_get('site_footer', ''),
'#variable' => 'site_footer',
'#meta_description' => t('Set the site footer for all domains.'),
'#data_type' => 'string',
'#weight' => -8,
);
// Change the site frontpage.
$batch['site_frontpage'] = array(
'#form' => array(
'#title' => t('Site frontpage'),
'#type' => 'textfield',
'#size' => 30,
'#maxlength' => 255,
'#description' => t('The home page displays content from this relative URL. If unsure, specify "node".'),
),
'#domain_action' => 'domain_conf',
'#system_default' => variable_get('site_frontpage', 'node'),
'#variable' => 'site_frontpage',
'#meta_description' => t('Set the site frontpage for all domains.'),
'#data_type' => 'string',
'#weight' => -8,
);
// Change the anonymous user name.
$batch['anonymous'] = array(
'#form' => array(
'#title' => t('Anonymous user'),
'#type' => 'textfield',
'#size' => 30,
'#maxlength' => 255,
'#description' => t('The name used to indicate anonymous users for this domain.'),
),
'#domain_action' => 'domain_conf',
'#system_default' => variable_get('anonymous', 'Anonymous'),
'#variable' => 'anonymous',
'#meta_description' => t('Set the anonymous user label for all domains.'),
'#data_type' => 'string',
'#weight' => -8,
);
// Change the administrative theme.
$themes = list_themes();
ksort($themes);
$options[] = t('Use domain default theme');
foreach ($themes as $key => $value) {
$options[$key] = $key;
}
$batch['admin_theme'] = array(
'#form' => array(
'#title' => t('Administrative theme'),
'#type' => 'select',
'#options' => $options,
'#description' => t('Select the administrative theme for this domain.'),
),
'#domain_action' => 'domain_conf',
'#system_default' => variable_get('admin_theme', 0),
'#variable' => 'admin_theme',
'#meta_description' => t('Set the administrative theme for all domains.'),
'#data_type' => 'string',
'#weight' => -8,
);
// Change the timezone.
$zones = _system_zonelist();
$batch['date_default_timezone'] = array(
'#form' => array(
'#title' => t('Timezone default'),
'#type' => 'select',
'#options' => $zones,
'#description' => t('Select the default site time zone.'),
),
'#domain_action' => 'domain_conf',
'#system_default' => variable_get('date_default_timezone', 0),
'#variable' => 'date_default_timezone',
'#meta_description' => t('Set the default timezone for all domains.'),
'#data_type' => 'string',
'#weight' => -8,
);
// Toggle the site offline status.
$batch['site_offline'] = array(
'#form' => array(
'#title' => t('Site status'),
'#type' => 'radios',
'#options' => array(
t('Online'),
t('Off-line'),
),
'#description' => t('Toggle online/offline status.'),
),
'#domain_action' => 'domain_conf',
'#system_default' => variable_get('site_offline', 0),
'#variable' => 'site_offline',
'#meta_description' => t('Set the online / offline status for all domains.'),
'#data_type' => 'integer',
'#weight' => -8,
);
// Change the site offline message.
$batch['site_offline_message'] = array(
'#form' => array(
'#title' => t('Site offline message'),
'#type' => 'textarea',
'#cols' => 30,
'#rows' => 5,
'#description' => t('Message to show visitors when this domain is in off-line mode.'),
),
'#domain_action' => 'domain_conf',
'#system_default' => variable_get('site_offline_message', ''),
'#variable' => 'site_offline_message',
'#meta_description' => t('Set the site offline message for all domains.'),
'#data_type' => 'string',
'#weight' => -8,
);
foreach ($batch as $item => $values) {
$batch[$item]['#permission'] = 'administer site configuration';
}
return $batch;
}
/**
* Retrieves elements from hook_domainconf() and formats them
* as needed.
*
* @param $all
* Should the function return all hook implementations or just those marked
* with the domain_settings flag. Defaults to FALSE. Used to determine if
* we are loading configuration options specific to the Domain Access module.
*
* @return
* An array of form elements according to the FormsAPI or an empty array.
*/
function domain_conf_api($all = FALSE) {
$options = array();
$extra = module_invoke_all('domainconf');
if (!empty($extra)) {
foreach ($extra as $key => $value) {
if ($value['#domain_setting'] == TRUE || $all == TRUE) {
// Discard the #domain_setting flag; it is not needed.
unset($value['#domain_setting']);
// Set the $options array.
$options[$key] = $value;
}
}
}
return $options;
}
/**
* Implement hook_domainupdate().
*/
function domain_conf_domainupdate($op, $domain, $edit = array()) {
if ($op == 'delete') {
db_query("DELETE FROM {domain_conf} WHERE domain_id = %d", $domain['domain_id']);
cache_clear_all('variables', 'cache');
}
}
Functions
Name | Description |
---|---|
domain_conf_api | Retrieves elements from hook_domainconf() and formats them as needed. |
domain_conf_default | Special configuration options for the main domain. |
domain_conf_domainbatch | Implement hook_domainbatch() |
domain_conf_domaininstall | Implement hook_domaininstall() |
domain_conf_domainlinks | Implement hook_domainlinks() |
domain_conf_domainupdate | Implement hook_domainupdate(). |
domain_conf_domainwarnings | Implement hook_domainwarnings() |
domain_conf_form_alter | Implement hook_form_alter() |
domain_conf_form_submit | FormsAPI |
domain_conf_menu | Implement hook_menu() |
domain_conf_page | The domain conf page callback router. |
domain_conf_reset | Resets configuration settings by removing the domain row from {domain_conf}. |
domain_conf_reset_form | FormsAPI for resetting a domain configuration. |
domain_conf_reset_form_submit | FormsAPI for domain_conf_reset_form. |
theme_domain_conf_reset | Theme a message at the top of domain configuration pages. |