From d0e74e0d5295efda9980d7597b88ba8cb0d9922b Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Thu, 26 Aug 2004 21:44:09 +0000
Subject: [PATCH] =?UTF-8?q?un=20bug=20vexant=20qui=20date=20de=20juillet?=
 =?UTF-8?q?=20:=20une=20boucle=20r=C3=A9cursive=20ne=20reservait=20pas=20l?=
 =?UTF-8?q?es=20champs=20necessaires=20chez=20sa=20maman,=20mais=20seuleme?=
 =?UTF-8?q?nt=20chez=20elle-meme=20;=20ou=20alors=20au=20contraire=20(pr?=
 =?UTF-8?q?=C3=A9c=C3=A9demment)=20seulement=20chez=20sa=20maman=20;=20or,?=
 =?UTF-8?q?=20il=20faut=20les=202,=20puisqu'on=20est=20appel=C3=A9=20une?=
 =?UTF-8?q?=20fois=20par=20la=20maman=20et=20ensuite=20plusieurs=20fois=20?=
 =?UTF-8?q?par=20soi-m=C3=AAme.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Dur dur le code pas commenté !
---
 inc-arg-squel.php3 | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/inc-arg-squel.php3 b/inc-arg-squel.php3
index bc17ac300d..0d345de6d2 100644
--- a/inc-arg-squel.php3
+++ b/inc-arg-squel.php3
@@ -410,7 +410,9 @@ function calculer_param_date($date_compare, $date_orig) {
 	")))";
 }
 
+//
 // Calculer les parametres
+//
 function calculer_param_dynamique($val, &$boucles, $idb) {
 	if (ereg("^#([A-Za-z0-9_-]+)$", $val, $m)) {
 		$c = calculer_champ('',$m[1], $idb, $boucles,$idb);
@@ -428,10 +430,19 @@ function calculer_param_dynamique($val, &$boucles, $idb) {
 	}
 }
 
-# Prendre en compte le cas de la boucle dite recursive
+//
+// Reserve les champs necessaires a la comparaison avec le contexte donne par
+// la boucle parente ; attention en recursif il faut les reserver chez soi-meme
+// ET chez sa maman
+// 
 function calculer_argument_precedent($idb, $nom_champ, &$boucles) {
-	return index_pile(($boucles[$idb]->externe ? $idb :
-	$boucles[$idb]->id_parent), $nom_champ, $boucles);
+
+	// recursif ?
+	if ($boucles[$idb]->externe)
+		index_pile ($idb, $nom_champ, $boucles); // reserver chez soi-meme
+
+	// reserver chez le parent et renvoyer l'habituel $Pile[$SP]['nom_champ']
+	return index_pile ($boucles[$idb]->id_parent, $nom_champ, $boucles);
 }
 
 ?>
-- 
GitLab