public function prepareSettings()
{
$settings = [];
// Запускаем цикл обработки, шагая по конфигурационным файлам
// сливая их с пользовательскими настройками модулей
foreach (new GlobIterator($this->modulePath . '/*.php') as $item) {
// Если нет такого модуля, нет необходимости в обработке:
if (is_dir($this->appModules . '/' . $item->getBaseName('.php')) == false) {
continue;
}
$moduleConfig = (require $item->getRealPath());
// Файл пользовательских настроек:
$userspace = new SplFileInfo($this->userspacePath . '/' . $item->getFileName());
// При наличии файла, сливаем с основным:
if ($userspace->isFile()) {
$moduleConfig = CMap::mergeArray($moduleConfig, require $userspace->getRealPath());
}
// Просматриваем основные настройки для
// слияния:
foreach ($this->configCategories as $category) {
switch ($category) {
case 'modules':
if (!empty($moduleConfig['module'])) {
$settings['modules'] = CMap::mergeArray(isset($settings['modules']) ? $settings['modules'] : [], [$item->getBaseName('.php') => $moduleConfig['module']]);
}
break;
case 'commandMap':
// commandMap заполняем только для консоли
if ($this->env !== self::ENV_CONSOLE) {
continue;
}
default:
// Стандартное слитие:
if (!empty($moduleConfig[$category])) {
$settings[$category] = CMap::mergeArray(isset($settings[$category]) ? $settings[$category] : [], $moduleConfig[$category]);
}
break;
}
}
}
return CMap::mergeArray($this->mergeSettings($settings), is_file($this->basePath . '/config/main-local.php') ? require $this->basePath . '/config/main-local.php' : []);
}