From b1af239ddf4f7c0c75aaaf8f42bec8189dbdea68 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Mon, 15 May 2006 18:09:46 +0000
Subject: [PATCH] =?UTF-8?q?il=20suffisait=20qu'une=20table=20jointe=20a=20?=
 =?UTF-8?q?spip=5Farticles=20comporte=20un=20champ=20titre=20pour=20que=20?=
 =?UTF-8?q?le=20critere=20titre=5Fmot=20ne=20fonctionne=20plus,=20car=20la?=
 =?UTF-8?q?=20jointure=20se=20faisait=20sur=20la=20mauvaise=20table=20C'es?=
 =?UTF-8?q?t=20d'autant=20plus=20bete=20que=20l'on=20savait=20avant=20de?=
 =?UTF-8?q?=20chercher=20quelle=20table=20on=20voulait=20trouver.=20Elle?=
 =?UTF-8?q?=20passe=20donc=20en=20parametre=20qui=20est=20utilis=C3=A9=20a?=
 =?UTF-8?q?=20fin=20de=20verification=20quand=20il=20est=20present.=20Dans?=
 =?UTF-8?q?=20les=20autres=20cas,=20le=20mecanisme=20de=20recherche=20est?=
 =?UTF-8?q?=20inchang=C3=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/public/criteres.php | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index 0c3d3cbf3c..241bf446c0 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -590,7 +590,7 @@ function calculer_critere_infixe($idb, &$boucles, $crit) {
 		if ($exceptions_des_jointures[$col])
 		  // on ignore la table, quel luxe!
 			list($t, $col) = $exceptions_des_jointures[$col];
-		$table = calculer_critere_externe_init($boucle, $col, $desc, $crit);
+		$table = calculer_critere_externe_init($boucle, $col, $desc, $crit, $t);
 	  }
 	}
 	// ajout pour le cas special d'une condition sur le champ statut:
@@ -629,9 +629,9 @@ function calculer_critere_infixe($idb, &$boucles, $crit) {
 // (Exemple: criteres {type_mot=...}{type_mot=...} donne 2 jointures
 // pour selectioner ce qui a exactement ces 2 mots-cles.
 
-function calculer_critere_externe_init(&$boucle, $col, $desc, $crit)
+function calculer_critere_externe_init(&$boucle, $col, $desc, $crit, $checkarrivee = false)
 {
-	$cle = trouver_champ_exterieur($col, $boucle->jointures, $boucle);
+	$cle = trouver_champ_exterieur($col, $boucle->jointures, $boucle, $checkarrivee);
 	if ($cle) {
 		$t = array_search($cle[0], $boucle->from);
 		if ($t) if (!trouver_champ('/\b' . $t  . ".$col" . '\b/', $boucle->where)) return $t;
@@ -798,11 +798,12 @@ function trouver_def_table($nom, &$boucle)
 			 $boucle->id_boucle);
 	}
 
-function trouver_champ_exterieur($cle, $joints, &$boucle)
+function trouver_champ_exterieur($cle, $joints, &$boucle, $checkarrivee = false)
 {
   foreach($joints as $k => $join) {
     if ($join && $table = trouver_def_table($join, $boucle)) {
-      if (array_key_exists($cle, $table[1]['field'])) 
+      if (array_key_exists($cle, $table[1]['field'])
+      	&& ($checkarrivee==false || $checkarrivee==$table[0])) // si on sait ou on veut arriver, il faut que ca colle
 	return  $table;
     }
   }
-- 
GitLab