X-Git-Url: http://git.dj3c1t.com/index.cgi?p=mtweb;a=blobdiff_plain;f=mw%2Fenv%2Fmodules%2Fmw_env_plugins.php;fp=mw%2Fenv%2Fmodules%2Fmw_env_plugins.php;h=b8c2854bc3c36458a00d6331802a6e9c7a3a6d83;hp=286060f35d628ef47b6552791533b4a408ae917f;hb=9ee7a4d6f88c5982c43dd7326030149cdd0ac251;hpb=92bc3e665cb27a998748e250097e8337f8865499 diff --git a/mw/env/modules/mw_env_plugins.php b/mw/env/modules/mw_env_plugins.php index 286060f..b8c2854 100644 --- a/mw/env/modules/mw_env_plugins.php +++ b/mw/env/modules/mw_env_plugins.php @@ -6,84 +6,122 @@ public $plugins_desc; public function plugins($PRIORITE = "ASC"){ - $this->init_plugins($PRIORITE); + 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 # - public 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); + } + } } } @@ -114,14 +152,6 @@ if(method_exists($impl, $method)) return $impl->$method($this); } - public function loaded_plugins(){ - if($plugins = $this->plugins()){ - foreach($plugins as $plugin_name => $plugin){ - $plugin["impl"]->loaded($this); - } - } - } - # --------------------------------------------------------------------------------- # impl #