Adds the possibility to do an exact search (closes #791), updates ChangeLog
authorStéphane Jacob <jacou@melix.net>
Wed, 23 Jul 2008 15:38:23 +0000 (17:38 +0200)
committerStéphane Jacob <jacou@melix.net>
Wed, 23 Jul 2008 15:55:01 +0000 (17:55 +0200)
ChangeLog
modules/search/classes.inc.php
templates/search/adv.form.tpl

index 660d5d3..337309c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,7 @@ Bug/Wish:
 
     * Search:
         - #691: Adds search on postcode and thus on "arrondissements"      -JAC
+        - #791: Adds the possibility to do an exact search                 -JAC
 
 ================================================================================
 VERSION 0.9.17                                                        19 07 2008
index 42ee056..5f01c97 100644 (file)
@@ -277,6 +277,8 @@ class QuickSearch extends SField
             if (Env::i('with_soundex') && strlen($s) > 1) {
                 $t = soundex_fr($s);
                 $where[] = "sn$i.soundex = '$t'";
+            } elseif (Env::i('exact')) {
+                $where[] = "sn$i.token = '$s'";
             } else {
                 $t = str_replace('*', '%', $s).'%';
                 $t = str_replace('%%', '%', $t);
@@ -443,6 +445,7 @@ class RefSField extends SField
     function compare()
     {
         $val = addslashes($this->value);
+        if (Env::i('exact')) return "='$val'";
         return $this->exact ? "='$val'" : " LIKE '%$val%'";
     }
 
@@ -581,7 +584,9 @@ class StringSField extends SField
      * @param field nom de champ de la bdd concerné par la clause */
     function get_single_where_statement($field)
     {
-        $regexp = strtr(addslashes($this->value), '-*', '_%');
+        $val = addslashes($this->value);
+        if (Env::i('exact')) return "$field = '$val'";
+        $regexp = strtr($val, '-*', '_%');
         return "$field LIKE '$regexp%'";
     }
 
@@ -612,7 +617,9 @@ class NameSField extends StringSField
 
     function get_single_where_statement($field)
     {
-        $regexp = strtr(addslashes($this->value), '-*', '_%');
+        $val = addslashes($this->value);
+        if (Env::i('exact')) return "$field = '$val'";
+        $regexp = strtr($val, '-*', '_%');
         return "$field LIKE '$regexp%' OR $field LIKE '% $regexp%' OR $field LIKE '%-$regexp%'";
     }
 
index ee53cba..7df08e4 100644 (file)
@@ -415,6 +415,12 @@ checked="checked"{/if}/>Chercher uniquement les adresses où les camarades sont
           <label for="order">Mettre les fiches modifiées récemment en premier.</label>
       </td>
     </tr>
+    <tr>
+      <td colspan="2">
+           <input type='checkbox' name='exact' id="exact" {if $smarty.request.exact}checked='checked'{/if} value='1'/>
+           <label for="exact">Faire une recherche exacte.</label>
+      </td>
+    </tr>
         {/if}
     <tr><td colspan="2"></td></tr>
     <tr>