<?php
spl_autoload_register("AutoLoader::autoLoad");
class AutoLoader {
/*
* In a tinyMVC application, classes will be found in
* <project>/app/controllers
* tinyMVC/lib
* tinyMVC/vendors/<vendor>
*
* Obviously, in a tinyMVC application is written so that classes appear
* in other directories, then this class may have to be modified.
*/
static function autoLoad($class) {
if(self::tinyMVC($class)) return true;
else if(self::ezsql($class)) return true;
else if(self::tbs($class)) return true;
else if(self::zendStyle($class)) return true ;
else if(self::sufix($class)) return true ;
else if(self::allDir($class)) return true ;
else if(self::allDirExt($class)) return true ;
else if(self::nonSense($class)) return true ;
else throw new Exception("Class ".$class." not found!");
return false;
}
static function tinyMVC($class) {
$paths = array();
$paths[] = PROJECT_ROOT_DIR . 'app' . DS . 'controllers';
$paths[] = PROJECT_ROOT_DIR . 'app' . DS . 'models';
$paths[] = PROJECT_ROOT_DIR . 'app' . DS . 'installers';
$paths[] = TINY_MVC_DIR . 'lib';
$dir = opendir(TINY_MVC_DIR.'vendor'.DS);
while($file = readdir($dir)) {
$file_path = TINY_MVC_DIR . 'vendor' . DS . $file ;
if($file == "." or $file == "..") continue ;
if(!is_dir($file_path)) continue;
$paths[] = $file_path;
$dir1 = opendir($file_path);
while($file = readdir($dir1)) {
$next_path = $file_path.DS.$file;
if($file == "." or $file == "..") continue ;
if(!is_dir($next_path)) continue;
$paths[] = $next_path;
}
}
foreach($paths as $prefix){
$path[0] = $prefix . DS . $class . '.php';
$path[1] = $prefix . DS . $class . '.class.php';
$path[2] = $prefix . DS . 'class.' . $class . '.php';
$path[3] = $prefix . DS . strtolower($class) . '.php';
$path[4] = $prefix . DS . strtolower($class) . '.class.php';
$path[5] = $prefix . DS . 'class.' . strtolower($class) . '.php';
foreach($path as $thisPath){
if(file_exists($thisPath)){
require_once $thisPath;
return true;
}
}
}
return false;
}
static function ezsql($class) {
if(substr($class,0,5) != 'ezSQL') return false;
$paths = array();
$class_parts = explode('_',$class);
$file_name = 'ez_sql_' . $class_parts[1];
$path = TINY_MVC_DIR.'vendor'.DS.'ez_sql'.DS;
$dir = opendir($path);
while($file = readdir($dir)) {
if($file == "." or $file == "..") continue ;
$file = $path . $file;
if(!is_dir($file)) continue;
$paths[] = $file;
}
clearstatcache();
foreach($paths as $prefix){
$thisPath = $prefix . DS . $file_name . '.php';
if(file_exists($thisPath)){
$core = TINY_MVC_DIR . 'vendor' . DS . 'ez_sql' . DS . 'shared' . DS . 'ez_sql_core.php';
require_once $core;
require_once $thisPath;
return true;
}
}
return false;
}
static function tbs($class) {
$path = TINY_MVC_DIR.'vendor'.DS.'tbs'.DS;
if($class == 'clsTinyButStrong') {
$file = $path . 'tbs_class_php5.php';
if(file_exists($file)) {
$file = $path . 'plugins' .DS . 'tbs_plugin_ezsql.php';
if(file_exists($file)) require_once $file;
$file = $path . 'plugins' .DS . 'tbsdb_pdo.php';
if(file_exists($file)) require_once $file;
$file = $path . 'plugins' .DS . 'tbs_plugin_html.php';
if(file_exists($file)) require_once $file;
$file = $path . 'plugins' .DS . 'tbs_plugin_bypage.php';
if(file_exists($file)) require_once $file;
$file = $path . 'plugins' .DS . 'tbs_plugin_cache.php';
if(file_exists($file)) require_once $file;
$file = $path . 'plugins' .DS . 'tbs_plugin_mergeonfly.php';
if(file_exists($file)) require_once $file;
$file = $path . 'plugins' .DS . 'tbs_plugin_navbar.php';
if(file_exists($file)) require_once $file;
$file = $path . 'plugins' .DS . 'tbsdb_csv_php5.php';
if(file_exists($file)) require_once $file;
$file = $path . 'plugins' .DS . 'opentbs' . DS . 'tbs_plugin_opentbs.php';
if(file_exists($file)) require_once $file;
$file = $path . 'tbs_class_php5.php';
require_once $file;
return true;
}
}
return false;
}
static function zendStyle($class) {
$p = explode("_",$class);
$file = implode(DS,$p).".php";
if(!file_exists($file)) return false;
include $file;
return true ;
}
static function sufix($class) {
if (!preg_match("#(Model|View|Controller)#i", $class, $fragment)) {
return false ;
}
$class = substr($class, 0, strlen($class)-strlen($fragment[1]));
$sufix = $fragment[1];
$file = $sufix.DS.$class.".php";
if(file_exists($file)) {
include $file ;
return true ;
}
return false ;
}
static function allDir($class){
if(self::findClass($class,".")) return true ;
else return false;
}
static function findClass($class,$dir) {
$ponteiro = opendir($dir);
while($file = readdir($ponteiro)) {
$file_path = $dir.DS.$file ;
if($file == "." or $file == "..") {
continue ;
} else if(is_dir($file_path)) {
if(self::findClass($class,$file_path)) {
return true ;
}
} else if($file == $class.".php") {
include $file_path ;
return true ;
}
}
return false ;
}
static function allDirExt($class) {
if(self::findClassExt($class,".")) return true ;
else return false;
}
static function findClassExt($class,$dir) {
$ponteiro = opendir($dir);
while($file = readdir($ponteiro)) {
$file_path = $dir.DS.$file ;
if($file == "." or $file == "..") {
continue ;
} else if(is_dir($file_path)) {
if(self::findClassExt($class,$file_path)) {
return true ;
}
} else if($file == $class.".class.php") {
include $file_path ;
return true ;
}
}
return false ;
}
static function nonSense($class) {
if(self::findClassNonSense($class,".")) return true ;
else return false;
}
static function findClassNonSense($class,$dir) {
$ponteiro = opendir($dir);
while($file = readdir($ponteiro)) {
$file_path = $dir.DS.$file ;
if($file[0] == "." or $file == "..") {
continue ;
} else if(is_dir($file_path)) {
if(self::findClassNonSense($class,$file_path)) {
return true ;
}
} else {
//$content = file_get_contents( $file_path );
//$pattern = "/class[\s]+".$class."[\s|{]/i";
$file = file($file_path);
$pattern = "/^[\s]*class[\s]+".$class."[\s|{]/i";
if(count($file) >= 1){
foreach($file as $content){
if(preg_match($pattern,$content)) {
include $file_path;
return true;
}
}
}
}
}
return false ;
}
}
?>
|