helpers = false; $helpers_files = array(); if(($plugins = $this->plugins()) !== false){ foreach($plugins as $plugin_name => $plugin){ $helpers_path = $this->path("mw_dir")."plugins/".$plugin_name."/app/helpers/"; if( $plugin["installed"] && $plugin["enabled"] && file_exists($helpers_path) && is_dir($helpers_path) ){ if($dh = opendir($helpers_path)){ while(($file = readdir($dh)) !== false){ if( substr($file, 0, 1) != "." && !is_dir($helpers_path.$file) && strcmp(substr($file, -4), ".php") == 0 && !isset($helpers_files[$file]) ) $helpers_files[$file] = $helpers_path; } closedir($dh); } else return false; } } $helpers_path = $this->path("mw_dir")."app/helpers/"; if( file_exists($helpers_path) && is_dir($helpers_path) ){ if($dh = opendir($helpers_path)){ while(($file = readdir($dh)) !== false){ if( substr($file, 0, 1) != "." && !is_dir($helpers_path.$file) && strcmp(substr($file, -4), ".php") == 0 && !isset($helpers_files[$file]) ) $helpers_files[$file] = $helpers_path; } closedir($dh); } else return false; } } $this->helpers = array(); foreach($helpers_files as $file => $helpers_path){ $this->helpers[substr($file, 0, -4)] = array("file" => $helpers_path.$file); } return true; } public function helper($helper_name){ if(!isset($this->helpers)) $this->init_helpers(); if($this->helpers === false || !isset($this->helpers[$helper_name])) return false; if(!isset($this->helpers[$helper_name]["file"])) return false; if($this->init_helper($helper_name)) return $this->helpers[$helper_name]["impl"]; return false; } public function init_helper($helper_name){ if(!isset($this->helpers[$helper_name]["impl"])){ if(!class_exists($helper_name)){ if( !isset($this->helpers[$helper_name]["file"]) || !$this->helpers[$helper_name]["file"] || !file_exists($this->helpers[$helper_name]["file"]) ) return false; require_once $this->helpers[$helper_name]["file"]; if(!class_exists($helper_name)) return false; } $this->helpers[$helper_name]["impl"] = new $helper_name(); $this->helpers[$helper_name]["impl"]->set_env($this); return true; } if($this->helpers[$helper_name]["impl"] === false) return false; return true; } } // ------------------------------------------------------------------------------------------- // class mw_helper // abstract class mw_helper{ public $env; public function set_env(&$env){ $this->env = &$env; } public function env(){ return $this->env; } }