1
0
mirror of https://github.com/e107inc/e107.git synced 2025-10-10 20:44:48 +02:00

e107 class: getFolder method added (should replace all global folders usage); known_handlers property and smarter getSingleton/getObject methods (known_handlers needs more info); fatal error fix

This commit is contained in:
secretr
2009-08-20 12:24:47 +00:00
parent 6287c9fad2
commit 3f58e82a3a

View File

@@ -9,8 +9,8 @@
* e107 Main * e107 Main
* *
* $Source: /cvs_backup/e107_0.8/e107_handlers/e107_class.php,v $ * $Source: /cvs_backup/e107_0.8/e107_handlers/e107_class.php,v $
* $Revision: 1.38 $ * $Revision: 1.39 $
* $Date: 2009-08-19 14:39:56 $ * $Date: 2009-08-20 12:24:47 $
* $Author: secretr $ * $Author: secretr $
*/ */
@@ -90,7 +90,7 @@ class e107
/** /**
* Core handlers array * Core handlers array
* For new/missing handler add * For new/missing handler add
* 'class name' => 'filename' pair * 'class name' => 'path' pair
* *
* Used to auto-load core handlers * Used to auto-load core handlers
* *
@@ -98,13 +98,16 @@ class e107
* @see getObject() * @see getObject()
* @var array * @var array
*/ */
protected static $_known_handlers = array( protected static $_known_handlers = array (
'e_form' => 'form_class.php', 'e_news_item' => '{e_HANDLER}news_class.php',
'e_upgrade' => 'form_class.php', 'e_news_tree' => '{e_HANDLER}news_class.php',
'e_jshelper' => 'js_helper.php', 'news' => '{e_HANDLER}news_class.php',
'e_menu' => 'menu_class.php', 'e_form' => '{e_HANDLER}form_class.php',
'e107plugin' => 'plugin_class.php', 'e_upgrade' => '{e_HANDLER}form_class.php',
'xmlClass' => 'xml_class.php' 'e_jshelper' => '{e_HANDLER}js_helper.php',
'e_menu' => '{e_HANDLER}menu_class.php',
'e107plugin' => '{e_HANDLER}plugin_class.php',
'xmlClass' => '{e_HANDLER}xml_class.php'
); );
@@ -229,6 +232,19 @@ class e107
self::$_registry[$id] = $data; self::$_registry[$id] = $data;
} }
/**
* Get folder name (e107_config)
* Replaces all $(*)_DIRECTORY globals
* Example: $e107->getFolder('images');
*
* @param string $for
* @return string
*/
function getFolder($for)
{
return varset($this->e107_dirs[strtoupper($for).'_DIRECTORY']);
}
/** /**
* Retrieve singleton object * Retrieve singleton object
* *
@@ -268,22 +284,31 @@ class e107
* *
* @param string $class_name * @param string $class_name
* @param mxed $arguments * @param mxed $arguments
* @param string $path optional script path * @param string|boolean $path optional script path
* @return object|null * @return object|null
*/ */
public static function getObject($class_name, $arguments = null, $path = null) public static function getObject($class_name, $arguments = null, $path = true)
{ {
if(null !== $path && !class_exists($class_name)) if(true === $path)
{
if(isset(self::$_known_handlers[$class_name]))
{
$path = self::getParser()->replaceConstants(self::$_known_handlers[$class_name]);
}
}
if($path && is_string($path) && !class_exists($class_name, false))
{ {
e107_require_once($path); //no existence/security checks here! e107_require_once($path); //no existence/security checks here!
} }
if(class_exists($class_name, false)) if(class_exists($class_name, false))
{ {
if(null !== $arguments) return $class_name($arguments); if(null !== $arguments) return new $class_name($arguments);
return $class_name(); return new $class_name();
} }
//trigger_error("Class {$class_name} not found!", E_USER_ERROR); trigger_error("Class {$class_name} not found!", E_USER_ERROR);
return null; return null;
} }