Index: trunk/core/kernel/utility/unit_config_reader.php =================================================================== diff -u -N -r4358 -r4380 --- trunk/core/kernel/utility/unit_config_reader.php (.../unit_config_reader.php) (revision 4358) +++ trunk/core/kernel/utility/unit_config_reader.php (.../unit_config_reader.php) (revision 4380) @@ -106,33 +106,36 @@ } } } - - function ParseConfigClones($prefix) + + function postProcessConfig($prefix, $config_key, $dst_prefix_var) { - $config = $this->configData[$prefix]; - if(!getArrayValue($config, 'Clones')) - { - return; + $main_config =& $this->configData[$prefix]; + $sub_configs = getArrayValue($main_config, $config_key); + if (!$sub_configs) { + return false; } - unset($this->configData[$prefix]['Clones']); - foreach($config['Clones'] as $clone_prefix => $clone_config) - { - $clone_config['Prefix'] = $clone_prefix; - $this->configData[$clone_prefix] = array_merge_recursive2($this->configData[$prefix], $clone_config); - - foreach($clone_config as $cloned_property => $cloned_value) - { - if(!$cloned_value) unset($this->configData[$clone_prefix][$cloned_property]); + unset($main_config[$config_key]); + + foreach ($sub_configs as $sub_prefix => $sub_config) { + $sub_config['Prefix'] = $sub_prefix; + $this->configData[$sub_prefix] = array_merge_recursive2($this->configData[$$dst_prefix_var], $sub_config); + + // when merging empty array to non-empty results non-empty array, but empty is required + foreach ($sub_config as $sub_key => $sub_value) { + if (!$sub_value) { + unset($this->configData[$sub_config][$sub_key]); + } } - $this->ParseConfigClones($clone_prefix); + $this->postProcessConfig($sub_prefix, $config_key, $dst_prefix_var); } + if (!$prefix) { // configs, that used only for cloning & not used ifself unset($this->configData[$prefix]); } } - + function ParseConfigs() { foreach ($this->configData as $prefix => $config) { @@ -198,7 +201,9 @@ $config['ModuleFolder'] = $rets[1]; $config['BasePath'] = dirname(FULL_PATH.$filename); $this->configData[$prefix] = $config; - $this->ParseConfigClones($prefix); + + $this->postProcessConfig($prefix, 'AggregateConfigs', 'sub_prefix'); + $this->postProcessConfig($prefix, 'Clones', 'prefix'); } } }