reorganisation init
[mtweb] / mw / env / modules / mw_env_plugins.php
index 286060f..b8c2854 100644 (file)
     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);
+          }
+        }
       }
     }
 
       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
     #