[SPIP] ~maj v3.0.14-->v3.0.17
[ptitvelo/web/www.git] / www / ecrire / public / criteres.php
index 562414a..92b7cc2 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2012                                                *
+ *  Copyright (c) 2001-2014                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -275,6 +275,11 @@ function critere_recherche_dist($idb, &$boucles, $crit){
 
        $boucle = &$boucles[$idb];
 
+       if (!$boucle->primary OR strpos($boucle->primary, ',')){
+               erreur_squelette(_T('zbug_critere_sur_table_sans_cle_primaire',array('critere'=>'recherche')), $boucle);
+               return;
+       }
+
        if (isset($crit->param[0]))
                $quoi = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
        else
@@ -293,6 +298,7 @@ function critere_recherche_dist($idb, &$boucles, $crit){
        }
        ';
 
+
        $t = $boucle->id_table.'.'.$boucle->primary;
        if (!in_array($t, $boucles[$idb]->select))
                $boucle->select[] = $t; # pour postgres, neuneu ici
@@ -1604,7 +1610,9 @@ function calculer_critere_infixe_date($idb, &$boucles, $col){
        if (!preg_match(",^((age|jour|mois|annee)_relatif|date|mois|annee|jour|heure|age)(_[a-z]+)?$,", $col, $regs)) return '';
        $boucle = $boucles[$idb];
        $table = $boucle->show;
-       
+       // si c'est une colonne de la table, ne rien faire
+       if(isset($table['field'][$col])) return '';
+
        if (!$table['date'] && !isset($GLOBALS['table_date'][$table['id_table']])) return '';
        $pred = $date_orig = isset($GLOBALS['table_date'][$table['id_table']])? $GLOBALS['table_date'][$table['id_table']] : $table['date'];
        $col = $regs[1];
@@ -1612,7 +1620,7 @@ function calculer_critere_infixe_date($idb, &$boucles, $col){
                # Recherche de l'existence du champ date_xxxx,
                # si oui choisir ce champ, sinon choisir xxxx
 
-               if ($table['field']["date$suite"])
+               if (isset($table['field']["date$suite"]))
                        $date_orig = 'date'.$suite;
                else
                        $date_orig = substr($suite, 1);
@@ -1653,12 +1661,7 @@ function calculer_critere_infixe_date($idb, &$boucles, $col){
                        $col_vraie = "";// comparer a un int (par defaut)
                        break;
                case 'jour_relatif':
-                       $col = "LEAST(TO_DAYS(".$date_compare.")-TO_DAYS(".
-                              $date_orig."), DAYOFMONTH(".$date_compare.
-                              ")-DAYOFMONTH(".$date_orig.")+30.4368*(MONTH(".
-                              $date_compare.")-MONTH(".$date_orig.
-                              "))+365.2422*(YEAR(".$date_compare.")-YEAR(".
-                              $date_orig.")))";
+                       $col = "(TO_DAYS(".$date_compare.")-TO_DAYS(".$date_orig."))";
                        $col_vraie = "";// comparer a un int (par defaut)
                        break;
                case 'mois_relatif':
@@ -1881,7 +1884,7 @@ function critere_noeud_dist($idb, &$boucles, $crit){
        $primary = $boucle->primary;
 
        if (!$primary OR strpos($primary, ',')){
-               erreur_squelette(_T('zbug_doublon_sur_table_sans_cle_primaire'), "BOUCLE$idb");
+               erreur_squelette(_T('zbug_doublon_sur_table_sans_cle_primaire'), $boucle);
                return;
        }
        $table = $boucle->type_requete;