Index: trunk/core/units/custom_data/custom_data_config.php =================================================================== diff -u -N -r4801 -r4802 --- trunk/core/units/custom_data/custom_data_config.php (.../custom_data_config.php) (revision 4801) +++ trunk/core/units/custom_data/custom_data_config.php (.../custom_data_config.php) (revision 4802) @@ -13,7 +13,7 @@ 'TableName' => TABLE_PREFIX.'CategoryCustomData', 'ParentPrefix' => 'c', ), - + 'l-cdata' => Array( 'TableName' => TABLE_PREFIX.'LinkCustomData', 'ParentPrefix' => 'l', @@ -28,7 +28,7 @@ 'TableName' => TABLE_PREFIX.'TopicCustomData', 'ParentPrefix' => 'bb', ), - + 'p-cdata' => Array( 'TableName' => TABLE_PREFIX.'ProductsCustomData', 'ParentPrefix' => 'p', @@ -50,7 +50,7 @@ Array( 'Mode' => hAFTER, 'Conditional' => false, - 'HookToPrefix' => '', //self + 'HookToPrefix' => '#PARENT#', //self 'HookToSpecial' => '*', 'HookToEvent' => Array('OnAfterConfigRead'), 'DoPrefix' => '', Index: trunk/kernel/units/custom_data/custom_data_config.php =================================================================== diff -u -N -r4801 -r4802 --- trunk/kernel/units/custom_data/custom_data_config.php (.../custom_data_config.php) (revision 4801) +++ trunk/kernel/units/custom_data/custom_data_config.php (.../custom_data_config.php) (revision 4802) @@ -13,7 +13,7 @@ 'TableName' => TABLE_PREFIX.'CategoryCustomData', 'ParentPrefix' => 'c', ), - + 'l-cdata' => Array( 'TableName' => TABLE_PREFIX.'LinkCustomData', 'ParentPrefix' => 'l', @@ -28,7 +28,7 @@ 'TableName' => TABLE_PREFIX.'TopicCustomData', 'ParentPrefix' => 'bb', ), - + 'p-cdata' => Array( 'TableName' => TABLE_PREFIX.'ProductsCustomData', 'ParentPrefix' => 'p', @@ -50,7 +50,7 @@ Array( 'Mode' => hAFTER, 'Conditional' => false, - 'HookToPrefix' => '', //self + 'HookToPrefix' => '#PARENT#', //self 'HookToSpecial' => '*', 'HookToEvent' => Array('OnAfterConfigRead'), 'DoPrefix' => '', Index: trunk/core/kernel/utility/unit_config_reader.php =================================================================== diff -u -N -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') ); + } } } Index: trunk/core/kernel/utility/factory.php =================================================================== diff -u -N -r4794 -r4802 --- trunk/core/kernel/utility/factory.php (.../factory.php) (revision 4794) +++ trunk/core/kernel/utility/factory.php (.../factory.php) (revision 4802) @@ -197,8 +197,12 @@ function includeClassFile($real_class) { if (class_exists($real_class)) return; - if(!$this->Files[$real_class]) trigger_error('Real Class '.$real_class.' is not registered with the Factory', E_USER_ERROR); - if(!file_exists($this->Files[$real_class])) trigger_error('Include file for class '.$real_class.' ('.$this->Files[$real_class].') does not exists', E_USER_ERROR); + if(!isset($this->Files[$real_class])) { + trigger_error('Real Class '.$real_class.' is not registered with the Factory', E_USER_ERROR); + } + if(!file_exists($this->Files[$real_class])) { + trigger_error('Include file for class '.$real_class.' ('.$this->Files[$real_class].') does not exists', E_USER_ERROR); + } if( isset( $this->Dependencies[$real_class] ) ) { @@ -294,10 +298,6 @@ { $dependencies =& $this->Dependencies[$depended_class]; - if ($class_name == 'kFormatter') { - echo ''; - } - $conditions = Array(); $conditions['exists'] = is_array($dependencies) && in_array($this->realClasses[$class_name], $dependencies); $conditions['same_class'] = $this->realClasses[$class_name] == $depended_class; Index: trunk/core/kernel/event_manager.php =================================================================== diff -u -N -r4771 -r4802 --- trunk/core/kernel/event_manager.php (.../event_manager.php) (revision 4771) +++ trunk/core/kernel/event_manager.php (.../event_manager.php) (revision 4802) @@ -208,7 +208,7 @@ $this->processHooks($event, hBEFORE); if ($event->status == erFATAL) return true; } - + $event_handler =& $this->Application->recallObject($event->Prefix.'_EventHandler'); $event_handler->processEvent($event); @@ -249,7 +249,7 @@ } $passed = explode(',', $this->Application->GetVar('passed')); - + foreach ($events as $prefix_special => $event_name) { if (!$event_name) continue; if (is_array($event_name)) {