/** * Main loader, loads defaults, main config and virtualhost config if it exists * * @param string $virtualhost the name of a particular virtualhost to load * * @throws ConfigFileMissingException * @throws ConfigBadParameterException */ private static function load($virtualhost = null) { if (!is_null(self::$parameters) && !$virtualhost) { return; } // Do not load twice, except if switching virtualhost // Load default configuration self::$parameters = array(); // Load defaults if needed if (is_null(self::$defaults)) { self::$defaults = array(); $defaults_file = APPLICATION_BASE . '/includes/core/ConfigDefaults.php'; $default = array(); if (file_exists($defaults_file)) { include_once $defaults_file; } //include: if file doesn't exists, execution will not stop, only gives a warning. if() not needed self::$defaults = $default; foreach ($default as $key => $value) { self::$parameters[$key] = $value; } } // Check if main config exists $main_config_file = APPLICATION_BASE . '/config/config.php'; if (!file_exists($main_config_file)) { throw new ConfigFileMissingException($main_config_file); } $config = array(); // Load base config include_once $main_config_file; if ($virtualhost != null) { $config['virtualhost'] = $virtualhost; } foreach ($config as $key => $value) { self::$parameters[$key] = $value; } // Merge // Load virtualhost config if used if ($virtualhost === null) { $virtualhost = self::get('virtualhost'); } if ($virtualhost) { if (!is_string($virtualhost)) { throw new ConfigBadParameterException('virtualhost'); } $config_file = APPLICATION_BASE . '/config/' . $virtualhost . '/config.php'; if (!file_exists($config_file)) { throw new ConfigFileMissingException($config_file); } // Should exist even if empty $config = array(); include_once $config_file; foreach ($config as $key => $value) { self::$parameters[$key] = $value; } // Merge } // Load config overrides if any $overrides_cfg = self::get('config_overrides'); if ($overrides_cfg) { $overrides_file = APPLICATION_BASE . '/config/' . ($virtualhost ? $virtualhost . '/' : '') . 'config_overrides.json'; $overrides = file_exists($overrides_file) ? json_decode(trim(file_get_contents($overrides_file))) : new StdClass(); self::$override = array('file' => $overrides_file, 'parameters' => array()); foreach ($overrides_cfg as $key => $dfn) { // Casting if (is_string($dfn)) { $dfn = array('type' => $dfn); } else { if (is_array($dfn) && !array_key_exists('type', $dfn)) { $dfn = array('type' => 'enum', 'values' => $dfn); } else { if (!is_array($dfn)) { throw new ConfigBadParameterException('config_overrides'); } } } $dfn['value'] = property_exists($overrides, $key) ? $overrides->{$key} : null; self::$override['parameters'][$key] = $dfn; } } }