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