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('&amp;','&',$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