1
0
mirror of https://github.com/e107inc/e107.git synced 2025-08-06 14:46:56 +02:00

Issue #5114 class conflict handling.

This commit is contained in:
camer0n
2023-11-24 10:44:00 -08:00
parent 56edcd53ee
commit 9461602e43
2 changed files with 28 additions and 8 deletions

View File

@@ -253,7 +253,7 @@ class e107
'language' => '{e_HANDLER}language_class.php', 'language' => '{e_HANDLER}language_class.php',
'news' => '{e_HANDLER}news_class.php', 'news' => '{e_HANDLER}news_class.php',
'notify' => '{e_HANDLER}notify_class.php', 'notify' => '{e_HANDLER}notify_class.php',
'e107\override' => '{e_HANDLER}override_class.php', 'override' => '{e_HANDLER}override_class.php',
'rater' => '{e_HANDLER}rate_class.php', 'rater' => '{e_HANDLER}rate_class.php',
'redirection' => '{e_HANDLER}redirection_class.php', 'redirection' => '{e_HANDLER}redirection_class.php',
'secure_image' => '{e_HANDLER}secure_img_handler.php', 'secure_image' => '{e_HANDLER}secure_img_handler.php',
@@ -272,6 +272,15 @@ class e107
'pageHelper' => '{e_PLUGIN}page/includes/pageHelper.php' 'pageHelper' => '{e_PLUGIN}page/includes/pageHelper.php'
); );
/**
* List of core classes using the 'e107' namespace.
*/
protected static $_named_handlers = [
'override' => true,
];
/** /**
* Overload core handlers array * Overload core handlers array
@@ -994,7 +1003,9 @@ class e107
*/ */
public static function getHandlerPath($class_name, $parse_path = true) public static function getHandlerPath($class_name, $parse_path = true)
{ {
$ret = isset(self::$_known_handlers[$class_name]) ? self::$_known_handlers[$class_name] : null; $ret = isset(self::$_known_handlers[$class_name]) ? self::$_known_handlers[$class_name] : null;
if($parse_path && $ret) if($parse_path && $ret)
{ {
$ret = self::getParser()->replaceConstants($ret); $ret = self::getParser()->replaceConstants($ret);
@@ -1040,7 +1051,7 @@ class e107
public static function isHandlerNamespaced($className) public static function isHandlerNamespaced($className)
{ {
return isset(self::$_known_handlers['e107\\'.$className]) ? '\\e107\\'.$className : false; return isset(self::$_named_handlers[$className]) ? '\\e107\\'.$className : false;
} }
/** /**
@@ -1141,6 +1152,11 @@ class e107
} }
} }
if($named = self::isHandlerNamespaced($class_name))
{
$class_name = $named;
}
if($path && is_string($path) && !class_exists($class_name, false)) if($path && is_string($path) && !class_exists($class_name, false))
{ {
global $_E107; global $_E107;
@@ -1158,13 +1174,8 @@ class e107
//e107_require_once() is available without class2.php. - see core_functions.php //e107_require_once() is available without class2.php. - see core_functions.php
} }
if(class_exists($class_name, false)) if(class_exists($class_name, false))
{ {
if($named = self::isHandlerNamespaced($class_name))
{
$class_name = $named;
}
try try
{ {
@@ -1965,7 +1976,7 @@ class e107
/** /**
* Retrieve override handler singleton object * Retrieve override handler singleton object
* *
* @return override * @return e107\override
*/ */
public static function getOverride() public static function getOverride()
{ {

View File

@@ -294,11 +294,20 @@ class e107Test extends \Codeception\Test\Unit
{ {
$e107 = $this->e107; $e107 = $this->e107;
// test with path.
$result = $e107::getSingleton('override', e_HANDLER . 'override_class.php'); $result = $e107::getSingleton('override', e_HANDLER . 'override_class.php');
$this->assertNotEmpty($result, 'Override class not loaded');
$exists = method_exists($result, 'override_check'); $exists = method_exists($result, 'override_check');
$this->assertTrue($exists, 'Failed to load override class singleton'); $this->assertTrue($exists, 'Failed to load override class singleton');
// Test without path.
$result2 = $e107::getOverride();
$exists2 = method_exists($result2, 'override_check');
$this->assertTrue($exists2, 'Failed to load override class singleton');
} }
/* /*