From 220ae1f19c7d57ae509198d6310e0743beae96bf Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Mon, 20 Aug 2007 17:13:51 +0000
Subject: [PATCH] =?UTF-8?q?Correction=20de=20#954:=20bien=20g=C3=A9rer=20l?=
 =?UTF-8?q?e=20crit=C3=A8re=20'''doublons'''=20dans=20une=20table=20extern?=
 =?UTF-8?q?e.=20La=20fonction=20'''trouver=5Fdef=5Ftable'''=20n'=C3=A9tait?=
 =?UTF-8?q?=20pas=20utilis=C3=A9e=20=C3=A0=20l'initialisation=20du=20compi?=
 =?UTF-8?q?lateur=20c'=C3=A9tait=20incoh=C3=A9rent=20avec=20la=20suite.=20?=
 =?UTF-8?q?Mais=20il=20reste=20une=20dizaine=20d'occurrences=20du=20pr?=
 =?UTF-8?q?=C3=A9fixe=20de=20table=20"'spip=5F'"=20qu'il=20faudrait=20revo?=
 =?UTF-8?q?ir,=20il=20y=20a=20peut-=C3=AAtre=20le=20m=C3=AAme=20bug=20derr?=
 =?UTF-8?q?i=C3=A8re.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/public/compiler.php | 40 ++++++++++++++++++--------------------
 ecrire/public/criteres.php |  3 ++-
 2 files changed, 21 insertions(+), 22 deletions(-)

diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php
index 79b475cfcf..aeed166489 100644
--- a/ecrire/public/compiler.php
+++ b/ecrire/public/compiler.php
@@ -695,31 +695,29 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile) {
 	// tableau des informations sur le squelette
 	$descr = array('nom' => $nom, 'sourcefile' => $sourcefile);
 
-	// une boucle documents est conditionnee par tout le reste!
+	// Initialiser les champs necessaires a la compilation
+	// et signaler une boucle documents (les autres influent dessus)
 	foreach($boucles as $id => $boucle) {
 		$type = $boucle->type_requete;
 		if ($type != 'boucle') {
-		  $boucles[$id]->descr = &$descr;
-		  if (isset($table_des_tables[$type])) {
-		    $boucles[$id]->id_table = $x = $table_des_tables[$type];
-		    $boucles[$id]->primary = $tables_principales["spip_$x"]['key']["PRIMARY KEY"];
-		    if ((!$boucles[$id]->jointures)
-			AND (is_array($x = $tables_jointures['spip_' . $x])))
-		      $boucles[$id]->jointures = $x;
-		  } else if (isset($tables_auxiliaires['spip_' .$type])) {
-		  	// table auxiliaire
-		    $boucles[$id]->id_table = $type;
-		    $boucles[$id]->primary = $tables_auxiliaires['spip_' . $type]['key']["PRIMARY KEY"];
-		  } else {
-			// table non Spip.
-		    $boucles[$id]->id_table = $type;
-		    $serveur = $boucle->sql_serveur;
-		    $x = $tables_des_serveurs_sql[$serveur ? $serveur : 'localhost'][$type]['key'];		
-		    $boucles[$id]->primary = ($x["PRIMARY KEY"] ? $x["PRIMARY KEY"] : $x["KEY"]);
-		  }
+			$table = isset($table_des_tables[$type])
+			? $table_des_tables[$type]
+			: $type;
+			$show = trouver_def_table($table, $boucles[$id]);
+			if ($show) {
+				$nom_table = $show[0];
+				$show = $show[1]['key'];
+				$boucles[$id]->descr = &$descr;
+				$boucles[$id]->id_table = $table;
+				$boucles[$id]->primary = $show["PRIMARY KEY"];
+				if ((!$boucles[$id]->jointures)
+				AND (is_array($x = $tables_jointures[$nom_table])))
+					$boucles[$id]->jointures = $x;
+				spip_log("j $nom_table  $x $table");
+				if (($type == 'documents') && $boucle->doublons)
+					{ $descr['documents'] = true;  }
+			}
 		}
-		if (($boucle->type_requete == 'documents') && $boucle->doublons)
-			{ $descr['documents'] = true;  }
 	}
 	// Commencer par reperer les boucles appelees explicitement 
 	// car elles indexent les arguments de maniere derogatoire
diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index 335d790995..87e81a25b2 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -1048,7 +1048,8 @@ function trouver_def_table($nom, &$boucle)
 	  }
 	erreur_squelette(_T('zbug_table_inconnue', array('table' => $nom)),
 			 $boucle->id_boucle);
-	}
+	return false;
+}
 
 // http://doc.spip.org/@trouver_champ_exterieur
 function trouver_champ_exterieur($cle, $joints, &$boucle, $checkarrivee = false)
-- 
GitLab