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)) {