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