From 85b0f76ec8fe27bc8c0f46813463666ce67b84c1 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Wed, 24 Oct 2007 06:57:21 +0000 Subject: [PATCH] =?UTF-8?q?Un=20crit=C3=A8re=20conditionnel=20sur=20date?= =?UTF-8?q?=20doit=20=C3=AAtre=20trait=C3=A9=20compl=C3=A8tement=20=C3=A0?= =?UTF-8?q?=20part=20sinon=20il=20est=20toujours=20vrai=20car=20SPIP=20met?= =?UTF-8?q?=20d'office=20la=20date=20dans=20le=20contexte=20global.=20Bug?= =?UTF-8?q?=20d=C3=A9couvert=20=C3=A0=20l'occasion=20de=20la=20production?= =?UTF-8?q?=20automatique=20de=20squelettes=20(Mathieu).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/public/criteres.php | 44 ++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php index f201275b50..feafba4b54 100644 --- a/ecrire/public/criteres.php +++ b/ecrire/public/criteres.php @@ -670,19 +670,21 @@ function calculer_critere_DEFAUT($idb, &$boucles, $crit) if ($crit->not) $where = array("'NOT'", $where); - // inserer la condition (cf {lang?}) - - $boucles[$idb]->where[]= (!$crit->cond ? $where : - array("'?'", - calculer_argument_precedent($idb, $col, $boucles), - $where, - "''")); + // inserer la condition (cf {lang?}) + // traiter a part la date, elle est mise d'office par SPIP, + if ($crit->cond) { + if (tester_param_date('articles', $col)) + $pred = '@$Pile["env"][\'' . $col ."']"; + else $pred = calculer_argument_precedent($idb, $col, $boucles); + $where = array("'?'", $pred, $where,"''"); + } + $boucles[$idb]->where[]= $where; } // http://doc.spip.org/@calculer_critere_infixe function calculer_critere_infixe($idb, &$boucles, $crit) { - global $table_date, $table_criteres_infixes; + global $table_criteres_infixes; global $exceptions_des_jointures, $exceptions_des_tables; $boucle = &$boucles[$idb]; @@ -713,14 +715,10 @@ function calculer_critere_infixe($idb, &$boucles, $crit) { } // Cas particulier : expressions de date - else if (isset($table_date[$type]) - AND preg_match(",^((age|jour|mois|annee)_relatif|date|mois|annee|jour|heure|age)(_[a-z]+)?$,", - $col, $regs)) { + else if ($regs = tester_param_date($boucle->type_requete, $col)) { list($col, $table) = calculer_critere_infixe_date($idb, $boucles, $regs); - } - - else { + } else { 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 @@ -774,6 +772,7 @@ function calculer_critere_infixe($idb, &$boucles, $crit) { return array($arg, $op, $val, $col_alias); } + // Faute de copie du champ id_secteur dans la table des forums, // faut le retrouver par jointure // Pour chaque Row il faudrait tester si le forum est @@ -1022,7 +1021,13 @@ function calculer_critere_infixe_ops($idb, &$boucles, $crit) // de la boucle superieure else if ($val == 'id_enfant') $val = 'id_parent'; - $val = array(kwote(calculer_argument_precedent($idb, $val, $boucles))); + // un critere conditionnel sur date est traite a part + // car la date est mise d'office par SPIP, + // il faut + if ($crit->cond AND tester_param_date('articles', $col)) + $val ='@$Pile["env"][\'' . $col ."']"; + else $val = calculer_argument_precedent($idb, $val, $boucles); + $val = array(kwote($val)); } } else { // comparaison explicite @@ -1214,5 +1219,12 @@ function calculer_param_date($date_compare, $date_orig) { ")))"; } - +function tester_param_date($type, $col) +{ + global $table_date; + if (isset($table_date[$type]) + AND preg_match(",^((age|jour|mois|annee)_relatif|date|mois|annee|jour|heure|age)(_[a-z]+)?$,", $col, $regs)) + return $regs; + else return false; +} ?> -- GitLab