You are here

instance_settings.module in Instance settings 7.2

Same filename and directory in other branches
  1. 7 instance_settings.module

Instance settings.

File

instance_settings.module
View source
<?php

/**
 * @file
 * Instance settings.
 */
define('INSTANCE_SETTINGS_ADMIN_PAGE_PATH', 'admin/config/system/instance-settings');

/**
 * Implements hook_perm().
 */
function instance_settings_permission() {
  return array(
    'administer instance settings' => array(
      'title' => t('Administer instance settings module'),
      'description' => t('Perform administration tasks for instance settings module.'),
    ),
  );
}

/**
 * Implements hook_menu().
 */
function instance_settings_menu() {
  $items[INSTANCE_SETTINGS_ADMIN_PAGE_PATH] = array(
    'title' => 'Instance settings',
    'description' => 'Manage the settings of Instance settings module.',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'instance_settings_admin_settings',
    ),
    'weight' => 10,
    'access arguments' => array(
      'administer instance settings',
    ),
    'file' => 'includes/instance_settings.admin.inc',
  );
  return $items;
}

/**
 * Implements hook_init().
 */
function instance_settings_init() {
  if (variable_get('instance_settings_apply_on_page_load', 0)) {
    drupal_set_message(t('Apply instance settings on each page load mode is enabled. You need to disable it for production instances !link', array(
      '!link' => l(t('here'), INSTANCE_SETTINGS_ADMIN_PAGE_PATH),
    )));
    instance_settings_apply();
  }
}
function instance_settings_variable_get($name, $default = NULL) {
  $instance_settings_params = variable_get('instance_settings');
  return isset($instance_settings_params[$name]) ? $instance_settings_params[$name] : $default;
}

/**
 * Implements hook_requirements().
 */
function instance_settings_requirements($phase) {
  $requirements = array();

  // Ensure translations don't break during installation.
  $t = get_t();
  if ($phase == 'runtime') {
    $requirements['instance_settings'] = array(
      'title' => $t('Instance settings included files'),
      'value' => implode(' -> ', instance_settings_variable_get('included_files', array())),
      'severity' => REQUIREMENT_INFO,
    );
  }
  return $requirements;
}

/**
 * Implements hook_modules_enabled().
 */
function instance_settings_modules_enabled($modules) {

  // Only one module can be active in each pool.
  $disable_modules = array();
  if ($module_pools = variable_get('instance_settings_module_pools', array())) {

    // If module pools are defined we going to build a list of modules to
    // disable for all modules that going to be enabled and in the same pool.
    foreach ($modules as $enable_module) {
      foreach ($module_pools as $pool) {
        if (in_array($enable_module, $pool)) {
          foreach ($pool as $pool_module) {
            if ($pool_module != $enable_module) {
              $disable_modules[] = $pool_module;
            }
          }
        }
      }
    }
  }
  instance_settings_module_disable($disable_modules);
}

/**
 * Applies instance settings.
 */
function instance_settings_apply() {
  $result = module_invoke_all('instance_settings_apply');
  return $result;
}

/**
 * Implements hook_instance_settings_apply().
 */
function instance_settings_instance_settings_apply() {
  $verbose_mode = variable_get('instance_settings_verbose_mode', 0);
  $rebuild = FALSE;

  // Check if we have modules to disable.
  if ($disable_modules = variable_get('instance_settings_disable_modules')) {
    $rebuild = instance_settings_module_disable($disable_modules) || $rebuild;
  }

  // Check if we have modules to enable.
  if ($enable_modules = variable_get('instance_settings_enable_modules')) {
    if (!empty($enable_modules)) {
      $rebuild = instance_settings_module_enable(array_combine($enable_modules, $enable_modules)) || $rebuild;
    }
  }
  if ($variables = variable_get('instance_settings_variables')) {
    foreach ($variables as $name => $value) {
      variable_set($name, $value);
      if ($verbose_mode) {
        drupal_set_message(t('Variable "@name" set to "@value".', array(
          '@name' => $name,
          '@value' => $value,
        )));
      }
    }
    drupal_set_message(t('Variables updated.'));
  }
  if ($rebuild) {
    cache_clear_all();
    menu_rebuild();
  }
  return TRUE;
}

/**
 * Enables array of modules.
 *
 * @param array $enable_modules
 *   Array of module names to enable.
 *
 * @return bool
 *   Returns True if cache and menu should be rebuilded.
 */
function instance_settings_module_enable($enable_modules) {
  $verbose_mode = variable_get('instance_settings_verbose_mode', 0);
  $rebuild = FALSE;

  // Check if modules already enabled.
  foreach ($enable_modules as $id => $module) {
    if (module_exists($module)) {
      unset($enable_modules[$id]);
      if ($verbose_mode) {
        drupal_set_message(t('Module @module already enabled.', array(
          '@module' => $module,
        )));
      }
    }
  }
  if (!empty($enable_modules)) {
    foreach ($enable_modules as $module) {
      if (module_enable(array(
        $module,
      ))) {
        drupal_set_message(t('Module @module enabled.', array(
          '@module' => $module,
        )));
      }
      else {
        drupal_set_message(t('Module @module was not enabled.', array(
          '@module' => $module,
        )));
      }
      $rebuild = TRUE;
    }
  }
  return $rebuild;
}

/**
 * Disables array of modules.
 *
 * @param array $disable_modules
 *   Array of module names to disable.
 *
 * @return bool
 *   Returns True if cache and menu should be rebuilded.
 */
function instance_settings_module_disable($disable_modules) {

  // TODO: show modules disabled by dependency.
  $verbose_mode = variable_get('instance_settings_verbose_mode', 0);
  $rebuild = FALSE;
  foreach ($disable_modules as $key => $disable_module) {
    if (!module_exists($disable_module)) {
      if ($verbose_mode) {
        drupal_set_message(t('Module @module is not exists or already disabled.', array(
          '@module' => $disable_module,
        )));
      }
      unset($disable_modules[$key]);
    }
  }
  if (!empty($disable_modules)) {
    module_disable($disable_modules);
    drupal_set_message(t('Module(s) @modules disabled.', array(
      '@modules' => implode(', ', $disable_modules),
    )));
    $rebuild = TRUE;
  }
  return $rebuild;
}