* @package MCMS\System * @since 1.1.0.1 */ class MMAutoLoader extends \Mammut\StrictObject implements \Mammut\AutoLoader\iAutoLoader { private function __construct() { } public static function loadClass($className) { Logger::getInstance(__CLASS__)->trace('loadClass: '.$className); if(!strstartswith($className, 'MCMS\\_\\')) return; $ns = explode('\\', $className); if(!isset($ns[2])) throw new \InvalidArgumentException("Missing type part"); $basepath = false; $prefix = 'cls'; $type = strtolower($ns[2]); switch($type) { case 'com': case 'comx': $basepath = ($type == 'com') ? _COMPATH_ : _COMPATHX_; $prefix = 'com'; break; case 'mod': case 'modx': $prefix = 'mod'; $basepath = ($type == 'mod') ? _MODPATH_ : _MODPATHX_; foreach($ns as $nr=>&$part) { if($part == '_' && $nr > 2) { $part = '_lib_'; $prefix = 'cls'; } } break; case 'feat': case 'featx': $basepath = ($type == 'feat' ) ? _FEATUREPATH_ : _FEATUREPATHX_; foreach($ns as $nr=>&$part) if($part == '_') $part = '_lib_'; break; case 'plugin': case 'pluginx': $prefix = 'pin'; $basepath = ($type == 'plugin' ) ? _PLUGINPATH_ :_PLUGINPATHX_; foreach($ns as $nr=>&$part) if(strtolower($part) == '_admin_' && $nr > 2) { $prefix = 'mod'; } elseif($part == '_' && $nr > 2) { $prefix = 'cls'; $part = '_lib_'; } break; default: throw new \InvalidArgumentException("Unknown or unsupported type part '{$ns[2]}'"); } $i = count($ns) - 1; $ns[$i] = $prefix . '.' . strtolower($ns[$i]) . '.php'; unset($ns[0], $ns[1], $ns[2]); $filename = $basepath . __DS__ . strtolower(implode(__DS__, $ns)); Logger::getInstance(__CLASS__)->trace('filename to use: '.$filename); if(include_exists($filename)) { include ($filename); return true; } return false; } }