3 class mw_env_plugins extends mw_env{
8 public function plugins($PRIORITE = "ASC"){
9 if(!isset($this->plugins_asc) || !isset($this->plugins_desc)){
12 if($PRIORITE == "ASC") return $this->plugins_asc;
13 if($PRIORITE == "DESC") return $this->plugins_desc;
17 public function plugin($plugin_name){
18 if(!isset($this->plugins_asc) || isset($this->plugins_desc)){
21 if(!isset($this->plugins_asc[$plugin_name])){
24 return $this->plugins_asc[$plugin_name];
27 # ---------------------------------------------------------------------------------
31 public function load_plugins($RELOAD = false){
32 if(!$RELOAD && isset($this->plugins_asc) && isset($this->plugins_desc)){
35 $this->plugins_asc = array();
36 $this->plugins_desc = array();
37 if(!($dh = opendir($this->path("mw_dir")."plugins/"))){
41 while($OK && ($plugin_name = readdir($dh)) !== false){
42 if(substr($plugin_name, 0 ,1) !== "." && is_dir($this->path("mw_dir")."plugins/".$plugin_name)){
43 if(($plugin = $this->load_plugin($plugin_name)) === false){
52 if(($plugins = $this->plugins()) === false){
55 if(file_exists($this->plugins_data_dir()) && is_dir($this->plugins_data_dir())){
56 if(!($dh = opendir($this->plugins_data_dir()))){
59 while(($plugin_name = readdir($dh)) !== false){
60 if(substr($plugin_name, 0 ,1) != "." && !is_dir($this->plugin_data_file($plugin_name))){
61 if(!isset($plugins[$plugin_name])) $this->del_plugin_data($plugin_name);
69 public function load_plugin($plugin_name){
70 if(substr($plugin_name, 0 ,1) == "." || !is_dir($this->path("mw_dir")."plugins/".$plugin_name)){
73 if(($plugin = $this->plugin_data($plugin_name)) === false){
76 if(($plugin["impl"] = $this->plugin_impl($plugin_name)) === false){
80 if(!isset($plugin["installed"]) || !isset($plugin["enabled"])){
81 $plugin["installed"] = false;
82 $plugin["enabled"] = false;
83 $plugin["priorite"] = 0;
86 if(!$plugin["installed"] && $plugin["enabled"]){
87 $plugin["enabled"] = false;
91 if(!$this->set_plugin_data($plugin_name, $plugin)){
95 $plugin["title"] = ($plugin_title = $this->plugin_call($plugin["impl"], "title")) ? $plugin_title : "";
96 $plugin["description"] = ($plugin_description = $this->plugin_call($plugin["impl"], "description")) ? $plugin_description : "";
97 $plugin["name"] = $plugin_name;
98 if(!isset($this->plugins_asc)) $this->plugins_asc = array();
99 $this->plugins_asc[$plugin_name] = $plugin;
100 $this->plugins_asc = $this->ordonne_plugins($this->plugins_asc, "ASC");
101 $this->plugins_desc = $this->ordonne_plugins($this->plugins_asc, "DESC");
105 public function plugins_loaded(){
106 if(($plugins = $this->plugins()) === false){
109 foreach($plugins as $plugin_name => $plugin){
110 $plugin["impl"]->loaded($this);
114 public function init_plugins(){
115 if($this->bdd_ready() !== true) return;
116 if(($plugins = $this->plugins("DESC")) === false){
117 $this->erreur("erreur lors de l'initialisation des plugins", true);
119 foreach($plugins as $plugin_name => $plugin){
120 if($plugin["installed"] && $plugin["enabled"]){
121 if(!$plugin["impl"]->init($this)){
122 $this->erreur("erreur lors de l'initialisation du plugin ".$plugin_name, true);
128 public function ordonne_plugins($plugins, $PRIORITE = "ASC"){
129 $values = array_values($plugins);
130 $maximum = count($values);
132 $maximumTemporaire = 0;
133 for($i = 0; $i < $maximum - 1; $i++){
135 ($PRIORITE == "ASC" && $values[$i]["priorite"] > $values[$i + 1]["priorite"])
136 || ($PRIORITE == "DESC" && $values[$i]["priorite"] < $values[$i + 1]["priorite"])
139 $values[$i] = $values[$i + 1];
140 $values[$i + 1] = $tmp;
141 $maximumTemporaire = $i + 1;
144 $maximum = $maximumTemporaire;
147 foreach($values as $value) if($value["name"]) $res[$value["name"]] = $value;
151 public function plugin_call($impl, $method){
152 if(method_exists($impl, $method)) return $impl->$method($this);
155 # ---------------------------------------------------------------------------------
159 public function plugin_impl($plugin_name){
161 if(file_exists($this->path("mw_dir")."plugins")){
162 if(substr($plugin_name, 0 ,1) !== "." && is_dir($this->path("mw_dir")."plugins/".$plugin_name)){
163 if(file_exists($this->path("mw_dir")."plugins/".$plugin_name."/".$plugin_name.".php")){
164 if(!class_exists($plugin_name)){
165 require_once $this->path("mw_dir")."plugins/".$plugin_name."/".$plugin_name.".php";
167 if(class_exists($plugin_name)){
168 $plugin = new $plugin_name();
176 # ---------------------------------------------------------------------------------
180 public function plugins_data_dir(){
181 return $this->path("content")."data/plugins/";
184 public function plugin_data_file($plugin_name){
185 return $this->plugins_data_dir().$plugin_name;
188 public function plugin_data($plugin_name){
189 $data_file = $this->plugin_data_file($plugin_name);
191 if(file_exists($data_file)){
192 if($content = file_get_contents($data_file)){
193 $data = unserialize($content);
199 public function set_plugin_data($plugin_name, $data){
200 if(!is_dir($this->plugins_data_dir())) @mkdir($this->plugins_data_dir());
201 if(!is_dir($this->plugins_data_dir())) return false;
202 $data_file = $this->plugin_data_file($plugin_name);
203 $content = serialize($data);
205 if($fh = fopen($data_file, "w")){
206 if(fwrite($fh, $content) !== false){
214 public function del_plugin_data($plugin_name){
215 $data_file = $this->plugin_data_file($plugin_name);
216 if(file_exists($data_file)) return @unlink($data_file);
222 // -------------------------------------------------------------------------------------------
226 abstract class mw_plugin{
228 public function title(){
229 return "(sans titre)";
232 public function description(){
236 public function loaded($env){
239 public function install($env){
243 public function uninstall($env){
247 public function enable($env){
251 public function disable($env){
255 public function init($env){