Index: trunk/core/kernel/utility/unit_config_reader.php =================================================================== diff -u -r4801 -r4802 --- trunk/core/kernel/utility/unit_config_reader.php (.../unit_config_reader.php) (revision 4801) +++ trunk/core/kernel/utility/unit_config_reader.php (.../unit_config_reader.php) (revision 4802) @@ -16,6 +16,7 @@ var $prefixFiles = array(); var $ProcessAllConfigs = false; + var $FinalStage = false; /** * Scan kernel and user classes @@ -170,7 +171,7 @@ $data = $conn->GetRow('SELECT Data, Cached FROM '.TABLE_PREFIX.'Cache WHERE VarName = "config_files"'); if ($cache && $data) { $this->configFiles = unserialize($data['Data']); - sort($this->configFiles); + shuffle($this->configFiles); $files_cached = $data['Cached']; } else { @@ -192,20 +193,21 @@ */ function ParseConfigs() { -// $this->parseConfig('formatters'); // !TEMPORARY!, until config dependecy is created foreach ($this->configData as $prefix => $config) { $this->parseConfig($prefix); } foreach ($this->configData as $prefix => $config) { + $this->ProcessDependencies($prefix); $this->postProcessConfig($prefix, 'AggregateConfigs', 'sub_prefix'); $clones = $this->postProcessConfig($prefix, 'Clones', 'prefix'); } } function AfterConfigRead() { - if (!$this->ProcessAllConfigs) return ; +// if (!$this->ProcessAllConfigs) return ; + $this->FinalStage = true; foreach ($this->configData as $prefix => $config) { $this->Application->HandleEvent( new kEvent($prefix.':OnAfterConfigRead') ); } @@ -223,10 +225,6 @@ $config =& $this->configData[$prefix]; $event_manager =& $this->Application->recallObject('EventManager'); - if ($prefix == 'formatters') { - echo ''; - } - $register_classes = getArrayValue($config,'RegisterClasses'); if (!$register_classes) $register_classes = Array(); $class_params=Array('ItemClass','ListClass','EventHandlerClass','TagProcessorClass'); @@ -239,11 +237,21 @@ foreach($register_classes as $class_info) { + $require_classes = getArrayValue($class_info, 'require_classes'); + if ($require_classes) { + if (!is_array($require_classes)) { + $require_classes = array($require_classes); + } + if (!isset($config['_Dependencies'][$class_info['class']])) { + $config['_Dependencies'][$class_info['class']] = array(); + } + $config['_Dependencies'][$class_info['class']] = array_merge($config['_Dependencies'][$class_info['class']], $require_classes); + } $this->Application->registerClass( - $class_info['class'], - $config['BasePath'].'/'.$class_info['file'], - $class_info['pseudo'], - getArrayValue($class_info, 'require_classes') + $class_info['class'], + $config['BasePath'].'/'.$class_info['file'], + $class_info['pseudo']/*, + getArrayValue($class_info, 'require_classes')*/ ); if (getArrayValue($class_info, 'build_event')) { $event_manager->registerBuildEvent($class_info['pseudo'],$class_info['build_event']); @@ -280,6 +288,9 @@ $hook['DoPrefix'] = $config['ParentPrefix']; } } + elseif ($hook['HookToPrefix'] == '#PARENT#' || $hook['DoPrefix'] == '#PARENT#') { + continue; // we need parent prefix but it's not set ! + } $do_prefix = $hook['DoPrefix'] == '' ? $config['Prefix'] : $hook['DoPrefix']; @@ -336,6 +347,20 @@ } } + function ProcessDependencies($prefix) + { + $config =& $this->configData[$prefix]; + $deps = getArrayValue($config, '_Dependencies'); + if (!$deps) return ; + + foreach ($deps as $real_class => $requires) { + foreach ($requires as $class) { + $this->Application->registerDependency($real_class, $class); + } + } + unset($config['_Dependencies']); + } + function postProcessConfig($prefix, $config_key, $dst_prefix_var) { $main_config =& $this->configData[$prefix]; @@ -428,10 +453,12 @@ $clones = $this->postProcessConfig($prefix, 'AggregateConfigs', 'sub_prefix'); $clones = array_merge($this->postProcessConfig($prefix, 'Clones', 'prefix'), $clones); - array_unshift($clones, $prefix); - $clones = array_unique($clones); - foreach ($clones as $a_prefix) { - $this->Application->HandleEvent( new kEvent($a_prefix.':OnAfterConfigRead') ); + if ($this->FinalStage) { + array_unshift($clones, $prefix); + $clones = array_unique($clones); + foreach ($clones as $a_prefix) { + $this->Application->HandleEvent( new kEvent($a_prefix.':OnAfterConfigRead') ); + } } }