From b3f45bf5a9f0f9af85f2e9164e41fdc125058b1d Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Fri, 7 Apr 2006 08:51:43 +0000
Subject: [PATCH] =?UTF-8?q?D=C3=A9coupage=20en=202=20d'une=20fonction=20fa?=
 =?UTF-8?q?isant=20trop=20de=20choses=20=C3=A0=20la=20fois=20(Pif)=20Au=20?=
 =?UTF-8?q?passage,=20d=C3=A9couverte=20hallucinante:=20l'utilitaire=20{pa?=
 =?UTF-8?q?tch}=20introduit=20parfois=20un=20caract=C3=A8re=20=C3=A9quival?=
 =?UTF-8?q?ent=20=C3=A0=20l'espace,=20mais=20du=20point=20de=20vue=20de=20?=
 =?UTF-8?q?{diff},=20mais=20pas=20de=20l'analyseur=20syntaxique=20de=20PHP?=
 =?UTF-8?q?=20qui=20le=20prend=20comme=20premier=20caract=C3=A8re=20signif?=
 =?UTF-8?q?icatif=20du=20symbole=20qui=20suit=20!?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/public/references.php | 47 +++++++++++++++++++++++++++---------
 1 file changed, 36 insertions(+), 11 deletions(-)

diff --git a/ecrire/public/references.php b/ecrire/public/references.php
index 267c4429f0..fe7dcfa541 100644
--- a/ecrire/public/references.php
+++ b/ecrire/public/references.php
@@ -60,34 +60,59 @@ function index_pile($idb, $nom_champ, &$boucles, $explicite='') {
 	return('$Pile[0][\''. strtolower($nom_champ) . '\']');
 }
 
-function index_tables_en_pile($idb, $nom_champ, &$boucles)
-{
-	global $exceptions_des_tables, $table_des_tables, $tables_des_serveurs_sql;
-	$r = $boucles[$idb]->type_requete;
-	$s = $boucles[$idb]->sql_serveur;
+/**
+ * de'termine le nom de la table associe'e a un type de boucle
+ * $r est le type de boucle et $s le serveur (issus de la structure boucles)
+ * retourne un tableau de deux entre'es : le nom reel de la table et celui
+ * sans le prefixe des tables spip (identiques pour les tables non-spip)
+ */
+function table_de_type_requete($r, $s) {
+	global $table_des_tables;
+
 	if (!$s) 
 		{ $s = 'localhost';
     // indirection (pour les rares cas ou le nom de la table!=type)
 		    $t = $table_des_tables[$r];
 		  }
 		// pour les tables non Spip
-	if (!$t) {$nom_table = $t = $r; } else $nom_table = 'spip_' . $t;
+	if (!$t)
+	  return array($r, $r);
+	else
+	  return array('spip_' . $t, $t);
+}
+
+/** retourne la description d'une table, telle qu'elle se pre'sente
+ * dans serial.php, ou de'termine'e automatiquement
+ * $nom_table et $t sont le nom de la table prefixe'e ou pas
+ * $s est le nom du serveur
+ */
+function description_table($nom_table, $t, $s) {
+	global $table_des_tables, $tables_des_serveurs_sql;
 
 	$desc = $tables_des_serveurs_sql[$s][$nom_table];
-#		spip_log("Go: idb='$idb' r='$r' nom='$nom_champ' s=$s t=$t desc=" . array_keys($desc));
 
 	if (!isset($desc['field'])) {
 		$desc = $table_des_tables[$r] ?  (($GLOBALS['table_prefix'] ? $GLOBALS['table_prefix'] : 'spip') . '_' . $t) : $nom_table;
 
-		$desc = spip_abstract_showtable($desc, $boucles[$idb]->sql_serveur);
+		$desc = spip_abstract_showtable($desc, $s);
 		if (!isset($desc['field'])) {
-			erreur_squelette(_T('zbug_table_inconnue', array('table' => $r)),
-					   "'$idb'");
+			erreur_squelette(_T('zbug_table_inconnue', array('table' => $nom_table)));
 # continuer pour chercher l'erreur suivante
-			return  array("'#" . $r . ':' . $nom_champ . "'",'');
+			return  array("'#" . $nom_table . " ?'",'');
 		}
 		$tables_des_serveurs_sql[$s][$nom_table] = $desc;
 	}
+	return $desc;
+}
+
+function index_tables_en_pile($idb, $nom_champ, &$boucles) {
+	global $exceptions_des_tables, $tables_des_serveurs_sql;
+
+	$r = $boucles[$idb]->type_requete;
+	$s = $boucles[$idb]->sql_serveur;
+
+	list($nom_table, $t)= table_de_type_requete($r, $s);
+	$desc= description_table($nom_table, $t, $s);
 	
 	$excep = $exceptions_des_tables[$r][$nom_champ];
 	if ($excep) {
-- 
GitLab