X-Git-Url: http://git.dj3c1t.com/?a=blobdiff_plain;f=mw%2Fenv%2Fmodules%2Fmw_env_plugins.php;h=b8c2854bc3c36458a00d6331802a6e9c7a3a6d83;hb=refs%2Fheads%2Fmaster;hp=1df183466dc47d463cacbfd5ec5d991d24921136;hpb=36ed114046cbe3d72a3589230e9f306a54fcc79d;p=mtweb diff --git a/mw/env/modules/mw_env_plugins.php b/mw/env/modules/mw_env_plugins.php index 1df1834..b8c2854 100644 --- a/mw/env/modules/mw_env_plugins.php +++ b/mw/env/modules/mw_env_plugins.php @@ -2,99 +2,130 @@ class mw_env_plugins extends mw_env{ - var $plugins_asc; - var $plugins_desc; + public $plugins_asc; + public $plugins_desc; - function plugins($PRIORITE = "ASC"){ - $this->init_plugins($PRIORITE); + public function plugins($PRIORITE = "ASC"){ + if(!isset($this->plugins_asc) || !isset($this->plugins_desc)){ + return false; + } if($PRIORITE == "ASC") return $this->plugins_asc; if($PRIORITE == "DESC") return $this->plugins_desc; return false; } + public function plugin($plugin_name){ + if(!isset($this->plugins_asc) || isset($this->plugins_desc)){ + return false; + } + if(!isset($this->plugins_asc[$plugin_name])){ + return false; + } + return $this->plugins_asc[$plugin_name]; + } + # --------------------------------------------------------------------------------- # init # - function init_plugins($PRIORITE = "ASC"){ - if(isset($this->plugins_asc) || isset($this->plugins_desc)){ - if($PRIORITE == "ASC"){ - if(!isset($this->plugins_asc)) $this->plugins_asc = $this->ordonne_plugins($this->plugins_desc, $PRIORITE); - } - elseif($PRIORITE == "DESC"){ - if(!isset($this->plugins_desc)) $this->plugins_desc = $this->ordonne_plugins($this->plugins_asc, $PRIORITE); - } - return; + public function load_plugins($RELOAD = false){ + if(!$RELOAD && isset($this->plugins_asc) && isset($this->plugins_desc)){ + return true; } - $plugins = array(); - if(!class_exists("mw_plugin")){ - require $this->path("mw_dir")."plugins/mw_plugin.php"; - if(!class_exists("mw_plugin")){ - $plugins = false; - return; + $this->plugins_asc = array(); + $this->plugins_desc = array(); + if(!($dh = opendir($this->path("mw_dir")."plugins/"))){ + return false; + } + $OK = true; + while($OK && ($plugin_name = readdir($dh)) !== false){ + if(substr($plugin_name, 0 ,1) !== "." && is_dir($this->path("mw_dir")."plugins/".$plugin_name)){ + if(($plugin = $this->load_plugin($plugin_name)) === false){ + $OK = false; + } } } - if($dh = opendir($this->path("mw_dir")."plugins/")){ - $OK = true; - while($OK && ($plugin_name = readdir($dh)) !== false){ - if(substr($plugin_name, 0 ,1) !== "." && is_dir($this->path("mw_dir")."plugins/".$plugin_name)){ - if(!isset($plugins[$plugin_name])){ - if(($plugin = $this->plugin_data($plugin_name)) !== false){ - $MAJ = false; - if(!isset($plugin["installed"]) || !isset($plugin["enabled"])){ - $plugin["installed"] = false; - $plugin["enabled"] = false; - $plugin["priorite"] = 0; - $MAJ = true; - } - if(!$plugin["installed"] && $plugin["enabled"]){ - $plugin["enabled"] = false; - $MAJ = true; - } - if($MAJ) $OK = $this->set_plugin_data($plugin_name, $plugin); - if($OK){ - if(($plugin["impl"] = $this->plugin_impl($plugin_name)) !== false){ - $plugin["title"] = ($plugin_title = $this->plugin_call($plugin["impl"], "title")) ? $plugin_title : ""; - $plugin["description"] = ($plugin_description = $this->plugin_call($plugin["impl"], "description")) ? $plugin_description : ""; - $plugin["name"] = $plugin_name; - $plugins[$plugin_name] = $plugin; - } - } - } - else $OK = false; - } + closedir($dh); + if(!$OK){ + return false; + } + if(($plugins = $this->plugins()) === false){ + return false; + } + if(file_exists($this->plugins_data_dir()) && is_dir($this->plugins_data_dir())){ + if(!($dh = opendir($this->plugins_data_dir()))){ + return false; + } + while(($plugin_name = readdir($dh)) !== false){ + if(substr($plugin_name, 0 ,1) != "." && !is_dir($this->plugin_data_file($plugin_name))){ + if(!isset($plugins[$plugin_name])) $this->del_plugin_data($plugin_name); } - if(!$OK) $plugins = false; } closedir($dh); - if($plugins !== false){ - if(file_exists($this->plugins_data_dir()) && is_dir($this->plugins_data_dir())){ - if($dh = opendir($this->plugins_data_dir())){ - $plugins_data_files = array(); - $OK = true; - while($OK && ($plugin_name = readdir($dh)) !== false){ - if(substr($plugin_name, 0 ,1) != "." && !is_dir($this->plugin_data_file($plugin_name))){ - if(!isset($plugins[$plugin_name])) $this->del_plugin_data($plugin_name); - } - if(!$OK) $plugins = false; - } - closedir($dh); - } - } + } + return true; + } + + public function load_plugin($plugin_name){ + if(substr($plugin_name, 0 ,1) == "." || !is_dir($this->path("mw_dir")."plugins/".$plugin_name)){ + return false; + } + if(($plugin = $this->plugin_data($plugin_name)) === false){ + return false; + } + if(($plugin["impl"] = $this->plugin_impl($plugin_name)) === false){ + return false; + } + $MAJ = false; + if(!isset($plugin["installed"]) || !isset($plugin["enabled"])){ + $plugin["installed"] = false; + $plugin["enabled"] = false; + $plugin["priorite"] = 0; + $MAJ = true; + } + if(!$plugin["installed"] && $plugin["enabled"]){ + $plugin["enabled"] = false; + $MAJ = true; + } + if($MAJ){ + if(!$this->set_plugin_data($plugin_name, $plugin)){ + return false; } } - else $plugins = false; - if($plugins !== false){ - if($PRIORITE == "ASC") $this->plugins_asc = $this->ordonne_plugins($plugins, $PRIORITE); - elseif($PRIORITE == "DESC") $this->plugins_desc = $this->ordonne_plugins($plugins, $PRIORITE); + $plugin["title"] = ($plugin_title = $this->plugin_call($plugin["impl"], "title")) ? $plugin_title : ""; + $plugin["description"] = ($plugin_description = $this->plugin_call($plugin["impl"], "description")) ? $plugin_description : ""; + $plugin["name"] = $plugin_name; + if(!isset($this->plugins_asc)) $this->plugins_asc = array(); + $this->plugins_asc[$plugin_name] = $plugin; + $this->plugins_asc = $this->ordonne_plugins($this->plugins_asc, "ASC"); + $this->plugins_desc = $this->ordonne_plugins($this->plugins_asc, "DESC"); + return $plugin; + } + + public function plugins_loaded(){ + if(($plugins = $this->plugins()) === false){ + return; } - else{ - $this->plugins_asc = false; - $this->plugins_desc = false; + foreach($plugins as $plugin_name => $plugin){ + $plugin["impl"]->loaded($this); } } - function ordonne_plugins($plugins, $PRIORITE = "ASC"){ + public function init_plugins(){ + if($this->bdd_ready() !== true) return; + if(($plugins = $this->plugins("DESC")) === false){ + $this->erreur("erreur lors de l'initialisation des plugins", true); + } + foreach($plugins as $plugin_name => $plugin){ + if($plugin["installed"] && $plugin["enabled"]){ + if(!$plugin["impl"]->init($this)){ + $this->erreur("erreur lors de l'initialisation du plugin ".$plugin_name, true); + } + } + } + } + + public function ordonne_plugins($plugins, $PRIORITE = "ASC"){ $values = array_values($plugins); $maximum = count($values); while($maximum > 0){ @@ -117,7 +148,7 @@ return $res; } - function plugin_call($impl, $method){ + public function plugin_call($impl, $method){ if(method_exists($impl, $method)) return $impl->$method($this); } @@ -125,12 +156,14 @@ # impl # - function plugin_impl($plugin_name){ + public function plugin_impl($plugin_name){ $plugin = false; if(file_exists($this->path("mw_dir")."plugins")){ if(substr($plugin_name, 0 ,1) !== "." && is_dir($this->path("mw_dir")."plugins/".$plugin_name)){ if(file_exists($this->path("mw_dir")."plugins/".$plugin_name."/".$plugin_name.".php")){ - require $this->path("mw_dir")."plugins/".$plugin_name."/".$plugin_name.".php"; + if(!class_exists($plugin_name)){ + require_once $this->path("mw_dir")."plugins/".$plugin_name."/".$plugin_name.".php"; + } if(class_exists($plugin_name)){ $plugin = new $plugin_name(); } @@ -144,15 +177,15 @@ # data # - function plugins_data_dir(){ + public function plugins_data_dir(){ return $this->path("content")."data/plugins/"; } - function plugin_data_file($plugin_name){ + public function plugin_data_file($plugin_name){ return $this->plugins_data_dir().$plugin_name; } - function plugin_data($plugin_name){ + public function plugin_data($plugin_name){ $data_file = $this->plugin_data_file($plugin_name); $data = array(); if(file_exists($data_file)){ @@ -163,7 +196,9 @@ return $data; } - function set_plugin_data($plugin_name, $data){ + public function set_plugin_data($plugin_name, $data){ + if(!is_dir($this->plugins_data_dir())) @mkdir($this->plugins_data_dir()); + if(!is_dir($this->plugins_data_dir())) return false; $data_file = $this->plugin_data_file($plugin_name); $content = serialize($data); $OK = false; @@ -176,7 +211,7 @@ return $OK; } - function del_plugin_data($plugin_name){ + public function del_plugin_data($plugin_name){ $data_file = $this->plugin_data_file($plugin_name); if(file_exists($data_file)) return @unlink($data_file); return true; @@ -184,4 +219,41 @@ } -?> \ No newline at end of file + // ------------------------------------------------------------------------------------------- + // class mw_plugin + // + + abstract class mw_plugin{ + + public function title(){ + return "(sans titre)"; + } + + public function description(){ + return ""; + } + + public function loaded($env){ + } + + public function install($env){ + return true; + } + + public function uninstall($env){ + return true; + } + + public function enable($env){ + return true; + } + + public function disable($env){ + return true; + } + + public function init($env){ + return true; + } + + }