From a7a276708e95d66c9243ac62f82c4a1dd671cf2e Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Wed, 1 Mar 2006 13:33:14 +0000 Subject: [PATCH] =?UTF-8?q?En=20parlant=20de=20fonction=20SQL,=20plutot=20?= =?UTF-8?q?que=20de=20produire=20une=20requete=20incorrecte,=20=20on=20rep?= =?UTF-8?q?=C3=A8re=20maintenant=20des=20fonctions=20a=20plusieurs=20argum?= =?UTF-8?q?ents,=20ce=20qui=20permet=20en=20particulier=20un=20critere=20c?= =?UTF-8?q?omparant=20des=20titres=20commen=C3=A7ant=20par=20des=20numeros?= =?UTF-8?q?:=20{CONV(titre,10,10)=3D(#TITRE|intval)}?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/public/criteres.php | 20 +++++++++++--------- ecrire/public/phraser-html.php | 3 ++- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php index 94017f2b54..ac479fe480 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 58d9f1cdde..a485ea2dcc 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) { -- GitLab