From 5537d313233def283501a96ae87b49d0cbbb0b8b Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Wed, 10 May 2006 16:30:27 +0000
Subject: [PATCH] =?UTF-8?q?le=20chemin=20de=20jointure=20etait=20loin=20d'?=
 =?UTF-8?q?etre=20le=20plus=20direct=20(critique=20avec=20des=20jointures?=
 =?UTF-8?q?=20ajout=C3=A9es=20par=20les=20plugins=20forms=20ou=20agenda)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/public/criteres.php | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index b9b27d7d05..14d816f359 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -703,10 +703,12 @@ function calculer_jointure(&$boucle, $depart, $arrivee, $col='', $cond=false)
   return $n;
 }
 
-function calculer_chaine_jointures(&$boucle, $depart, $arrivee, $vu=array())
+function calculer_chaine_jointures(&$boucle, $depart, $arrivee, $vu=array(), $milieu_prec = false)
 {
 	list($dnom,$ddesc) = $depart;
 	list($anom,$adesc) = $arrivee;
+	if (!count($vu))
+		$vu[] = $dnom; // ne pas oublier la table de depart
 
 	$keys = $ddesc['key'];
 	if ($v = $adesc['key']['PRIMARY KEY']) {
@@ -727,14 +729,16 @@ function calculer_chaine_jointures(&$boucle, $depart, $arrivee, $vu=array())
 			    ($def = trouver_def_table($v, $boucle))) {
 				list($table,$join) = $def;
 				$milieu = array_intersect($ddesc['key'], trouver_cles_table($join['key']));
-				foreach ($milieu as $k)	{
-					$new[] = $v;
-					$r = calculer_chaine_jointures($boucle, array($table, $join), $arrivee, $new);
-					if ($r)	{
-						array_unshift($r, array($dnom, $def, $k));
-						return $r;
+				$new[] = $v;
+				foreach ($milieu as $k)
+					if ($k!=$milieu_prec) // ne pas repasser par la meme cle car c'est un chemin inutilement long
+					{
+						$r = calculer_chaine_jointures($boucle, array($v, $join), $arrivee, $new, $k);
+						if ($r)	{
+							array_unshift($r, array($dnom, $def, $k));
+							return $r;
+						}
 					}
-				}
 			}
 		}
 	}
-- 
GitLab