From 83c0ed84c478cb4f16aad464393b138ab5eb0c45 Mon Sep 17 00:00:00 2001
From: "cedric@yterium.com" <cedric@yterium.com>
Date: Tue, 5 May 2020 14:40:52 +0000
Subject: [PATCH] Simplifier index_boucle() et renommer index_boucle_parente()
 en index_boucle_mere().

---
 ecrire/public/balises.php    | 10 ++++-----
 ecrire/public/references.php | 39 +++++++++++++++++-------------------
 2 files changed, 23 insertions(+), 26 deletions(-)

diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php
index b34efbf5c9..699bd50e11 100644
--- a/ecrire/public/balises.php
+++ b/ecrire/public/balises.php
@@ -508,7 +508,7 @@ function balise_RECHERCHE_dist($p) {
  *     Pile complétée par le code à générer
  **/
 function balise_COMPTEUR_BOUCLE_dist($p) {
-	$b = index_boucle_parente($p);
+	$b = index_boucle_mere($p);
 	if ($b === '') {
 		$msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p)));
 		erreur_squelette($msg, $p);
@@ -536,7 +536,7 @@ function balise_COMPTEUR_BOUCLE_dist($p) {
  *     Pile complétée par le code à générer
  **/
 function balise_TOTAL_BOUCLE_dist($p) {
-	$b = index_boucle_parente($p);
+	$b = index_boucle_mere($p);
 	if ($b === '') {
 		$msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p)));
 		erreur_squelette($msg, $p);
@@ -1092,7 +1092,7 @@ define('CODE_PAGINATION',
  *     Pile complétée par le code à générer
  */
 function balise_PAGINATION_dist($p, $liste = 'true') {
-	$b = index_boucle_parente($p);
+	$b = index_boucle_mere($p);
 
 	// s'il n'y a pas de nom de boucle, on ne peut pas paginer
 	if ($b === '') {
@@ -1202,7 +1202,7 @@ function balise_ANCRE_PAGINATION_dist($p) {
  *     Pile complétée par le code à générer
  **/
 function balise_GRAND_TOTAL_dist($p) {
-	$b = index_boucle_parente($p);
+	$b = index_boucle_mere($p);
 	if ($b === '') {
 		$msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p)));
 		erreur_squelette($msg, $p);
@@ -2640,7 +2640,7 @@ function balise_HTML5_dist($p) {
  *     Pile complétée par le code à générer
  */
 function balise_TRI_dist($p, $liste = 'true') {
-	$b = index_boucle_parente($p);
+	$b = index_boucle_mere($p);
 	// s'il n'y a pas de nom de boucle, on ne peut pas trier
 	if ($b === '') {
 		$msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p)));
diff --git a/ecrire/public/references.php b/ecrire/public/references.php
index 01a06a5ed3..8dbf7fcc96 100644
--- a/ecrire/public/references.php
+++ b/ecrire/public/references.php
@@ -26,7 +26,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
  * où une référence explicite est demandée
  *
  * - `#MABALISE` : l'index est celui de la première boucle englobante
- * - `#_autreboucle:MABALISE` : l'index est celui de la boucle _autreboucle si elle est bien englobante
+ * - `#_autreboucle:MABALISE` : l'index est celui de la boucle _autreboucle
  *
  * @example
  *     Dans une balise dynamique ou calculée :
@@ -41,33 +41,27 @@ if (!defined('_ECRIRE_INC_VERSION')) {
  *     - '' si une référence explicite incorrecte est envoyée
  */
 function index_boucle($p) {
-
-	$idb = $p->id_boucle;
-	$explicite = $p->nom_boucle;
-
-	if (strlen($explicite)) {
-		// Recherche d'un champ dans un étage supérieur
-		while (($idb !== $explicite) && ($idb !== '')) {
-			$idb = $p->boucles[$idb]->id_parent;
+	if (strlen($p->nom_boucle)) {
+		// retourne l’index explicite demandé s’il existe
+		if (!empty($p->boucles[$p->nom_boucle])) {
+			return $p->nom_boucle;
 		}
-	}
-
-	return $idb;
+		return '';
+	} 
+	return $p->id_boucle;
 }
 
 
 /**
- * Retrouver l'index de la boucle parente d'une balise (sauf explicitée)
- *
- * Retrouve la boucle parente d’une balise, sauf si son nom est explicité
+ * Retrouve la boucle mère d’une balise, sauf si son nom est explicité
  *
  * - `#MABALISE` : l'index sera celui de la boucle parente
- * - `#_autreboucle:MABALISE` : l'index est celui de la boucle _autreboucle si elle est bien englobante
- *
+ * - `#_autreboucle:MABALISE` : l'index est celui de la boucle _autreboucle, si elle existe
+ * 
  * @example
  *     Dans une balise dynamique ou calculée :
  *     ```
- *     $idb = index_boucle_parente($p);
+ *     $idb = index_boucle_mere($p);
  *     ```
  *
  * @param Champ $p AST au niveau de la balise
@@ -76,11 +70,14 @@ function index_boucle($p) {
  *     - Identifiant de la boucle parente possédant ce champ, ou '' si pas de parent.
  *     - '' si une référence explicite incorrecte est envoyée
  */
-function index_boucle_parente($p) {
+function index_boucle_mere($p) {
 	if (strlen($p->nom_boucle)) {
 		// retourne l’index explicite demandé s’il existe
-		return index_boucle($p);
-	}
+		if (!empty($p->boucles[$p->nom_boucle])) {
+			return $p->nom_boucle;
+		}
+		return '';
+	} 
 	if (!empty($p->descr['id_mere'])) {
 		return $p->descr['id_mere'];
 	}
-- 
GitLab