Index: trunk/admin/index4.php =================================================================== diff -u -N -r1649 -r2592 --- trunk/admin/index4.php (.../index4.php) (revision 1649) +++ trunk/admin/index4.php (.../index4.php) (revision 2592) @@ -24,7 +24,7 @@ - + Index: trunk/core/kernel/application.php =================================================================== diff -u -N -r2591 -r2592 --- trunk/core/kernel/application.php (.../application.php) (revision 2591) +++ trunk/core/kernel/application.php (.../application.php) (revision 2592) @@ -241,20 +241,19 @@ */ function RegisterDefaultClasses() { - //$this->registerClass('Utilites',KERNEL_PATH.'/utility/utilities.php'); - $this->registerClass('HTTPQuery',KERNEL_PATH.'/utility/http_query.php'); - $this->Factory->registerDependency('HTTPQuery', 'Params'); + $this->registerClass('kArray',KERNEL_PATH.'/utility/params.php'); + $this->registerClass('Params',KERNEL_PATH.'/utility/params.php'); - $this->registerClass('Session',KERNEL_PATH.'/session/session.php'); - $this->registerClass('SessionStorage',KERNEL_PATH.'/session/session.php'); - $this->registerClass('LoginEventHandler',KERNEL_PATH.'/session/login_event_handler.php','login_EventHandler'); - $this->registerClass('kEventManager',KERNEL_PATH.'/event_manager.php','EventManager'); + $this->registerClass('HTTPQuery', KERNEL_PATH.'/utility/http_query.php', 'HTTPQuery', Array('Params') ); - $this->registerClass('kUnitConfigReader',KERNEL_PATH.'/utility/unit_config_reader.php'); + $this->registerClass('Session', KERNEL_PATH.'/session/session.php'); + $this->registerClass('SessionStorage', KERNEL_PATH.'/session/session.php'); + $this->registerClass('kEventManager', KERNEL_PATH.'/event_manager.php', 'EventManager'); + $this->registerClass('kUnitConfigReader', KERNEL_PATH.'/utility/unit_config_reader.php'); - $this->registerClass('Params',KERNEL_PATH.'/utility/params.php','kActions'); - $this->registerClass('kArray',KERNEL_PATH.'/utility/params.php','kArray'); + $this->registerClass('Params', KERNEL_PATH.'/utility/params.php', 'kActions'); + $this->registerClass('kFormatter', KERNEL_PATH.'/utility/formatters.php'); $this->registerClass('kOptionsFormatter', KERNEL_PATH.'/utility/formatters.php'); $this->registerClass('kUploadFormatter', KERNEL_PATH.'/utility/formatters.php'); @@ -270,8 +269,7 @@ $this->registerClass('kTempTablesHandler', KERNEL_PATH.'/utility/temp_handler.php'); $event_manager =& $this->recallObject('EventManager'); - $event_manager->registerBuildEvent('kTempTablesHandler','OnTempHandlerBuild'); - //$this->registerClass('Configuration',KERNEL_PATH.'/utility/configuration.php'); + $event_manager->registerBuildEvent('kTempTablesHandler', 'OnTempHandlerBuild'); $this->registerClass('TemplatesCache',KERNEL_PATH.'/parser/template.php'); $this->registerClass('Template',KERNEL_PATH.'/parser/template.php'); @@ -294,16 +292,12 @@ } $this->registerClass('FCKeditor', DOC_ROOT.BASE_PATH.'/admin/editor/cmseditor/fckeditor.php'); // need this? - /*$this->RegisterClass('LoginController', KERNEL_PATH.'/users/login_controller.php');*/ } /** * Defines default constants if it's not defined before - in config.php * - * Called automatically while initializing Application and defines: - * LOGIN_CONTROLLER, XML_FACTORY etc. * @access private - * @return void */ function SetDefaultConstants() { @@ -902,18 +896,32 @@ /** * Registers new class in the factory * - * @param string $real_class - * @param string $file - * @param string $pseudo_class + * @param string $real_class Real name of class as in class declaration + * @param string $file Filename in what $real_class is declared + * @param string $pseudo_class Name under this class object will be accessed using getObject method + * @param Array $dependecies List of classes required for this class functioning * @access public * @author Alex */ - function registerClass($real_class,$file,$pseudo_class=null) + function registerClass($real_class, $file, $pseudo_class = null, $dependecies = Array() ) { - $this->Factory->registerClass($real_class,$file,$pseudo_class); + $this->Factory->registerClass($real_class, $file, $pseudo_class, $dependecies); } /** + * Add $class_name to required classes list for $depended_class class. + * All required class files are included before $depended_class file is included + * + * @param string $depended_class + * @param string $class_name + * @author Alex + */ + function registerDependency($depended_class, $class_name) + { + $this->Factory->registerDependency($depended_class, $class_name); + } + + /** * Registers Hook from subprefix event to master prefix event * * @param string $hookto_prefix @@ -958,16 +966,9 @@ */ function &recallObject($name,$pseudo_class=null,$event_params=Array()) { - $o1 =& $this->Factory->getObject($name,$pseudo_class,$event_params); - - //$o1->param1 = 'one'; - - /*$func_args = func_get_args(); - $factory =& $this->Factory; - $o2 =& call_user_func_array( Array(&$factory, 'getObject'), $func_args );*/ - - //$o2->param1 = 'two'; - return $o1; + $func_args =& func_get_args(); + $result =& ref_call_user_func_array( Array(&$this->Factory, 'getObject'), $func_args ); + return $result; } /** @@ -1005,8 +1006,10 @@ */ function &makeClass($pseudo_class) { - $func_args = func_get_args(); - return call_user_func_array( Array(&$this->Factory, 'makeClass'), $func_args); + $func_args =& func_get_args(); + $result =& ref_call_user_func_array( Array(&$this->Factory, 'makeClass'), $func_args); + + return $result; } /** Index: trunk/core/kernel/globals.php =================================================================== diff -u -N -r2328 -r2592 --- trunk/core/kernel/globals.php (.../globals.php) (revision 2328) +++ trunk/core/kernel/globals.php (.../globals.php) (revision 2592) @@ -325,4 +325,40 @@ { function memory_get_usage(){ return -1; } } + + function &ref_call_user_func_array($callable, $args) + { + if( is_scalar($callable) ) + { + // $callable is the name of a function + $call = $callable; + } + else + { + if( is_object($callable[0]) ) + { + // $callable is an object and a method name + $call = "\$callable[0]->{$callable[1]}"; + } + else + { + // $callable is a class name and a static method + $call = "{$callable[0]}::{$callable[1]}"; + } + } + + // Note because the keys in $args might be strings + // we do this in a slightly round about way. + $argumentString = Array(); + $argumentKeys = array_keys($args); + foreach($argumentKeys as $argK) + { + $argumentString[] = "\$args[$argumentKeys[$argK]]"; + } + $argumentString = implode($argumentString, ', '); + // Note also that eval doesn't return references, so we + // work around it in this way... + eval("\$result =& {$call}({$argumentString});"); + return $result; + } ?> \ No newline at end of file Index: trunk/core/kernel/utility/factory.php =================================================================== diff -u -N -r2544 -r2592 --- trunk/core/kernel/utility/factory.php (.../factory.php) (revision 2544) +++ trunk/core/kernel/utility/factory.php (.../factory.php) (revision 2592) @@ -94,7 +94,7 @@ $funs_args = func_get_args(); array_splice($funs_args, 0, 3, Array($pseudo_class) ); - $this->Storage[$name] =& call_user_func_array( Array(&$this,'makeClass'), $funs_args); + $this->Storage[$name] =& ref_call_user_func_array( Array(&$this,'makeClass'), $funs_args); $this->Storage[$name]->Init($ret['prefix'],$ret['special'],$event_params); $prefix=$this->Storage[$name]->Prefix; @@ -144,7 +144,7 @@ { foreach($deps as $dep_class_name) { - $filename = $this->getFileByClassName($dep_class_name); + $filename = $this->Files[$dep_class_name]; k4_include_once($filename); } } @@ -165,25 +165,25 @@ */ function &makeClass($pseudo_class) { - $real_class=$this->realClasses[$pseudo_class]; + $real_class = $this->realClasses[$pseudo_class]; $this->includeClassFile($real_class); $mem_before = memory_get_usage(); $time_before = getmicrotime(); if( func_num_args() == 1 ) { - $class =& new $real_class(); + $class = new $real_class(); } else { $func_args = func_get_args(); $pseudo_class = array_shift($func_args); - $class =& call_user_func_array( Array($real_class,'makeClass'), $func_args ); + $class =& ref_call_user_func_array( Array($real_class,'makeClass'), $func_args ); } - if (defined('DEBUG_MODE') && DEBUG_MODE && dbg_ConstOn('DBG_PROFILE_MEMORY') ) + if( $this->Application->isDebugMode() && dbg_ConstOn('DBG_PROFILE_MEMORY') ) { $mem_after = memory_get_usage(); $time_after = getmicrotime(); @@ -194,18 +194,18 @@ $debugger->profilerAddTotal('objects', null, $mem_used); } return $class; - } /** * Registers new class in the factory * - * @param string $real_class - * @param string $file - * @param string $pseudo_class + * @param string $real_class Real name of class as in class declaration + * @param string $file Filename in what $real_class is declared + * @param string $pseudo_class Name under this class object will be accessed using getObject method + * @param Array $dependecies List of classes required for this class functioning * @access public */ - function registerClass($real_class,$file,$pseudo_class=null) + function registerClass($real_class,$file,$pseudo_class=null, $dependecies = Array() ) { if(!isset($pseudo_class)) $pseudo_class = $real_class; if(!isset($this->Files[$real_class])) $this->Files[$real_class]=$file; @@ -215,24 +215,30 @@ $this->registerDependency($real_class, $pseudo_class); } - if($pseudo_class == 'kCatDBEventHandler') + if($dependecies) { - echo ''; // TODO: fix that LinksEventHandler got ProductsEventHandler as it's pseudo_class :) + foreach($dependecies as $required_class) + { + $this->registerDependency($real_class, $required_class); + } } $this->realClasses[$pseudo_class]=$real_class; } + /** + * Add $class_name to required classes list for $depended_class class. + * All required class files are included before $depended_class file is included + * + * @param string $depended_class + * @param string $class_name + * @author Alex + */ function registerDependency($depended_class, $class_name) { $this->Dependencies[$depended_class][] = $this->realClasses[$class_name]; } - function getFileByClassName($class_name) - { - return getArrayValue($this->Files, $class_name); - } - } ?> \ No newline at end of file Index: trunk/core/kernel/event_manager.php =================================================================== diff -u -N -r2368 -r2592 --- trunk/core/kernel/event_manager.php (.../event_manager.php) (revision 2368) +++ trunk/core/kernel/event_manager.php (.../event_manager.php) (revision 2592) @@ -68,7 +68,7 @@ * @var Array * @access private */ - var $afterHooks=Array(); + var $afterHooks = Array(); function kEventManager() { Index: trunk/core/kernel/utility/filters.php =================================================================== diff -u -N -r1980 -r2592 --- trunk/core/kernel/utility/filters.php (.../filters.php) (revision 1980) +++ trunk/core/kernel/utility/filters.php (.../filters.php) (revision 2592) @@ -13,6 +13,9 @@ */ function &makeClass($type=null) { + /*$result = new kMultipleFilter($type); + return $result;*/ + return new kMultipleFilter($type); } @@ -23,15 +26,15 @@ * @return MultipleFilter * @access public */ - function MultipleFilter($type=null) + function kMultipleFilter($type = FLT_TYPE_AND) { - if(isset($type)) $this->setType($type); + $this->setType($type); } /** * Enter description here... * - * @param unknown_type $new_type + * @param int $new_type */ function setType($new_type) {
Memory used:'.round(memory_get_usage()/1024/1024, 1).' MB'.round(memory_get_usage()/1024/1024, 1).' MB ('.memory_get_usage().')
Time used: