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