diff --git a/classes/db/DB.class.php b/classes/db/DB.class.php index 4a68816d8..a41ad4031 100644 --- a/classes/db/DB.class.php +++ b/classes/db/DB.class.php @@ -4,35 +4,6 @@ if(!defined('__XE_LOADED_DB_CLASS__')) { define('__XE_LOADED_DB_CLASS__', 1); - - require(_XE_PATH_ . 'classes/xml/xmlquery/DBParser.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/QueryParser.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/argument/Argument.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/argument/SortArgument.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/argument/ConditionArgument.class.php'); - - require(_XE_PATH_ . 'classes/db/queryparts/expression/Expression.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/expression/SelectExpression.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/expression/InsertExpression.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/expression/UpdateExpression.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/expression/UpdateExpressionWithoutArgument.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/expression/ClickCountExpression.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/table/Table.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/table/JoinTable.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/table/CubridTableWithHint.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/table/MysqlTableWithHint.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/table/MssqlTableWithHint.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/table/IndexHint.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/condition/ConditionGroup.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/condition/Condition.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/condition/ConditionWithArgument.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/condition/ConditionWithoutArgument.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/condition/ConditionSubquery.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/expression/StarExpression.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/order/OrderByColumn.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/limit/Limit.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/Query.class.php'); - require(_XE_PATH_ . 'classes/db/queryparts/Subquery.class.php'); } /** @@ -622,7 +593,6 @@ class DB // if there is no cache file or is not new, find original xml query file and parse it if($cache_time < filemtime($xml_file) || $cache_time < filemtime(_XE_PATH_ . 'classes/db/DB.class.php') || $cache_time < filemtime(_XE_PATH_ . 'classes/xml/XmlQueryParser.class.php')) { - require_once(_XE_PATH_ . 'classes/xml/XmlQueryParser.class.php'); $oParser = new XmlQueryParser(); $oParser->parse($query_id, $xml_file, $cache_file); } diff --git a/classes/display/DisplayHandler.class.php b/classes/display/DisplayHandler.class.php index e4bca38da..deb8d8326 100644 --- a/classes/display/DisplayHandler.class.php +++ b/classes/display/DisplayHandler.class.php @@ -39,12 +39,10 @@ class DisplayHandler extends Handler // Extract contents to display by the request method if(Context::get('xeVirtualRequestMethod') == 'xml') { - require_once(_XE_PATH_ . "classes/display/VirtualXMLDisplayHandler.php"); $handler = new VirtualXMLDisplayHandler(); } else if(Context::getRequestMethod() == 'XMLRPC') { - require_once(_XE_PATH_ . "classes/display/XMLDisplayHandler.php"); $handler = new XMLDisplayHandler(); if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) { @@ -53,17 +51,14 @@ class DisplayHandler extends Handler } else if(Context::getRequestMethod() == 'JSON') { - require_once(_XE_PATH_ . "classes/display/JSONDisplayHandler.php"); $handler = new JSONDisplayHandler(); } else if(Context::getRequestMethod() == 'JS_CALLBACK') { - require_once(_XE_PATH_ . "classes/display/JSCallbackDisplayHandler.php"); $handler = new JSCallbackDisplayHandler(); } else { - require_once(_XE_PATH_ . "classes/display/HTMLDisplayHandler.php"); $handler = new HTMLDisplayHandler(); } diff --git a/classes/module/ModuleHandler.class.php b/classes/module/ModuleHandler.class.php index 5e315d011..4f6b67fe2 100644 --- a/classes/module/ModuleHandler.class.php +++ b/classes/module/ModuleHandler.class.php @@ -1044,31 +1044,18 @@ class ModuleHandler extends Handler ModuleHandler::_getModuleFilePath($module, $type, $kind, $class_path, $high_class_file, $class_file, $instance_name); } - // Get base class name and load the file contains it - if(!class_exists($module, false)) + // Check if the base class and instance class exist + if(!class_exists($module, true)) { - $high_class_file = sprintf('%s%s%s.class.php', _XE_PATH_, $class_path, $module); - if(!file_exists($high_class_file)) - { - return NULL; - } - require_once($high_class_file); + return NULL; } - - // Get the name of the class file - if(!is_readable($class_file)) + if(!class_exists($instance_name, true)) { return NULL; } - // Create an instance with eval function - require_once($class_file); - if(!class_exists($instance_name, false)) - { - return NULL; - } - $tmp_fn = create_function('', "return new {$instance_name}();"); - $oModule = $tmp_fn(); + // Create an instance + $oModule = new $instance_name(); if(!is_object($oModule)) { return NULL; diff --git a/classes/xml/XmlQueryParser.class.php b/classes/xml/XmlQueryParser.class.php index a804376bd..e86c00c8f 100644 --- a/classes/xml/XmlQueryParser.class.php +++ b/classes/xml/XmlQueryParser.class.php @@ -7,31 +7,6 @@ if(!defined('__XE_LOADED_XML_CLASS__')) { define('__XE_LOADED_XML_CLASS__', 1); - - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/query/QueryTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/table/TableTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/table/HintTableTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/table/TablesTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/column/ColumnTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/column/SelectColumnTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/column/InsertColumnTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/column/InsertColumnTagWithoutArgument.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/column/UpdateColumnTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/column/SelectColumnsTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/column/InsertColumnsTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/column/UpdateColumnsTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/condition/ConditionTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/condition/ConditionsTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/condition/JoinConditionsTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/condition/ConditionGroupTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/group/GroupsTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/navigation/NavigationTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/navigation/IndexTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/tags/navigation/LimitTag.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/queryargument/QueryArgument.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/queryargument/SortQueryArgument.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/queryargument/validator/QueryArgumentValidator.class.php'); - require(_XE_PATH_ . 'classes/xml/xmlquery/queryargument/DefaultValue.class.php'); } /** diff --git a/config/config.inc.php b/config/config.inc.php index 4b5c1df20..575a89863 100644 --- a/config/config.inc.php +++ b/config/config.inc.php @@ -291,34 +291,120 @@ if(!defined('__XE_LOADED_CLASS__')) define('__StartTime__', getMicroTime()); // include the class files - //TODO When _autoload() can be used for PHP5 based applications, it will be removed. if(__DEBUG__) define('__ClassLoadStartTime__', getMicroTime()); - require(_XE_PATH_ . 'classes/object/Object.class.php'); - require(_XE_PATH_ . 'classes/extravar/Extravar.class.php'); - require(_XE_PATH_ . 'classes/handler/Handler.class.php'); - require(_XE_PATH_ . 'classes/xml/XmlParser.class.php'); - require(_XE_PATH_ . 'classes/xml/XmlGenerator.class.php'); - require(_XE_PATH_ . 'classes/xml/XmlJsFilter.class.php'); - require(_XE_PATH_ . 'classes/xml/XmlLangParser.class.php'); - require(_XE_PATH_ . 'classes/cache/CacheHandler.class.php'); - require(_XE_PATH_ . 'classes/context/Context.class.php'); - require(_XE_PATH_ . 'classes/db/DB.class.php'); - require(_XE_PATH_ . 'classes/file/FileHandler.class.php'); - require(_XE_PATH_ . 'classes/widget/WidgetHandler.class.php'); - require(_XE_PATH_ . 'classes/editor/EditorHandler.class.php'); - require(_XE_PATH_ . 'classes/module/ModuleObject.class.php'); - require(_XE_PATH_ . 'classes/module/ModuleHandler.class.php'); - require(_XE_PATH_ . 'classes/display/DisplayHandler.class.php'); - require(_XE_PATH_ . 'classes/template/TemplateHandler.class.php'); - require(_XE_PATH_ . 'classes/mail/Mail.class.php'); - require(_XE_PATH_ . 'classes/page/PageHandler.class.php'); - require(_XE_PATH_ . 'classes/mobile/Mobile.class.php'); - require(_XE_PATH_ . 'classes/validator/Validator.class.php'); - require(_XE_PATH_ . 'classes/frontendfile/FrontEndFileHandler.class.php'); - require(_XE_PATH_ . 'classes/security/Password.class.php'); - require(_XE_PATH_ . 'classes/security/Security.class.php'); - require(_XE_PATH_ . 'classes/security/IpFilter.class.php'); + + $__xe_autoload_file_map = array_change_key_case(array( + 'CacheHandler' => 'classes/cache/CacheHandler.class.php', + 'Context' => 'classes/context/Context.class.php', + 'DB' => 'classes/db/DB.class.php', + 'Query' => 'classes/db/queryparts/Query.class.php', + 'Subquery' => 'classes/db/queryparts/Subquery.class.php', + 'Condition' => 'classes/db/queryparts/condition/Condition.class.php', + 'ConditionGroup' => 'classes/db/queryparts/condition/ConditionGroup.class.php', + 'ConditionSubquery' => 'classes/db/queryparts/condition/ConditionSubquery.class.php', + 'ConditionWithArgument' => 'classes/db/queryparts/condition/ConditionWithArgument.class.php', + 'ConditionWithoutArgument' => 'classes/db/queryparts/condition/ConditionWithoutArgument.class.php', + 'ClickCountExpression' => 'classes/db/queryparts/expression/ClickCountExpression.class.php', + 'DeleteExpression' => 'classes/db/queryparts/expression/DeleteExpression.class.php', + 'Expression' => 'classes/db/queryparts/expression/Expression.class.php', + 'InsertExpression' => 'classes/db/queryparts/expression/InsertExpression.class.php', + 'SelectExpression' => 'classes/db/queryparts/expression/SelectExpression.class.php', + 'StarExpression' => 'classes/db/queryparts/expression/StarExpression.class.php', + 'UpdateExpression' => 'classes/db/queryparts/expression/UpdateExpression.class.php', + 'UpdateExpressionWithoutArgument' => 'classes/db/queryparts/expression/UpdateExpressionWithoutArgument.class.php', + 'Limit' => 'classes/db/queryparts/limit/Limit.class.php', + 'OrderByColumn' => 'classes/db/queryparts/order/OrderByColumn.class.php', + 'CubridTableWithHint' => 'classes/db/queryparts/table/CubridTableWithHint.class.php', + 'IndexHint' => 'classes/db/queryparts/table/IndexHint.class.php', + 'JoinTable' => 'classes/db/queryparts/table/JoinTable.class.php', + 'MssqlTableWithHint' => 'classes/db/queryparts/table/MssqlTableWithHint.class.php', + 'MysqlTableWithHint' => 'classes/db/queryparts/table/MysqlTableWithHint.class.php', + 'Table' => 'classes/db/queryparts/table/Table.class.php', + 'DisplayHandler' => 'classes/display/DisplayHandler.class.php', + 'HTMLDisplayHandler' => 'classes/display/HTMLDisplayHandler.php', + 'JSCallbackDisplayHandler' => 'classes/display/JSCallbackDisplayHandler.php', + 'JSONDisplayHandler' => 'classes/display/JSONDisplayHandler.php', + 'VirtualXMLDisplayHandler' => 'classes/display/VirtualXMLDisplayHandler.php', + 'XMLDisplayHandler' => 'classes/display/XMLDisplayHandler.php', + 'EditorHandler' => 'classes/editor/EditorHandler.class.php', + 'ExtraVar' => 'classes/extravar/Extravar.class.php', + 'FileHandler' => 'classes/file/FileHandler.class.php', + 'FileObject' => 'classes/file/FileObject.class.php', + 'FrontEndFileHandler' => 'classes/frontendfile/FrontEndFileHandler.class.php', + 'Handler' => 'classes/handler/Handler.class.php', + 'XEHttpRequest' => 'classes/httprequest/XEHttpRequest.class.php', + 'Mail' => 'classes/mail/Mail.class.php', + 'Mobile' => 'classes/mobile/Mobile.class.php', + 'ModuleHandler' => 'classes/module/ModuleHandler.class.php', + 'ModuleObject' => 'classes/module/ModuleObject.class.php', + 'Object' => 'classes/object/Object.class.php', + 'PageHandler' => 'classes/page/PageHandler.class.php', + 'EmbedFilter' => 'classes/security/EmbedFilter.class.php', + 'IpFilter' => 'classes/security/IpFilter.class.php', + 'Password' => 'classes/security/Password.class.php', + 'Purifier' => 'classes/security/Purifier.class.php', + 'Security' => 'classes/security/Security.class.php', + 'UploadFileFilter' => 'classes/security/UploadFileFilter.class.php', + 'TemplateHandler' => 'classes/template/TemplateHandler.class.php', + 'Validator' => 'classes/validator/Validator.class.php', + 'WidgetHandler' => 'classes/widget/WidgetHandler.class.php', + 'GeneralXmlParser' => 'classes/widget/GeneralXmlParser.class.php', + 'Xml_Node_' => 'classes/xml/XmlParser.class.php', + 'XmlGenerator' => 'classes/xml/XmlGenerator.class.php', + 'XmlJsFilter' => 'classes/xml/XmlJsFilter.class.php', + 'XmlLangParser' => 'classes/xml/XmlLangParser.class.php', + 'XmlParser' => 'classes/xml/XmlParser.class.php', + 'XmlQueryParser' => 'classes/xml/XmlQueryParser.class.php', + 'DBParser' => 'classes/xml/xmlquery/DBParser.class.php', + 'QueryParser' => 'classes/xml/xmlquery/QueryParser.class.php', + 'Argument' => 'classes/xml/xmlquery/argument/Argument.class.php', + 'ConditionArgument' => 'classes/xml/xmlquery/argument/ConditionArgument.class.php', + 'SortArgument' => 'classes/xml/xmlquery/argument/SortArgument.class.php', + 'DefaultValue' => 'classes/xml/xmlquery/queryargument/DefaultValue.class.php', + 'QueryArgument' => 'classes/xml/xmlquery/queryargument/QueryArgument.class.php', + 'SortQueryArgument' => 'classes/xml/xmlquery/queryargument/SortQueryArgument.class.php', + 'QueryArgumentValidator' => 'classes/xml/xmlquery/queryargument/validator/QueryArgumentValidator.class.php', + 'ColumnTag' => 'classes/xml/xmlquery/tags/column/ColumnTag.class.php', + 'InsertColumnTag' => 'classes/xml/xmlquery/tags/column/InsertColumnTag.class.php', + 'InsertColumnTagWithoutArgument' => 'classes/xml/xmlquery/tags/column/InsertColumnTagWithoutArgument.class.php', + 'InsertColumnsTag' => 'classes/xml/xmlquery/tags/column/InsertColumnsTag.class.php', + 'SelectColumnTag' => 'classes/xml/xmlquery/tags/column/SelectColumnTag.class.php', + 'SelectColumnsTag' => 'classes/xml/xmlquery/tags/column/SelectColumnsTag.class.php', + 'UpdateColumnTag' => 'classes/xml/xmlquery/tags/column/UpdateColumnTag.class.php', + 'UpdateColumnsTag' => 'classes/xml/xmlquery/tags/column/UpdateColumnsTag.class.php', + 'ConditionGroupTag' => 'classes/xml/xmlquery/tags/condition/ConditionGroupTag.class.php', + 'ConditionTag' => 'classes/xml/xmlquery/tags/condition/ConditionTag.class.php', + 'ConditionsTag' => 'classes/xml/xmlquery/tags/condition/ConditionsTag.class.php', + 'JoinConditionsTag' => 'classes/xml/xmlquery/tags/condition/JoinConditionsTag.class.php', + 'GroupsTag' => 'classes/xml/xmlquery/tags/group/GroupsTag.class.php', + 'IndexTag' => 'classes/xml/xmlquery/tags/navigation/IndexTag.class.php', + 'LimitTag' => 'classes/xml/xmlquery/tags/navigation/LimitTag.class.php', + 'NavigationTag' => 'classes/xml/xmlquery/tags/navigation/NavigationTag.class.php', + 'QueryTag' => 'classes/xml/xmlquery/tags/query/QueryTag.class.php', + 'HintTableTag' => 'classes/xml/xmlquery/tags/table/HintTableTag.class.php', + 'TableTag' => 'classes/xml/xmlquery/tags/table/TableTag.class.php', + 'TablesTag' => 'classes/xml/xmlquery/tags/table/TablesTag.class.php', + ), CASE_LOWER); + + function __xe_autoload($class_name) + { + $class_name = strtolower($class_name); + if(isset($GLOBALS['__xe_autoload_file_map'][$class_name])) + { + require _XE_PATH_ . $GLOBALS['__xe_autoload_file_map'][$class_name]; + } + elseif(preg_match('/^([a-z0-9_]+?)(admin)?(view|controller|model|api|wap|mobile)?$/i', $class_name, $matches)) + { + $candidate_filename = 'modules/' . $matches[1] . '/' . $matches[1] . ($matches[2] ? '.admin' : '') . ($matches[3] ? ('.' . $matches[3]) : '.class') . '.php'; + if(file_exists(_XE_PATH_ . $candidate_filename)) + { + require _XE_PATH_ . $candidate_filename; + } + } + } + spl_autoload_register('__xe_autoload'); + if(__DEBUG__) $GLOBALS['__elapsed_class_load__'] = getMicroTime() - __ClassLoadStartTime__; }