You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2010-12-16 13:10:59

eiseli
Member
From: Switzerland
Registered: 2008-06-10
Posts: 148

Définir un critère de recherche "aujourd'hui" dans le moteur

Ce serait très pratique pour les marque-pages.

Actuellement, il n'est pas possible non plus de définir des jours relatifs à aujourd'hui, car actuellement il n'y a que la syntaxe type >-1 qui est résolue à > ADDDATE(NOW(), INTERVAL -1 MONTH )

Ce serait bien de pouvoir définir > NOW-1 qui deviendrait > ADDATE(NOW(), INTERVAL -1 DAY)

En attendant, j'ai patché mon système comme suit:

--- glpi-0.78-orig/inc/search.class.php 2010-11-15 13:35:47.000000000 +0100
+++ glpi/inc/search.class.php   2010-12-16 11:45:07.000000000 +0100
@@ -2411,23 +2411,32 @@

                $val=preg_replace($search,$replace,$val);

-               if (preg_match("/([<>=]+)(.*)/",$val,$regs)) {
-                  if (is_numeric($regs[2])) {
+               if (preg_match("/([<>=]+)(NOW)(.*)/",$val,$regs)) {
+                  if (is_numeric($regs[3])) {
                      return $link." $date_computation ".$regs[1]."
-                              ADDDATE(NOW(), INTERVAL ".$regs[2]." $search_unit) ";
+                              ADDDATE(NOW(), INTERVAL ".$regs[3]." DAY ) ";
                   } else {
-                     // Reformat date if needed
-                     $regs[2]=preg_replace('@(\d{1,2})(-|/)(\d{1,2})(-|/)(\d{4})@','\5-\3-\1',$regs[2]);
-                     if (preg_match('/[0-9]{2,4}-[0-9]{1,2}-[0-9]{1,2}/',$regs[2])) {
-                        return $link." $date_computation ".$regs[1]." '".$regs[2]."'";
+                     return "";
+                  }
+               } else {
+                  if (preg_match("/([<>=]+)(.*)/",$val,$regs)) {
+                     if (is_numeric($regs[2])) {
+                        return $link." $date_computation ".$regs[1]."
+                                 ADDDATE(NOW(), INTERVAL ".$regs[2]." $search_unit) ";
                      } else {
-                        return "";
+                        // Reformat date if needed
+                        $regs[2]=preg_replace('@(\d{1,2})(-|/)(\d{1,2})(-|/)(\d{4})@','\5-\3-\1',$regs[2]);
+                        if (preg_match('/[0-9]{2,4}-[0-9]{1,2}-[0-9]{1,2}/',$regs[2])) {
+                           return $link." $date_computation ".$regs[1]." '".$regs[2]."'";
+                        } else {
+                           return "";
+                        }
                      }
+                  } else { // standard search
+                     // Date format modification if needed
+                     $val=preg_replace('@(\d{1,2})(-|/)(\d{1,2})(-|/)(\d{4})@','\5-\3-\1',$val);
+                     return makeTextCriteria($date_computation,$val,$nott,$link);
                   }
-               } else { // standard search
-                  // Date format modification if needed
-                  $val=preg_replace('@(\d{1,2})(-|/)(\d{1,2})(-|/)(\d{4})@','\5-\3-\1',$val);
-                  return makeTextCriteria($date_computation,$val,$nott,$link);
                }
                break;
             case "right" :

Explication: si le champ contient une valeur de type OPERATEUR suivi du mot "NOW", suivi d'un nombre, il convertit la recherche en jours relatifs à aujourd'hui. C'est vraiment un hack très rapide pour qui a besoin d'une chose similaire. Mais il faudrait vraiment se poser la question si une syntaxe plus générique ne devrait pas être créée, genre:

- Suggestion de Remi sur IRC: accepter une syntaxe genre 1D, 1W, 1M, mais il y a le problème de la localisation
- Suggestion de moi-même: "NOW - 0000-00-01" pour hier, NOW - 0000-01-00 pour le mois passé etc... Pas de problème de localisation alors, c'est un peu "complexe" mais nettement plus transparent et plus flexible que la solution actuelle.


Working environment: Fedora 22, GLPI 0.90.1, upgraded from 0.72.0, 0.78, 0.83 PHP/5.6.16, MySQL/10.0.21-MariaDB, Apache/2.4.17, Firefox 43
Transifex: https://www.transifex.com/accounts/profile/eiseli/

Offline

#2 2011-01-11 18:11:48

eiseli
Member
From: Switzerland
Registered: 2008-06-10
Posts: 148

Re: Définir un critère de recherche "aujourd'hui" dans le moteur

Note: Ce workaround n'est que nécessaire pour la 0.78. Dès la 0.80, ce problème est corrigé par
https://forge.indepnet.net/issues/2224
et https://forge.indepnet.net/issues/2197


Working environment: Fedora 22, GLPI 0.90.1, upgraded from 0.72.0, 0.78, 0.83 PHP/5.6.16, MySQL/10.0.21-MariaDB, Apache/2.4.17, Firefox 43
Transifex: https://www.transifex.com/accounts/profile/eiseli/

Offline

Board footer

Powered by FluxBB