fe804da962d99e75aa778cfd8254c3a01dedf679
[mtweb] / web / app / mods / admin / plugins.php
1 <?php
2
3   class mw_admin_plugins extends mw_mod
4   {
5     var $plugins;
6
7     function validate(&$env)
8     { if(($this->plugins = $env->plugins("DESC")) === false) return "impossible de lire la liste des plugins";
9       return true;
10     }
11
12     function index(&$env)
13     { if($this->plugins !== false)
14       { if($_POST)
15         { $OK = true;
16           foreach($this->plugins as $plugin_name => $plugin)
17           { if(isset($_POST["priorite_".$plugin_name]))
18             { $this->plugins[$plugin_name]["priorite"] = $_POST["priorite_".$plugin_name];
19               if(!preg_match("/^[0-9]+(\.[0-9]+)?$/", $_POST["priorite_".$plugin_name]))
20               { $env->message("les priorit&eacute;s des plugins doivent &ecirc;tre des nombres");
21                 $OK = false;
22                 break;
23               }
24             }
25             else $this->plugins[$plugin_name]["priorite"] = 0;
26           }
27           if($OK)
28           { foreach($this->plugins as $plugin_name => $plugin)
29             { $plugin_data = array
30               ( "installed" => $this->plugins[$plugin_name]["installed"],
31                 "enabled" => $this->plugins[$plugin_name]["enabled"],
32                 "priorite" => $this->plugins[$plugin_name]["priorite"]
33               );
34               if(!$env->set_plugin_data($plugin_name, $plugin_data))
35               { $env->erreur("impossible de mettre &agrave; jour la priorit&eacute; du plugin ".$plugin_name);
36                 $OK = false;
37                 break;
38               }
39             }
40             if($OK)
41             { $env->redirect
42               ( $env->url("admin/plugins/index"),
43                 "les priorit&eacute;s des plugins ont &eacute;t&eacute; enregistr&eacute;es"
44               );
45             }
46           }
47         }
48         $env->set_out("plugins", $this->plugins);
49       }
50       else $env->erreur("impossible de lire la liste des plugins");
51     }
52
53     function install(&$env)
54     { $plugin_name = $_GET[$env->param("id")];
55       if(isset($this->plugins[$plugin_name]))
56       { $impl = $this->plugins[$plugin_name]["impl"];
57         $res = $impl->install($env);
58         if($res === true)
59         { $plugin_data = array
60           ( "installed" => true,
61             "enabled" => false,
62             "priorite" => isset($this->plugins[$plugin_name]["priorite"]) ? $this->plugins[$plugin_name]["priorite"] : 0
63           );
64           if($env->set_plugin_data($plugin_name, $plugin_data))
65           { $env->redirect
66             ( $env->url("admin/plugins/index"),
67               "le plugin a &eacute;t&eacute; install&eacute;"
68             );
69           }
70           else $env->erreur("impossible de mettre &agrave; jour le statut du plugin ".$plugin_name);
71         }
72         else $env->erreur("erreur lors de l'installation du plugin ".$plugin_name."<br>".$res);
73       }
74       else $env->erreur("impossible de trouver le plugin ".$plugin_name);
75     }
76
77     function uninstall(&$env)
78     { $plugin_name = $_GET[$env->param("id")];
79       if(isset($this->plugins[$plugin_name]))
80       { $impl = $this->plugins[$plugin_name]["impl"];
81         $res= $impl->uninstall($env);
82         if($res === true)
83         { $plugin_data = array
84           ( "installed" => false,
85             "enabled" => false,
86             "priorite" => isset($this->plugins[$plugin_name]["priorite"]) ? $this->plugins[$plugin_name]["priorite"] : 0
87           );
88           if($env->set_plugin_data($plugin_name, $plugin_data))
89           { $env->redirect
90             ( $env->url("admin/plugins/index"),
91               "le plugin a &eacute;t&eacute; d&eacute;sinstall&eacute;"
92             );
93           }
94           else $env->erreur("impossible de mettre &agrave; jour le statut du plugin ".$plugin_name);
95         }
96         else $env->erreur("erreur lors de la d&eacute;sinstallation du plugin ".$plugin_name."<br>".$res);
97       }
98       else $env->erreur("impossible de trouver le plugin ".$plugin_name);
99     }
100
101     function enable(&$env)
102     { $plugin_name = $_GET[$env->param("id")];
103       if(isset($this->plugins[$plugin_name]))
104       { if($this->plugins[$plugin_name]["installed"])
105         { if(!$this->plugins[$plugin_name]["enabled"])
106           { $impl = $this->plugins[$plugin_name]["impl"];
107             $res = $impl->enable($env);
108             if($res === true)
109             { $plugin_data = array
110               ( "installed" => true,
111                 "enabled" => true,
112                 "priorite" => isset($this->plugins[$plugin_name]["priorite"]) ? $this->plugins[$plugin_name]["priorite"] : 0
113               );
114               if($env->set_plugin_data($plugin_name, $plugin_data))
115               { $env->redirect
116                 ( $env->url("admin/plugins/index"),
117                   "le plugin a &eacute;t&eacute; activ&eacute;"
118                 );
119               }
120               else $env->erreur("impossible de mettre &agrave; jour le statut du plugin ".$plugin_name);
121             }
122             else $env->erreur("erreur lors de l'activation du plugin ".$plugin_name."<br>".$res);
123           }
124           else $env->erreur("le plugin ".$plugin_name." est d&eacute;j&agrave; actif");
125         }
126         else $env->erreur("le plugin ".$plugin_name." n'est pas install&eacute;");
127       }
128       else $env->erreur("impossible de trouver le plugin ".$plugin_name);
129     }
130
131     function disable(&$env)
132     { $plugin_name = $_GET[$env->param("id")];
133       if(isset($this->plugins[$plugin_name]))
134       { if($this->plugins[$plugin_name]["installed"])
135         { if($this->plugins[$plugin_name]["enabled"])
136           { $impl = $this->plugins[$plugin_name]["impl"];
137             $res = $impl->disable($env);
138             if($res === true)
139             { $plugin_data = array
140               ( "installed" => true,
141                 "enabled" => false,
142                 "priorite" => isset($this->plugins[$plugin_name]["priorite"]) ? $this->plugins[$plugin_name]["priorite"] : 0
143               );
144               if($env->set_plugin_data($plugin_name, $plugin_data))
145               { $env->redirect
146                 ( $env->url("admin/plugins/index"),
147                   "le plugin a &eacute;t&eacute; d&eacute;sactiv&eacute;"
148                 );
149               }
150               else $env->erreur("impossible de mettre &agrave; jour le statut du plugin ".$plugin_name);
151             }
152             else $env->erreur("erreur lors de la d&eacute;sactivation du plugin ".$plugin_name."<br>".$res);
153           }
154           else $env->erreur("le plugin ".$plugin_name." est d&eacute;j&agrave; inactif");
155         }
156         else $env->erreur("le plugin ".$plugin_name." n'est pas install&eacute;");
157       }
158       else $env->erreur("impossible de trouver le plugin ".$plugin_name);
159     }
160
161   }
162
163 ?>