You are here

function _instance_settings_init_params in Instance settings 7.2

Initialize Instance settings.

1 call to _instance_settings_init_params()
include.settings.inc in includes/include.settings.inc

File

includes/include.settings.inc, line 42

Code

function _instance_settings_init_params() {
  global $conf, $databases;
  if (!isset($conf['instance_settings']['env_get_method'])) {
    $conf['instance_settings']['env_get_method'] = 'env_file';
  }
  $default_values = array();
  $default_values['included_files'] = array();
  $default_values['file_extensions'] = array(
    '.settings.inc',
  );
  $default_values['site_dir_full'] = DRUPAL_ROOT . '/' . conf_path();
  $default_values['site_dir'] = current(array_slice(explode('/', conf_path()), -1));
  $default_values['environment'] = _instance_settings_get_environment($default_values['site_dir_full'], $conf['instance_settings']['env_get_method']);

  // TODO: Allow override here.
  $default_values['settings_dirs'] = array(
    DRUPAL_ROOT . '/' . INSTANCE_SETTINGS_CONTRIB_PATH . '/instance_settings/settings',
    DRUPAL_ROOT . '/sites/all/settings',
    DRUPAL_ROOT . '/sites/default/settings',
  );

  // Name of the site's dir should be in format:
  // {PROJECT}{SEPARATOR}{SUBPROJECT}{SEPARATOR}{INSTANCE} to pick up these settings
  // automatically, where {SEPARATOR} could be "." or "_".
  // {SUBPROJECT} is optional.
  $default_values['project_name_full'] = $default_values['site_dir'];
  $project_name = isset($conf['instance_settings']['project_name_full']) ? $conf['instance_settings']['project_name_full'] : $default_values['site_dir'];
  $dir_name_parts = preg_split("/[-_,\\. ]/", $project_name);
  $default_values['project_names'] = array();
  foreach ($dir_name_parts as $name_part) {
    foreach ($default_values['project_names'] as $pname) {
      $default_values['project_names'][] = $pname . '.' . $name_part;
    }
    $default_values['project_names'][] = $name_part;
  }
  $default_values['instance'] = array_pop($dir_name_parts);
  $default_values['project'] = $dir_name_parts ? implode('.', $dir_name_parts) : $default_values['instance'];
  $default_values['projects'] = array();
  $default_values['projects_path_variants'] = array(
    'code',
    'projects',
  );

  // TODO: Remove patterns if no tokens present.
  $default_values['pattern_types'] = array(
    // Default patterns to find settings files based on params defined.
    'default' => array(
      'all',
      '!environment_group',
      '!environment',
      '!instance',
      '!instance/!environment_group',
      '!instance/!environment',
      '!instance.!environment_group',
      '!instance.!environment',
      '!environment_group.!instance',
      '!environment.!instance',
      '!environment_group/!instance',
      '!environment/!instance',
      'subsite.!subsite',
    ),
    'final' => array(
      'final.all',
      'final.!environment',
      'final.subsite.!subsite',
    ),
  );
  if (isset($conf['instance_settings'])) {
    $conf['instance_settings'] = _instance_settings_include_array_merge_deep_no_duplicate_values(array(
      $default_values,
      $conf['instance_settings'],
    ));
  }
  else {
    $conf['instance_settings'] = $default_values;
  }

  // Set drubone specific config.
  if (function_exists('_drubone_infrastructure_config')) {
    $conf['infrastructure'] = _drubone_infrastructure_config($conf['instance_settings']['environment'], $conf['instance_settings']['project'], $conf['instance_settings']['instance']);
    $conf['instance_settings']['projects'] = _instance_settings_include_array_merge_deep_no_duplicate_values(array(
      $conf['infrastructure']['projects'],
      $conf['instance_settings']['projects'],
    ));
    if (isset($conf['infrastructure']['project']['databases'])) {
      $databases = $conf['infrastructure']['project']['databases'];
    }
    if (isset($conf['infrastructure']['params']['conf']) && is_array($conf['infrastructure']['params']['conf'])) {
      foreach ($conf['infrastructure']['params']['conf'] as $param_name => $param_value) {
        if (isset($conf[$param_name]) && is_array($conf[$param_name]) && is_array($param_value)) {
          $conf[$param_name] = _drubone_array_deep_merge(array(
            $conf[$param_name],
            $param_value,
          ));
        }
        else {
          $conf[$param_name] = $param_value;
        }
      }
    }
    if (isset($conf['infrastructure']['site']['group_name']) && !isset($conf['instance_settings']['subsite'])) {
      $conf['instance_settings']['subsite'] = $conf['infrastructure']['site']['group_name'];
    }
  }

  // TODO: unset pattern_types that not have token values.
  // Params for patterns.
  $conf['instance_settings']['token_values'] = array(
    '!environment' => $conf['instance_settings']['environment'],
    '!environment_group' => isset($conf['instance_settings_environment_group']) ? $conf['instance_settings_environment_group'] : $conf['instance_settings']['environment'],
    '!instance' => $conf['instance_settings']['instance'],
    '!project' => $conf['instance_settings']['project'],
    '!subsite' => isset($conf['instance_settings']['subsite']) ? $conf['instance_settings']['subsite'] : '',
  );

  // If no projects are defined, try to find project by project name.
  // TODO: support projects hierarchy in project name.
  if (!$conf['instance_settings']['projects']) {
    $drupal_root = rtrim(DRUPAL_ROOT, '/');
    $root = substr($drupal_root, 0, strrpos($drupal_root, '/'));
    foreach ($conf['instance_settings']['projects_path_variants'] as $projects_path_variant) {
      foreach ($conf['instance_settings']['project_names'] as $project_name) {
        if (is_dir($root . '/' . $projects_path_variant . '/' . $project_name)) {
          $conf['instance_settings']['projects'][$project_name] = array(
            'params' => array(
              'path' => $projects_path_variant . '/' . $project_name,
            ),
          );
        }
      }
    }
  }

  // Set settings dirs.
  _instance_settings_settings_dirs($conf['instance_settings']['settings_dirs']);
  _instance_settings_settings_dirs(array_values(_instance_settings_get_project_settings_dirs($conf['instance_settings']['projects'])));
  _instance_settings_settings_dirs(array(
    $conf['instance_settings']['site_dir_full'],
  ));
}