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=fefbd04cdec4dfb07c6fbf64435405e9b10607a8;hpb=abc64414fdac6533c011c28b53cba6d28dee4f2a;p=mtweb diff --git a/mw/env/modules/mw_env_plugins.php b/mw/env/modules/mw_env_plugins.php index fefbd04..b8c2854 100644 --- a/mw/env/modules/mw_env_plugins.php +++ b/mw/env/modules/mw_env_plugins.php @@ -2,92 +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", $RELOAD = false){ - if(!$RELOAD && (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); + public function load_plugins($RELOAD = false){ + if(!$RELOAD && isset($this->plugins_asc) && isset($this->plugins_desc)){ + return true; + } + $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; + } } - return; } - $plugins = array(); - 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; + } + foreach($plugins as $plugin_name => $plugin){ + $plugin["impl"]->loaded($this); } - else{ - $this->plugins_asc = false; - $this->plugins_desc = false; + } + + 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); + } + } } } - function ordonne_plugins($plugins, $PRIORITE = "ASC"){ + public function ordonne_plugins($plugins, $PRIORITE = "ASC"){ $values = array_values($plugins); $maximum = count($values); while($maximum > 0){ @@ -110,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); } @@ -118,7 +156,7 @@ # 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)){ @@ -139,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)){ @@ -158,7 +196,7 @@ 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); @@ -173,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; @@ -181,36 +219,41 @@ } - class mw_plugin{ + // ------------------------------------------------------------------------------------------- + // class mw_plugin + // + + abstract class mw_plugin{ - function title(){ + public function title(){ return "(sans titre)"; } - function description(){ + public function description(){ return ""; } - function install($env){ + public function loaded($env){ + } + + public function install($env){ return true; } - function uninstall($env){ + public function uninstall($env){ return true; } - function enable($env){ + public function enable($env){ return true; } - function disable($env){ + public function disable($env){ return true; } - function init($env){ + public function init($env){ return true; } } - -?> \ No newline at end of file