diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php index 0c3d3cbf3cf9450cb1a285867cd1fe778a86713f..241bf446c0678487f084c57ce424b63192de4cf7 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; } }