From 59aab79edcad8ceb0d7c61537b9d11361bb77894 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Thu, 10 Jan 2008 21:36:23 +0000
Subject: [PATCH] =?UTF-8?q?Depuis=20l'irruption=20des=20mod=C3=A8les,=20le?=
 =?UTF-8?q?=20d=C3=A9busqueur=20ne=20retrouvait=20pas=20toujours=20le=20r?=
 =?UTF-8?q?=C3=A9sultat=20d'une=20boucle,=20parce=20que=20l'utilisation=20?=
 =?UTF-8?q?d'un=20mod=C3=A8le=20=C3=A0=20l'int=C3=A9rieur=20ne=20restaurai?=
 =?UTF-8?q?t=20pas=20les=20variables=20globales=20du=20d=C3=A9busqueur.=20?=
 =?UTF-8?q?R=C3=A9par=C3=A9=20(dur).?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Pour ce faire, il a fallu changer la fonction public/composer dont le 2e argument est à présent le nom du squelette à compiler.

Ce changement de signature entraine la modification de $spip_version_code, qui à présent vaut le numéro de la dernière SVN l'ayant modifié, à l'instar de $spip_version pour la base SQL.
---
 ecrire/inc_version.php       |  9 ++++-----
 ecrire/public/composer.php   |  9 +--------
 ecrire/public/debug.php      |  2 +-
 ecrire/public/parametrer.php | 37 ++++++++++++++++++++++++++----------
 4 files changed, 33 insertions(+), 24 deletions(-)

diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php
index 37bd9389a6..52f3c1432b 100644
--- a/ecrire/inc_version.php
+++ b/ecrire/inc_version.php
@@ -289,19 +289,18 @@ $liste_des_forums = array(
 // Droits d'acces maximum par defaut
 @umask(0);
 
-// version de la base (= numero SVN de sa derniere modif)
+// version des signatures de fonctions PHP
+// (= numero SVN de leur derniere modif cassant la compatibilite)
+$spip_version_code = 11056;
+// version de la base SQL (= numero SVN de sa derniere modif)
 $spip_version = 11042;
-
 // version de l'interface a la base
 $spip_sql_version = 1;
 
 // version de spip en chaine
-// et en numerique a incrementer sur les evolutions qui cassent la compatibilite descendante
 // 1.xxyy : xx00 versions stables publiees, xxyy versions de dev
 // (ce qui marche pour yy ne marchera pas forcement sur une version plus ancienne)
-// type nouvelles fonctionnalites, deplacement de fonctions ...
 $spip_version_affichee = '1.9.3 dev';
-$spip_version_code = '1.9303';
 
 // ** Securite **
 $visiteur_session = $auteur_session = $connect_statut = $connect_toutes_rubriques =  $hash_recherche = $hash_recherche_strict = $ldap_present ='';
diff --git a/ecrire/public/composer.php b/ecrire/public/composer.php
index 4e20262471..8ac3b3760c 100644
--- a/ecrire/public/composer.php
+++ b/ecrire/public/composer.php
@@ -30,14 +30,7 @@ include_spip('public/interfaces');
 # Toutefois pour 2. et 3. preferer la technique de la surcharge
 
 // http://doc.spip.org/@public_composer_dist
-function public_composer_dist($squelette, $mime_type, $gram, $source, $connect) {
-
-	$nom = $mime_type . ($connect ?  "_$connect" : '') . '_'
-		. md5($GLOBALS['spip_version_code'].' * '.$squelette);
-
-	// si squelette est deja en memoire (INCLURE  a repetition)
-	if (function_exists($nom))
-		return $nom;
+function public_composer_dist($squelette, $nom, $gram, $source, $connect) {
 
 	$phpfile = sous_repertoire(_DIR_SKELS,'',false,true) . $nom . '.php';
 
diff --git a/ecrire/public/debug.php b/ecrire/public/debug.php
index 50ddef74ae..eb6059db94 100644
--- a/ecrire/public/debug.php
+++ b/ecrire/public/debug.php
@@ -229,7 +229,7 @@ function squelette_debug_compile($nom, $sourcefile, $code, $squelette) {
 // http://doc.spip.org/@boucle_debug
 function boucle_debug ($nom, $id_parent, $id, $type, $crit, $avant, $milieu, $apres, $altern) {
 	global $debug_objets;
-	$debug_objets['courant'] = $nom;
+
 	$debug_objets['parent'][$nom.$id] = $id_parent;
 	$debug_objets['pretty'][$nom.$id] = 
 		"BOUCLE$id($type)" . htmlspecialchars(
diff --git a/ecrire/public/parametrer.php b/ecrire/public/parametrer.php
index 04112aed3f..94ee8a5cbc 100644
--- a/ecrire/public/parametrer.php
+++ b/ecrire/public/parametrer.php
@@ -297,18 +297,34 @@ function public_parametrer_dist($fond, $local='', $cache='', $connect='')  {
 	list($skel,$mime_type, $gram, $sourcefile) =
 		$styliser($fond, $id_rubrique_fond, $GLOBALS['spip_lang'], $connect);
 
-	// Charger le squelette en specifiant les langages cibles et source
+	// calcul du nom du squelette
+	$fonc = $mime_type . ($connect ?  "_$connect" : '') . '_'
+		. md5($GLOBALS['spip_version_code'].' * '.$skel);
+
+	$debug = (isset($GLOBALS['var_mode']) && ($GLOBALS['var_mode'] == 'debug'));
+	// sauver le nom de l'eventuel squelette en cours d'execution
+	// (recursion possible a cause des modeles)
+	$courant = $debug ? @$GLOBALS['debug_objets']['courant'] : '';
+
+	//  si pas deja en memoire (INCLURE  a repetition),
+	// charger le squelette en specifiant les langages cibles et source
 	// au cas il faudrait le compiler (source posterieure au resultat)
-	// et appliquer sa fonction principale sur le contexte.
-	// Passer le nom du cache pour produire sa destruction automatique
 
-	$composer = charger_fonction('composer', 'public');
+	if (!function_exists($fonc)) {
+
+		$composer = charger_fonction('composer', 'public');
 
-	// Le debugueur veut afficher le contexte
-	if (isset($GLOBALS['var_mode']) && ($GLOBALS['var_mode'] == 'debug'))
-		$GLOBALS['debug_objets']['contexte'][$sourcefile] = $local;
+		if ($debug) {
+			$GLOBALS['debug_objets']['contexte'][$sourcefile] = $local;
+			$GLOBALS['debug_objets']['courant'] = $fonc;
+		}
+		$fonc = $composer($skel, $fonc, $gram, $sourcefile, $connect);
+	}
+
+	// Appliquer le squelette compile' sur le contexte.
+	// Passer le nom du cache pour produire sa destruction automatique
 
-	if ($fonc = $composer($skel, $mime_type, $gram, $sourcefile, $connect)){
+	if ($fonc) {
 		spip_timer($a = 'calcul page '.rand(0,1000));
 		$notes = calculer_notes(); // conserver les notes...
 
@@ -329,7 +345,7 @@ function public_parametrer_dist($fond, $local='', $cache='', $connect='')  {
 			. join(', ',$info)
 			.' ('.strlen($page['texte']).' octets)'
 		);
-		if (isset($GLOBALS['var_mode']) && ($GLOBALS['var_mode'] == 'debug'))
+		if ($debug)
 			$GLOBALS['debug_objets']['profile'][$sourcefile] = $profile;
 
 		// Si #CACHE{} n'etait pas la, le mettre a $delais
@@ -339,9 +355,10 @@ function public_parametrer_dist($fond, $local='', $cache='', $connect='')  {
 	} else
 		$page = array();
 
-	if (isset($GLOBALS['var_mode']) && ($GLOBALS['var_mode'] == 'debug')) {
+	if ($debug) {
 		include_spip('public/debug');
 		debug_dumpfile (strlen($page['texte'])?$page['texte']:" ", $fonc, 'resultat');
+		$GLOBALS['debug_objets']['courant'] = $courant;
 	}
 	$page['contexte'] = $local;
 
-- 
GitLab