From 4aeee954c115c99d21dfea262d36d96b73731197 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Tue, 9 Jan 2007 23:20:20 +0000 Subject: [PATCH] "gerer la desinstallation complete d'un plugin actif (Effacer TOUT)" --- .gitattributes | 1 + ecrire/action/desinstaller_plugin.php | 36 +++++++++++++++++++++++++++ ecrire/exec/admin_plugin.php | 9 +++++++ ecrire/inc/plugin.php | 21 ++++++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 ecrire/action/desinstaller_plugin.php diff --git a/.gitattributes b/.gitattributes index 86a6ce07ca..547480446a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -321,6 +321,7 @@ ecrire/action/activer_plugins.php -text ecrire/action/autoriser.php -text ecrire/action/converser.php -text ecrire/action/dater.php -text +ecrire/action/desinstaller_plugin.php -text ecrire/action/documenter.php -text ecrire/action/editer_article.php -text ecrire/action/editer_auteurs.php -text diff --git a/ecrire/action/desinstaller_plugin.php b/ecrire/action/desinstaller_plugin.php new file mode 100644 index 0000000000..be16295cdb --- /dev/null +++ b/ecrire/action/desinstaller_plugin.php @@ -0,0 +1,36 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2007 * + * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * + * * + * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * + * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * +\***************************************************************************/ + +if (!defined("_ECRIRE_INC_VERSION")) return; + +include_spip('inc/plugin'); +function action_desinstaller_plugin_dist() { + + $securiser_action = charger_fonction('securiser_action', 'inc'); + $plug_file = $securiser_action(); + $infos = plugin_get_infos($plug_file); + if (isset($infos['install'])){ + // desinstaller + $etat = desinstalle_un_plugin($plug_file,$infos['prefix'],$infos['install']); + // desactiver si il a bien ete desinstalle + if (!$etat) + ecrire_plugin_actifs($plug_file,false,'enleve'); + ecrire_metas(); + } + if ($redirect = _request('redirect')){ + include_spip('inc/headers'); + $redirect = str_replace('&','&',$redirect); + redirige_par_entete($redirect); + } +} + +?> diff --git a/ecrire/exec/admin_plugin.php b/ecrire/exec/admin_plugin.php index 7e7ebede4b..fa5ad55630 100644 --- a/ecrire/exec/admin_plugin.php +++ b/ecrire/exec/admin_plugin.php @@ -268,6 +268,7 @@ function affiche_arbre_plugins($liste_plugins,$liste_plugins_actifs){ // http://doc.spip.org/@ligne_plug function ligne_plug($plug_file, $actif, $id){ + global $spip_lang_right; static $id_input=0; $erreur = false; @@ -281,6 +282,14 @@ function ligne_plug($plug_file, $actif, $id){ $s .= "/!\ $err <br/>"; $s .= "</div>"; } + + // bouton de desinstallation + if ($actif && plugin_est_installe($plug_file)){ + $s .= "<div style='float:$spip_lang_right'>"; + $action = generer_action_auteur('desinstaller_plugin',$plug_file,generer_url_ecrire('admin_plugin')); + $s .= "<a href='$action'>"._T('bouton_effacer_tout')."</a>"; + $s .= "</div>"; + } $etat = 'dev'; if (isset($info['etat'])) diff --git a/ecrire/inc/plugin.php b/ecrire/inc/plugin.php index ba21c71794..70909258de 100644 --- a/ecrire/inc/plugin.php +++ b/ecrire/inc/plugin.php @@ -249,6 +249,22 @@ function ordonne_plugin(){ ecrire_plugin_actifs($liste_triee); ecrire_metas(); } + +function desinstalle_un_plugin($plug,$prefix,$install){ + // faire les include qui vont bien + foreach($install as $file){ + $file = trim($file); + @include_once(_DIR_PLUGINS."$plug/$file"); + } + $prefix_install = $prefix."_install"; + if (!function_exists($prefix_install)) + return false; + // voir si on a besoin de faire l'install + $prefix_install('uninstall'); + $ok = $prefix_install('test'); + return $ok; +} + // http://doc.spip.org/@installe_un_plugin function installe_un_plugin($plug,$prefix,$install){ // faire les include qui vont bien @@ -285,6 +301,11 @@ function installe_plugins(){ ecrire_meta('plugin_installes',serialize($meta_plug_installes),'non'); ecrire_metas(); } +function plugin_est_installe($plug_path){ + $plugin_installes = isset($GLOBALS['meta']['plugin_installes'])?unserialize($GLOBALS['meta']['plugin_installes']):array(); + if (!$plugin_installes) return false; + return in_array($plug_path,$plugin_installes); +} // lecture du fichier de configuration d'un plugin // http://doc.spip.org/@plugin_get_infos -- GitLab