Index: branches/unlabeled/unlabeled-1.11.2/core/units/general/helpers/sections_helper.php =================================================================== diff -u -r6697 -r6936 --- branches/unlabeled/unlabeled-1.11.2/core/units/general/helpers/sections_helper.php (.../sections_helper.php) (revision 6697) +++ branches/unlabeled/unlabeled-1.11.2/core/units/general/helpers/sections_helper.php (.../sections_helper.php) (revision 6936) @@ -47,6 +47,7 @@ $unit_config_reader =& $this->Application->recallObject('kUnitConfigReader'); } + // 1. build base tree (don't update parent with children list yet) $prefixes = array_keys($unit_config_reader->configData); foreach ($prefixes as $prefix) { $config =& $unit_config_reader->configData[$prefix]; @@ -95,16 +96,36 @@ $current_data = isset($this->Tree[$section_name]) ? $this->Tree[$section_name] : Array(); $this->Tree[$section_name] = array_merge_recursive2($current_data, $section_params); - - $this->Tree[ $section_params['parent'] ]['children'][ "{$section_params['priority']}" ] = $section_name; - - if ($section_params['type'] == stTAB) { - // if this is tab, then mark parent section as TabOnly - $this->Tree[ $section_params['parent'] ]['tabs_only'] = true; + } + } + + // 2. apply section ajustments + foreach ($prefixes as $prefix) { + $config =& $unit_config_reader->configData[$prefix]; + $section_ajustments = getArrayValue($config, 'SectionAdjustments'); + if (!$section_ajustments) continue; + + foreach ($section_ajustments as $section_name => $ajustment_params) { + if (is_array($ajustment_params)) { + $this->Tree[$section_name] = array_merge_recursive2($this->Tree[$section_name], $ajustment_params); } + else { + // then remove section + unset($this->Tree[$section_name]); + } } } + + // 3. update parent -> children references + foreach ($this->Tree as $section_name => $section_params) { + $this->Tree[ $section_params['parent'] ]['children'][ "{$section_params['priority']}" ] = $section_name; + if ($section_params['type'] == stTAB) { + // if this is tab, then mark parent section as TabOnly + $this->Tree[ $section_params['parent'] ]['tabs_only'] = true; + } + } + $this->Conn->Query('REPLACE '.TABLE_PREFIX.'Cache (VarName, Data, Cached) VALUES ("sections_parsed", '.$this->Conn->qstr(serialize($this->Tree)).', '.adodb_mktime().')'); }