From da8c7a5bb92b928c19918632d8cb8a06d0ea747d Mon Sep 17 00:00:00 2001 From: Andrey Andreev Date: Tue, 7 Jan 2014 18:08:26 +0200 Subject: Fix a few bugs in CI_Hook (based on PR #2762) --- system/core/Hooks.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'system/core/Hooks.php') diff --git a/system/core/Hooks.php b/system/core/Hooks.php index b3b111991..aa7ac1e5d 100644 --- a/system/core/Hooks.php +++ b/system/core/Hooks.php @@ -184,7 +184,7 @@ class CI_Hooks { $function = empty($data['function']) ? FALSE : $data['function']; $params = isset($data['params']) ? $data['params'] : ''; - if ($class === FALSE && $function === FALSE) + if (empty($function)) { return FALSE; } @@ -195,9 +195,11 @@ class CI_Hooks { // Call the requested class and/or function if ($class !== FALSE) { - if ( ! class_exists($class, FALSE)) + class_exists($class, FALSE) OR require_once($filepath); + + if ( ! class_exists($class, FALSE) OR ! method_exists($class, $function)) { - require($filepath); + return $this->_in_progress = FALSE; } $HOOK = new $class(); @@ -205,9 +207,11 @@ class CI_Hooks { } else { + function_exists($function) OR require_once($filepath); + if ( ! function_exists($function)) { - require($filepath); + return $this->_in_progress = FALSE; } $function($params); -- cgit v1.2.3-24-g4f1b From 0f667c9d1c23fae0966c7da24b193d1728bf8b54 Mon Sep 17 00:00:00 2001 From: Marcos SF Filho Date: Tue, 7 Jan 2014 15:01:56 -0200 Subject: Class for execute Hooks can be stored for reuse --- system/core/Hooks.php | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) (limited to 'system/core/Hooks.php') diff --git a/system/core/Hooks.php b/system/core/Hooks.php index aa7ac1e5d..aa62e680b 100644 --- a/system/core/Hooks.php +++ b/system/core/Hooks.php @@ -53,6 +53,13 @@ class CI_Hooks { */ public $hooks = array(); + /** + * Array with class objects to use hooks methods + * + * @var array + */ + public $class = array(); + /** * In progress flag * @@ -195,15 +202,33 @@ class CI_Hooks { // Call the requested class and/or function if ($class !== FALSE) { - class_exists($class, FALSE) OR require_once($filepath); - - if ( ! class_exists($class, FALSE) OR ! method_exists($class, $function)) + // The object is stored? + if (isset($this->class[$class]) && method_exists($this->class[$class], $function)) { - return $this->_in_progress = FALSE; + $this->class[$class]->$function($params); + } + else + { + class_exists($class, FALSE) OR require_once($filepath); + + if ( ! class_exists($class, FALSE) OR ! method_exists($class, $function)) + { + return $this->_in_progress = FALSE; + } + + // If the developer wants the object to be stored + if (isset($data['store_object']) && $data['store_object'] === TRUE) + { + $this->class[$class] = new $class(); + $HOOK =& $this->class[$class]; + } + else + { + $HOOK = new $class(); + } + + $HOOK->$function($params); } - - $HOOK = new $class(); - $HOOK->$function($params); } else { @@ -224,4 +249,4 @@ class CI_Hooks { } /* End of file Hooks.php */ -/* Location: ./system/core/Hooks.php */ \ No newline at end of file +/* Location: ./system/core/Hooks.php */ -- cgit v1.2.3-24-g4f1b From bdfef073585d5267f2d568be6de3ffcde773e13b Mon Sep 17 00:00:00 2001 From: Marcos SF Filho Date: Wed, 8 Jan 2014 09:48:09 -0200 Subject: Update the CI_Hooks class --- system/core/Hooks.php | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) (limited to 'system/core/Hooks.php') diff --git a/system/core/Hooks.php b/system/core/Hooks.php index aa62e680b..9bcc23a65 100644 --- a/system/core/Hooks.php +++ b/system/core/Hooks.php @@ -58,7 +58,7 @@ class CI_Hooks { * * @var array */ - public $class = array(); + protected $_objects = array(); /** * In progress flag @@ -203,31 +203,29 @@ class CI_Hooks { if ($class !== FALSE) { // The object is stored? - if (isset($this->class[$class]) && method_exists($this->class[$class], $function)) + if (isset($this->_objects[$class])) { - $this->class[$class]->$function($params); + if (method_exists($this->_objects[$class], $function)) + { + $this->_objects[$class]->$function($params); + } + else + { + return $this->_in_progress = FALSE; + } } else - { + { class_exists($class, FALSE) OR require_once($filepath); if ( ! class_exists($class, FALSE) OR ! method_exists($class, $function)) { return $this->_in_progress = FALSE; } - - // If the developer wants the object to be stored - if (isset($data['store_object']) && $data['store_object'] === TRUE) - { - $this->class[$class] = new $class(); - $HOOK =& $this->class[$class]; - } - else - { - $HOOK = new $class(); - } - - $HOOK->$function($params); + + // Store the object and execute the method + $this->_objects[$class] = new $class(); + $this->_objects[$class]->$function($params); } } else @@ -249,4 +247,4 @@ class CI_Hooks { } /* End of file Hooks.php */ -/* Location: ./system/core/Hooks.php */ +/* Location: ./system/core/Hooks.php */ \ No newline at end of file -- cgit v1.2.3-24-g4f1b