View source
<?php
$conf['instance_settings']['version'] = 2;
_instance_settings_init_params();
foreach (_instance_settings_get_includes($conf['instance_settings']['pattern_types'], $conf['instance_settings']['token_values'], $conf['instance_settings']['file_extensions']) as $filename) {
if (file_exists($filename)) {
$tempconf = $conf;
require $filename;
$conf['instance_settings']['included_files'][] = $filename;
foreach ($conf as $key => $value) {
if (is_array($value) && isset($tempconf[$key])) {
$conf[$key] = _instance_settings_include_array_merge_deep_no_duplicate_values(array(
$tempconf[$key],
$conf[$key],
));
}
}
$conf = array_merge($tempconf, $conf);
}
}
if (isset($conf['instance_settings']['compatibility_mode']) && $conf['instance_settings']['compatibility_mode'] == 1) {
foreach ($conf['instance_settings'] as $key => $setting) {
$conf['instance_settings_' . $key] = $setting;
}
}
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']);
$default_values['settings_dirs'] = array(
DRUPAL_ROOT . '/' . INSTANCE_SETTINGS_CONTRIB_PATH . '/instance_settings/settings',
DRUPAL_ROOT . '/sites/all/settings',
DRUPAL_ROOT . '/sites/default/settings',
);
$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',
);
$default_values['pattern_types'] = array(
'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;
}
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'];
}
}
$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 (!$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,
),
);
}
}
}
}
_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'],
));
}
function _instance_settings_get_project_settings_dirs($projects) {
$project_dirs = array();
$drupal_root = rtrim(DRUPAL_ROOT, '/');
$root = substr($drupal_root, 0, strrpos($drupal_root, '/'));
foreach ($projects as $project_name => $project) {
if (isset($project['params']['path'])) {
$project_dirs[$project_name] = $root . '/' . $project['params']['path'] . '/settings';
}
}
return $project_dirs;
}
function _instance_settings_get_includes($pattern_types, $token_values, $instance_settings_file_extensions) {
$settings_sources = _instance_settings_get_settings_sources($pattern_types);
static $includes = array();
if ($includes) {
return $includes;
}
foreach ($settings_sources as &$dir) {
if (isset($dir['pattern_types'])) {
$dir['patterns'] = array();
foreach ($dir['pattern_types'] as $pattern_type) {
$dir['patterns'] += $pattern_types[$pattern_type];
}
foreach ($dir['patterns'] as $pattern) {
if ($pattern) {
foreach ($instance_settings_file_extensions as $instance_settings_extension) {
$file = $dir['dir'] . '/' . format_string($pattern, $token_values) . $instance_settings_extension;
if (!in_array($file, $includes) && is_file($file)) {
$includes[] = $file;
}
}
}
}
}
}
return $includes;
}
function _instance_settings_settings_dirs($dirs = array()) {
static $settings_dirs = array();
if ($dirs) {
$settings_dirs = array_merge($settings_dirs, $dirs);
}
return $settings_dirs;
}
function _instance_settings_get_settings_sources($pattern_types) {
static $settings_sources = array();
if ($settings_sources) {
return $settings_sources;
}
$settings_dirs = _instance_settings_settings_dirs();
foreach (array_keys($pattern_types) as $pattern_type) {
foreach ($settings_dirs as $settings_dir) {
$settings_sources[] = array(
'dir' => $settings_dir,
'pattern_types' => array(
$pattern_type,
),
);
}
}
return $settings_sources;
}
function _instance_settings_include_array_merge_deep_no_duplicate_values($arrays) {
$result = array();
foreach ($arrays as $array) {
foreach ($array as $key => $value) {
if (is_integer($key)) {
if (is_array($value)) {
$result[] = $value;
}
elseif (!in_array($value, $result)) {
$result[] = $value;
}
}
elseif (isset($result[$key]) && is_array($result[$key]) && is_array($value)) {
$result[$key] = _instance_settings_include_array_merge_deep_no_duplicate_values(array(
$result[$key],
$value,
));
}
else {
$result[$key] = $value;
}
}
}
return $result;
}
function _instance_settings_get_environment($site_dir, $method = 'env_file') {
if ($method == 'env_file') {
$file = $site_dir . '/' . "env.settings.php";
if (is_file($file)) {
include $file;
return $ENVIRONMENT;
}
}
elseif ($method = 'acquia') {
if (isset($_ENV['AH_SITE_ENVIRONMENT'])) {
return $_ENV['AH_SITE_ENVIRONMENT'];
}
else {
return 'local';
}
}
}