diff --git a/e107_handlers/e107_class.php b/e107_handlers/e107_class.php index ae786fdd1..46cc67ef0 100644 --- a/e107_handlers/e107_class.php +++ b/e107_handlers/e107_class.php @@ -15,6 +15,7 @@ if (!defined('e107_INIT')) { exit; } + /** * * @package e107 @@ -153,6 +154,8 @@ class e107 protected static $_breadcrumb = array(); + + /** * Core handlers array * For new/missing handler add @@ -250,7 +253,7 @@ class e107 'language' => '{e_HANDLER}language_class.php', 'news' => '{e_HANDLER}news_class.php', 'notify' => '{e_HANDLER}notify_class.php', - 'override' => '{e_HANDLER}override_class.php', + 'e107\override' => '{e_HANDLER}override_class.php', 'rater' => '{e_HANDLER}rate_class.php', 'redirection' => '{e_HANDLER}redirection_class.php', 'secure_image' => '{e_HANDLER}secure_img_handler.php', @@ -269,6 +272,7 @@ class e107 'pageHelper' => '{e_PLUGIN}page/includes/pageHelper.php' ); + /** * Overload core handlers array * Format: 'core_class' => array('overload_class', 'overload_path'); @@ -1034,6 +1038,11 @@ class e107 return isset(self::$_known_handlers[$class_name]); } + public static function isHandlerNamespaced($className) + { + return isset(self::$_known_handlers['e107\\'.$className]) ? '\\e107\\'.$className : false; + } + /** * Get overlod class and path (if any) * @@ -1148,9 +1157,26 @@ class e107 // remove the need for external function. //e107_require_once() is available without class2.php. - see core_functions.php } + + if(class_exists($class_name, false)) { - self::setRegistry($id, new $class_name($vars)); + if($named = self::isHandlerNamespaced($class_name)) + { + $class_name = $named; + } + + try + { + $cls = is_null($vars) ? new $class_name() : new $class_name($vars); + } + catch (Exception $e) + { + trigger_error($e->getMessage()); + return false; + } + + self::setRegistry($id, $cls); } return self::getRegistry($id); @@ -5932,12 +5958,18 @@ class e107 return; } + + $levels[0] = e_HANDLER; $classPath = implode('/', $levels).'.php'; if (is_file($classPath) && is_readable($classPath)) { include($classPath); } + elseif($filename = self::getHandlerPath($className)) + { + include($filename); + } } /** diff --git a/e107_handlers/override_class.php b/e107_handlers/override_class.php index 557ce163f..b47f8acb3 100644 --- a/e107_handlers/override_class.php +++ b/e107_handlers/override_class.php @@ -14,6 +14,8 @@ * $Author$ */ +namespace e107; + if (!defined('e107_INIT')) { exit; } /* @@ -40,7 +42,7 @@ class override { protected $functions = array(); protected $includes = array(); - + /** * Replace an existing function or class method diff --git a/e107_tests/tests/unit/e107Test.php b/e107_tests/tests/unit/e107Test.php index 0186329c0..973a31b0b 100644 --- a/e107_tests/tests/unit/e107Test.php +++ b/e107_tests/tests/unit/e107Test.php @@ -289,13 +289,19 @@ class e107Test extends \Codeception\Test\Unit $res = null; $this->assertTrue($res); } - +*/ public function testGetSingleton() { - $res = null; - $this->assertTrue($res); + $e107 = $this->e107; + + $result = $e107::getSingleton('override', e_HANDLER . 'override_class.php'); + + $exists = method_exists($result, 'override_check'); + + $this->assertTrue($exists, 'Failed to load override class singleton'); } +/* public function testGetObject() { $res = null;