diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php index 94017f2b540fadfe0459c6c235600436a56340d8..ac479fe480019fa2f2a0ca73fcb4c9e77d272725 100644 --- a/ecrire/public/criteres.php +++ b/ecrire/public/criteres.php @@ -459,7 +459,7 @@ function calculer_criteres ($idb, &$boucles) { function calculer_critere_DEFAUT($idb, &$boucles, $crit) { - list($fct, $col, $op, $val, $table) = + list($fct, $col, $op, $val, $table, $args_sql) = calculer_critere_infixe($idb, $boucles, $crit); // ajout pour le cas special d'une condition sur le champ statut: @@ -485,7 +485,7 @@ function calculer_critere_DEFAUT($idb, &$boucles, $crit) } else $ct = $col; // inserer la fonction SQL - if ($fct) $ct = "$fct($ct)"; + if ($fct) $ct = "$fct($ct$args_sql)"; // inserer la negation (cf !...) if (strtoupper($op) == 'IN') { @@ -524,7 +524,7 @@ function calculer_critere_infixe($idb, &$boucles, $crit) { $type = $boucle->type_requete; $col_table = $boucle->id_table; - list($fct, $col, $op, $val) = + list($fct, $col, $op, $val, $args_sql) = calculer_critere_infixe_ops($idb, $boucles, $crit); // Cas particulier : id_enfant => utiliser la colonne id_objet @@ -565,7 +565,7 @@ function calculer_critere_infixe($idb, &$boucles, $crit) { } // else: champ dans la table, c'est ok. } - return array($fct, $col, $op, $val, $col_table); + return array($fct, $col, $op, $val, $col_table, $args_sql); } // deduction automatique des jointures @@ -740,14 +740,16 @@ function calculer_critere_infixe_ops($idb, &$boucles, $crit) } } - $fct = ''; + $fct = $args = ''; // fonction SQL ? - if (ereg("([A-Za-z_]+)\(([^)]+)\)", $col,$match3)) { - $col = $match3[2]; - $fct = $match3[1]; + if (preg_match('/^(.*)' . SQL_ARGS . '$/', $col, $m)) { + $fct = $m[1]; + preg_match('/^\(([^,]*)(.*)\)$/', $m[2], $a); + $col = $a[1]; + $args_sql = $a[2]; } - return array($fct, $col, $op, $val); + return array($fct, $col, $op, $val, $args_sql); } // compatibilite ancienne version diff --git a/ecrire/public/phraser-html.php b/ecrire/public/phraser-html.php index 58d9f1cddec9fba87e8ac28636fa0293f2b36295..a485ea2dcc07a63f353a95433bb87d0a01f75da1 100644 --- a/ecrire/public/phraser-html.php +++ b/ecrire/public/phraser-html.php @@ -33,7 +33,8 @@ define('CHAMP_ETENDU', '\[([^]\[]*)\(' . NOM_DE_CHAMP . '([^[)]*\)[^]\[]*)\]'); define('BALISE_INCLURE','<INCLU[DR]E[[:space:]]*(\(([^)]*)\))?'); -define('CHAMP_SQL_PLUS_FONC', '`?([A-Za-z_][A-Za-z_0-9]*)\(?([A-Za-z_.]*)\)?`?'); +define('SQL_ARGS', '(\([^)]*\))'); +define('CHAMP_SQL_PLUS_FONC', '`?([A-Za-z_][A-Za-z_0-9]*)' . SQL_ARGS . '?`?'); function phraser_inclure($texte, $ligne, $result) {