+<?php
+
+ class mw_admin_plugins extends mw_mod{
+
+ var $plugins;
+
+ function validate(&$env){
+ if(($this->plugins = $env->plugins("DESC")) === false) return "impossible de lire la liste des plugins";
+ return true;
+ }
+
+ function index(&$env){
+ if($this->plugins !== false){
+ if($_POST){
+ $OK = true;
+ foreach($this->plugins as $plugin_name => $plugin){
+ if(isset($_POST["priorite_".$plugin_name])){
+ $this->plugins[$plugin_name]["priorite"] = $_POST["priorite_".$plugin_name];
+ if(!preg_match("/^[0-9]+(\.[0-9]+)?$/", $_POST["priorite_".$plugin_name])){
+ $env->message("les priorités des plugins doivent être des nombres");
+ $OK = false;
+ break;
+ }
+ }
+ else $this->plugins[$plugin_name]["priorite"] = 0;
+ }
+ if($OK){
+ foreach($this->plugins as $plugin_name => $plugin){
+ $plugin_data = array(
+ "installed" => $this->plugins[$plugin_name]["installed"],
+ "enabled" => $this->plugins[$plugin_name]["enabled"],
+ "priorite" => $this->plugins[$plugin_name]["priorite"]
+ );
+ if(!$env->set_plugin_data($plugin_name, $plugin_data)){
+ $env->erreur("impossible de mettre à jour la priorité du plugin ".$plugin_name);
+ $OK = false;
+ break;
+ }
+ }
+ if($OK){
+ $env->redirect(
+ $env->url("admin/plugins/index"),
+ "les priorités des plugins ont été enregistrées"
+ );
+ }
+ }
+ }
+ $env->set_out("plugins", $this->plugins);
+ }
+ else $env->erreur("impossible de lire la liste des plugins");
+ }
+
+ function install(&$env){
+ $plugin_name = $_GET[$env->param("id")];
+ if(isset($this->plugins[$plugin_name])){
+ $impl = $this->plugins[$plugin_name]["impl"];
+ $res = $impl->install($env);
+ if($res === true){
+ $plugin_data = array(
+ "installed" => true,
+ "enabled" => false,
+ "priorite" => isset($this->plugins[$plugin_name]["priorite"]) ? $this->plugins[$plugin_name]["priorite"] : 0
+ );
+ if($env->set_plugin_data($plugin_name, $plugin_data)){
+ $env->redirect(
+ $env->url("admin/plugins/index"),
+ "le plugin a été installé"
+ );
+ }
+ else $env->erreur("impossible de mettre à jour le statut du plugin ".$plugin_name);
+ }
+ else $env->erreur("erreur lors de l'installation du plugin ".$plugin_name."<br>".$res);
+ }
+ else $env->erreur("impossible de trouver le plugin ".$plugin_name);
+ }
+
+ function uninstall(&$env){
+ $plugin_name = $_GET[$env->param("id")];
+ if(isset($this->plugins[$plugin_name])){
+ $impl = $this->plugins[$plugin_name]["impl"];
+ $res= $impl->uninstall($env);
+ if($res === true){
+ $plugin_data = array(
+ "installed" => false,
+ "enabled" => false,
+ "priorite" => isset($this->plugins[$plugin_name]["priorite"]) ? $this->plugins[$plugin_name]["priorite"] : 0
+ );
+ if($env->set_plugin_data($plugin_name, $plugin_data)){
+ $env->redirect(
+ $env->url("admin/plugins/index"),
+ "le plugin a été désinstallé"
+ );
+ }
+ else $env->erreur("impossible de mettre à jour le statut du plugin ".$plugin_name);
+ }
+ else $env->erreur("erreur lors de la désinstallation du plugin ".$plugin_name."<br>".$res);
+ }
+ else $env->erreur("impossible de trouver le plugin ".$plugin_name);
+ }
+
+ function enable(&$env){
+ $plugin_name = $_GET[$env->param("id")];
+ if(isset($this->plugins[$plugin_name])){
+ if($this->plugins[$plugin_name]["installed"]){
+ if(!$this->plugins[$plugin_name]["enabled"]){
+ $impl = $this->plugins[$plugin_name]["impl"];
+ $res = $impl->enable($env);
+ if($res === true){
+ $plugin_data = array(
+ "installed" => true,
+ "enabled" => true,
+ "priorite" => isset($this->plugins[$plugin_name]["priorite"]) ? $this->plugins[$plugin_name]["priorite"] : 0
+ );
+ if($env->set_plugin_data($plugin_name, $plugin_data)){
+ $env->redirect(
+ $env->url("admin/plugins/index"),
+ "le plugin a été activé"
+ );
+ }
+ else $env->erreur("impossible de mettre à jour le statut du plugin ".$plugin_name);
+ }
+ else $env->erreur("erreur lors de l'activation du plugin ".$plugin_name."<br>".$res);
+ }
+ else $env->erreur("le plugin ".$plugin_name." est déjà actif");
+ }
+ else $env->erreur("le plugin ".$plugin_name." n'est pas installé");
+ }
+ else $env->erreur("impossible de trouver le plugin ".$plugin_name);
+ }
+
+ function disable(&$env){
+ $plugin_name = $_GET[$env->param("id")];
+ if(isset($this->plugins[$plugin_name])){
+ if($this->plugins[$plugin_name]["installed"]){
+ if($this->plugins[$plugin_name]["enabled"]){
+ $impl = $this->plugins[$plugin_name]["impl"];
+ $res = $impl->disable($env);
+ if($res === true){
+ $plugin_data = array(
+ "installed" => true,
+ "enabled" => false,
+ "priorite" => isset($this->plugins[$plugin_name]["priorite"]) ? $this->plugins[$plugin_name]["priorite"] : 0
+ );
+ if($env->set_plugin_data($plugin_name, $plugin_data)){
+ $env->redirect(
+ $env->url("admin/plugins/index"),
+ "le plugin a été désactivé"
+ );
+ }
+ else $env->erreur("impossible de mettre à jour le statut du plugin ".$plugin_name);
+ }
+ else $env->erreur("erreur lors de la désactivation du plugin ".$plugin_name."<br>".$res);
+ }
+ else $env->erreur("le plugin ".$plugin_name." est déjà inactif");
+ }
+ else $env->erreur("le plugin ".$plugin_name." n'est pas installé");
+ }
+ else $env->erreur("impossible de trouver le plugin ".$plugin_name);
+ }
+
+ }
+
+?>
\ No newline at end of file