From 8ee0983ec80aa5a77cb8c04bc79383b2076cfc9c Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Wed, 3 May 2006 16:56:10 +0000
Subject: [PATCH] =?UTF-8?q?integre=20le=20patch=20mis=20a=20jour=20propos?=
 =?UTF-8?q?=C3=A9=20dans=20#177=20(mais=20ne=20clos=20pas=20le=20ticket)?=
 =?UTF-8?q?=20plus=20de=20warning=20cote=20public=20quand=20un=20plugin=20?=
 =?UTF-8?q?est=20manquant=20verification=20de=20la=20configuration=20cote?=
 =?UTF-8?q?=20prive=20quand=20un=20admin=20se=20log,=20et=20redirect=20ver?=
 =?UTF-8?q?s=20la=20page=20de=20configuration=20en=20cas=20de=20defaut.=20?=
 =?UTF-8?q?la=20fonction=20de=20verification=20est=20'compilee'=20en=20mem?=
 =?UTF-8?q?e=20temps=20que=20les=20fonctions=20de=20chargement.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc/plugin.php | 70 +++++++++++++++++++++++++++++++++++++------
 ecrire/index.php      |  6 ++++
 2 files changed, 67 insertions(+), 9 deletions(-)

diff --git a/ecrire/inc/plugin.php b/ecrire/inc/plugin.php
index 2e4dc76823..8a5489bde0 100644
--- a/ecrire/inc/plugin.php
+++ b/ecrire/inc/plugin.php
@@ -43,6 +43,7 @@ function liste_plugin_actifs(){
 
 function ecrire_plugin_actifs($plugin,$pipe_recherche=false){
 	static $liste_pipe_manquants=array();
+	$liste_fichier_verif = array();
 	if (($pipe_recherche)&&(!in_array($pipe_recherche,$liste_pipe_manquants)))
 		$liste_pipe_manquants[]=$pipe_recherche;
 	
@@ -77,8 +78,10 @@ function ecrire_plugin_actifs($plugin,$pipe_recherche=false){
 				if ($charge=='options')
 					$splugs .= '$GLOBALS[\'plugins\'][]=\''.$plug.'\';'."\n";
 				if (isset($info[$charge])){
-					foreach($info[$charge] as $file)
-						$s .= "include_once _DIR_PLUGINS.'$plug/".trim($file)."';\n";
+					foreach($info[$charge] as $file){
+						$s .= "@include_once _DIR_PLUGINS.'$plug/".trim($file)."';\n";
+						$liste_fichier_verif[] = "_DIR_PLUGINS.'$plug/".trim($file)."'";
+					}
 				}
 			}
 		}
@@ -115,12 +118,15 @@ function ecrire_plugin_actifs($plugin,$pipe_recherche=false){
 		if (!isset($GLOBALS['spip_pipeline'][$add_pipe]))
 			$GLOBALS['spip_pipeline'][$add_pipe]= '';
 
-	pipeline_precompile();
+	$liste_fichier_verif2 = pipeline_precompile();
+	$liste_fichier_verif = array_merge($liste_fichier_verif,$liste_fichier_verif2);
+	verification_precompile($liste_fichier_verif);
 }
 
-// precompilsation des pipelines
+// precompilation des pipelines
 function pipeline_precompile(){
 	global $spip_pipeline, $spip_matrice;
+	$liste_fichier_verif = array();
 	
 	$start_file = "<"."?php\nif (!defined('_ECRIRE_INC_VERSION')) return;\n";
 	$end_file = "\n?".">";
@@ -134,16 +140,21 @@ function pipeline_precompile(){
 			$s_call .= '$val = minipipe(\''.$fonc.'\', $val);'."\n";
 			if (isset($spip_matrice[$fonc])){
 				$file = $spip_matrice[$fonc];
-				$s_inc .= 'include_once(';
+				$s_inc .= '@include_once(';
 				// si _DIR_PLUGINS est dans la chaine, on extrait la constante
 				if (($p = strpos($file,'_DIR_PLUGINS'))!==FALSE){
+					$f = "";
 					if ($p)
-						$s_inc .= "'".substr($file,0,$p)."'.";
-					$s_inc .= "_DIR_PLUGINS.";
-					$s_inc .= "'".substr($file,$p+12)."'";
+						$f .= "'".substr($file,0,$p)."'.";
+					$f .= "_DIR_PLUGINS.";
+					$f .= "'".substr($file,$p+12)."'";
+					$s_inc .= $f;
+					$liste_fichier_verif[] = $f;
 				}
-				else
+				else{
 					$s_inc .= "'$file'";
+					$liste_fichier_verif[] = "'$file'";
+				}
 				$s_inc .= ');'."\n";
 			}
 		}
@@ -155,6 +166,23 @@ function pipeline_precompile(){
 	}
 	ecrire_fichier(_DIR_SESSIONS."charger_pipelines.php",
 		$start_file . $content . $end_file);
+	return $liste_fichier_verif;
+}
+
+function verification_precompile($liste_fichier_verif){
+	$start_file = "<"."?php\nif (!defined('_ECRIRE_INC_VERSION')) return;
+	function verifier_presence_plugins(){
+		\$ok = true;";
+	$end_file = "
+		return \$ok;
+	}\n?".">";
+	$content = "";
+	foreach($liste_fichier_verif as $fichier){
+		$content .= "
+		\$ok = \$ok & @is_readable($fichier);";
+	}
+	ecrire_fichier(_DIR_SESSIONS."verifier_presence_plugins.php",
+		$start_file . $content . $end_file);
 }
 
 // pas sur que ça serve juste au cas où
@@ -391,4 +419,28 @@ function plugin_verifie_conformite($plug,&$arbre){
 	}
 }
 
+function verifie_include_plugins(){
+	global $auteur_session;
+	if ($auteur_session['statut']!='0minirezo') return;
+	// verifier la presence des plugins (on a pu en deplacer un)
+	if (@is_readable(_DIR_SESSIONS."verifier_presence_plugins.php")){
+		// verification precompile
+		include_once(_DIR_SESSIONS."verifier_presence_plugins.php");
+		$ok = verifier_presence_plugins();
+		if ($ok) return;
+	}
+	if (_request('exec')!="admin_plugin"){
+		if (@is_readable(_DIR_PLUGINS)){
+			redirige_par_entete(generer_url_ecrire("admin_plugin"));
+			exit;
+		}
+		// plus de repertoire plugin existant, le menu n'existe plus
+		// on fait une mise a jour silencieuse
+		include_spip('inc/plugin');
+		// generer les fichiers php precompiles
+		// de chargement des plugins et des pipelines
+		verif_plugin();
+		spip_log("desactivation des plugins suite a suppression du repertoire");
+	}
+}
 ?>
diff --git a/ecrire/index.php b/ecrire/index.php
index ac0f8f36b3..5627597ccf 100644
--- a/ecrire/index.php
+++ b/ecrire/index.php
@@ -170,6 +170,12 @@ if ($GLOBALS['_COOKIE']['spip_admin']
 AND $GLOBALS['meta']["debut_restauration"]
 AND !($exec=='js_menu_rubriques'))
 	$exec = 'import_all';
+else // ne pas interrompre une restauration par un redirect inoportun
+	if ($auteur_session['statut']=='0minirezo') {
+		// on verifie la configuration des plugins
+		include_spip('inc/plugin');
+		verifie_include_plugins();
+	}
 
 $var_f = charger_fonction($exec);
 $var_f();
-- 
GitLab