diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php index aeed16648911f761ed796f2f77aa32195584ee80..29691cd3e0fb17357cddbf710c08d85a98a5834b 100644 --- a/ecrire/public/compiler.php +++ b/ecrire/public/compiler.php @@ -713,7 +713,6 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile) { 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; } } diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php index 87e81a25b296e881f674ad474d0b44205c9e1cef..440f6fbc7e8b9bfe0db95d4b039a3aa621a8b036 100644 --- a/ecrire/public/criteres.php +++ b/ecrire/public/criteres.php @@ -723,9 +723,12 @@ function calculer_critere_infixe($idb, &$boucles, $crit) { global $table_des_tables, $tables_principales, $table_date; global $exceptions_des_jointures, $exceptions_des_tables; + global $table_criteres_infixes; $boucle = &$boucles[$idb]; $type = $boucle->type_requete; $table = $boucle->id_table; + $nom = $table_des_tables[$type]; + list(, $desc) = trouver_def_table($nom ? $nom : $type, $boucle); list($fct, $col, $op, $val, $args_sql) = calculer_critere_infixe_ops($idb, $boucles, $crit); @@ -763,8 +766,6 @@ function calculer_critere_infixe($idb, &$boucles, $crit) { $val[0] = str_replace('image', 'vignette', $val[0]); else { - $nom = $table_des_tables[$type]; - list($nom, $desc) = trouver_def_table($nom ? $nom : $type, $boucle); if (@!array_key_exists($col, $desc['field'])) { $calculer_critere_externe = 'calculer_critere_externe_init'; // gestion par les plugins des jointures tordues pas automatiques mais necessaires @@ -775,11 +776,19 @@ function calculer_critere_infixe($idb, &$boucles, $crit) { list($t, $col) = $exceptions_des_jointures[$table][$col]; } else if (isset($exceptions_des_jointures[$col])) - // on ignore la table, quel luxe! list($t, $col) = $exceptions_des_jointures[$col]; - else $t =''; + else $t =''; // jointure non declaree. La trouver. $table = $calculer_critere_externe($boucle, $boucle->jointures, $col, $desc, ($crit->cond OR $op !='='), $t); - } + list($nom, $desc) = trouver_champ_exterieur($col, $boucle->jointures, $boucle); + } + } + // En fonction du type de la colonne SQL + // la valeur comparee doit etre munie ou non d'apostrophes + if ($op == '=' OR in_array($op, $table_criteres_infixes)) { + if (strpos($val[0], '_q(') === 0 + AND test_sql_int($desc['field'][$col])) + $val[0] = 'intval' . substr($val[0],2); + spip_log("typer $nom $col $idb $d $val[0]"); } // tag du critere pour permettre aux boucles de modifier leurs requetes par defaut en fonction de ca $boucles[$idb]->modificateur['criteres'][$col] = true; @@ -1069,7 +1078,6 @@ function trouver_champ_exterieur($cle, $joints, &$boucle, $checkarrivee = false) // http://doc.spip.org/@calculer_critere_infixe_ops function calculer_critere_infixe_ops($idb, &$boucles, $crit) { - global $table_criteres_infixes; // cas d'une valeur comparee a elle-meme ou son referent if (count($crit->param) == 0) { $op = '='; @@ -1135,13 +1143,6 @@ function calculer_critere_infixe_ops($idb, &$boucles, $crit) $args_sql .= $a[2];; } - if ($op == '=' OR in_array($op, $table_criteres_infixes)) { - list($nom, $desc) = trouver_def_table($boucles[$idb]->id_table, $boucles[$idb]); - $type = $desc['field'][$col]; - if (strpos($val[0], '_q(') === 0 AND test_sql_int($type)) - $val[0] = 'intval' . substr($val[0],2); - } - return array($fct, $col, $op, $val, $args_sql); }