From 9d484bf51e6cafd022ba0ca1828276d8eba5f80d Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Tue, 7 Mar 2006 15:31:03 +0000
Subject: [PATCH] chargement des pipeline: une seul fois svp

---
 ecrire/inc/utils.php | 60 ++++++++++++++++++++++++--------------------
 1 file changed, 33 insertions(+), 27 deletions(-)

diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index ead1aaebc2..743fb79165 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -132,35 +132,41 @@ function minipipe($fonc,$val){
 }
 
 // chargement du pipeline sous la forme d'un fichier php prepare
-function pipeline($action,$val){
-	$ok = @is_readable($f = _DIR_SESSIONS."charger_pipelines.php");
-	if (!$ok){
-		include_spip('inc/plugin');
-		// generer les fichiers php precompiles
-		// de chargement des plugins et des pipelines
-		verif_plugin();
-		$ok = @is_readable($f = _DIR_SESSIONS."charger_pipelines.php");
-		if (!$ok)
-			spip_log("generation de $f impossible; tous les pipeline desactives");
-	}
-	if ($ok){
-		require_once($f);
-		$f = "execute_pipeline_$action";
-		$ok = function_exists($f);
-		if ($ok){
-			$val = $f($val);
-			// si le flux est une table qui encapsule donnees et autres
-			// on ne ressort du pipe que les donnees
-			if (is_array($val)&&isset($val['data']))
-				$val = $val['data'];
-		}
-		else{
+function pipeline($action,$val) {
+	static $charger;
+
+	// chargement initial des fonctions mises en cache, ou generation du cache
+	if (!$charger) {
+		if (!@is_readable($charger = _DIR_SESSIONS."charger_pipelines.php")) {
 			include_spip('inc/plugin');
-			//on passe $action en arg pour creer la fonction meme si le pipe n'est defini nul part
-			// vu qu'on est la c'est qu'il existe !
-			verif_plugin($action);
-			spip_log("fonction $f absente : pipeline desactive");
+			// generer les fichiers php precompiles
+			// de chargement des plugins et des pipelines
+			verif_plugin();
+			if ($bug = !@is_readable($charger))
+				spip_log("fichier $charger pas cree");
 		}
+
+		if (!$bug)
+			include_once $charger;
+	}
+
+	// appliquer notre fonction si elle existe
+	$fonc = 'execute_pipeline_'.$action;
+	if (function_exists($fonc)) {
+		$val = $fonc($val);
+		// si le flux est une table qui encapsule donnees et autres
+		// on ne ressort du pipe que les donnees
+		if (is_array($val)&&isset($val['data']))
+			$val = $val['data'];
+	}
+
+	// plantage ?
+	else {
+		include_spip('inc/plugin');
+		// on passe $action en arg pour creer la fonction meme si le pipe
+		// n'est defini nul part ; vu qu'on est la c'est qu'il existe !
+		verif_plugin($action);
+		spip_log("fonction $f absente : pipeline desactive");
 	}
 	return $val;
 }
-- 
GitLab