Valider 71ccd13b rédigé par cerdic's avatar cerdic
Parcourir les fichiers

Allegement de la verification de fichier manquant dans un plugin :

puisqu'on fait deja un file_exists() quand on a besoin d'inclure un fichier, on en profite pour peupler la globale message_crash_plugins a ce moment,
via la fonction include_once_check qu'on utilise dans la compilation des plugins.
Plus besoin de parcourir la liste des fichiers a verifier en debut de chaque hit
parent 895eaf89
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+8 −8
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -367,17 +367,17 @@ function alertes_auteur($id_auteur) {
	}

	if (isset($GLOBALS['meta']['message_crash_plugins'])
	AND autoriser('configurer', 'plugins', null, $id_auteur)) {
		include_spip('inc/plugin');
		if ($msg = message_crash_plugins())
			$alertes[] = $msg;
	  AND $GLOBALS['meta']['message_crash_plugins']
	  AND autoriser('configurer', 'plugins', null, $id_auteur)
	  AND is_array($msg = unserialize($GLOBALS['meta']['message_crash_plugins']))) {
			$msg = implode(', ',array_map('joli_repertoire',array_keys($msg)));
			$alertes[] = _T('plugins_erreur', array('plugins' => $msg));
	}


	if (isset($GLOBALS['meta']['plugin_erreur_activation'])
	  AND autoriser('configurer', 'plugins', null, $id_auteur)) {
		$alertes[] = $GLOBALS['meta']['plugin_erreur_activation'];
		effacer_meta('plugin_erreur_activation'); // pas normal que ce soit ici
		include_spip('inc/plugin');
		$alertes[] = plugin_donne_erreurs();
	}

	$alertes = pipeline(
+2 −3
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -416,7 +416,7 @@ function plugins_precompile_xxxtions($plugin_valides, $ordre)
		// pour pouvoir garder le meme niveau d'erreur general
				$file = trim($file);
				$_file = $root_dir_type . ".'$plug/$file'";
				$contenu[$charge] .= "if (file_exists(\$f=$_file)){include_once \$f;}\n";
				$contenu[$charge] .= "include_once_check($_file);\n";
				$liste_fichier_verif["$root_dir_type:$plug/$file"]=1;
			}
		}
@@ -523,8 +523,7 @@ function pipeline_precompile($verifs){
					$file = str_replace("''.","",$file);
					$file = str_replace(constant($dir), '', $file);
				}
				$s_inc .= 'if (file_exists($f='
				. $file . ')){include_once($f);}'."\n";
				$s_inc .= "include_once_check($file);\n";
			}
		}
		if (strlen($s_inc))
+13 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -67,6 +67,19 @@ function charger_fonction($nom, $dossier='exec', $continue=false) {
	exit;
}

/**
 * Inclusion unique avec verification d'existence du fichier + log en crash sinon
 * @param string $file
 * @return bool
 */
function include_once_check($file){
	if (file_exists($file)) {include_once $file;return true;}
	$crash = (isset($GLOBALS['message_crash_plugins'])?unserialize($GLOBALS['message_crash_plugins']):'');
	$crash = ($crash?$crash:array());
	$crash[$file] = true;
	ecrire_meta('message_crash_plugins',serialize($crash));
	return false;
}

//
// la fonction cherchant un fichier PHP dans le SPIP_PATH
+0 −18
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -113,24 +113,6 @@ elseif (!preg_match(',^[a-z4_][0-9a-z_-]*$,i', $exec)) {
	set_request('exec', $exec);
}

// Verification des plugins
// (ne pas interrompre une restauration ou un upgrade)
elseif ($exec!='upgrade'
AND !$var_auth
AND !_DIR_RESTREINT
AND autoriser('configurer')
AND lire_fichier(_CACHE_PLUGINS_VERIF,$l)
AND $l = @unserialize($l)) {
	foreach ($l as $fichier) {
		if (!@is_readable($fichier)) {
			spip_log("Verification plugin: echec sur $fichier !");
			include_spip('inc/plugin');
			verifie_include_plugins();
			break; // sortir de la boucle, on a fait un verif
		}
	}
}

// compatibilite ascendante
$GLOBALS['spip_display'] = isset($GLOBALS['visiteur_session']['prefs']['display'])
	? $GLOBALS['visiteur_session']['prefs']['display']