From 08b796f83cdfc650d47c6a9ebca3b04fef80cea5 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Fri, 29 Jul 2011 02:38:42 -0400
Subject: [PATCH] - Fixed search fields handling in quick-search

---
 program/steps/addressbook/search.inc |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/program/steps/addressbook/search.inc b/program/steps/addressbook/search.inc
index bb2f4d2..352556d 100644
--- a/program/steps/addressbook/search.inc
+++ b/program/steps/addressbook/search.inc
@@ -56,7 +56,10 @@
         $fields = explode(',', get_input_value('_headers', RCUBE_INPUT_GET));
 
         if (empty($fields)) {
-            $fields = $SEARCH_MODS_DEFAULT;
+            $fields = array_keys($SEARCH_MODS_DEFAULT);
+        }
+        else {
+            $fields = array_filter($fields);
         }
 
         // update search_mods setting
@@ -66,7 +69,7 @@
             $RCMAIL->user->save_prefs(array('addressbook_search_mods' => $search_mods));
         }
 
-        if ($fields['*'] || count($fields) == count($SEARCH_MODS_DEFAULT)) {
+        if (in_array('*', $fields)) {
             $fields = '*';
         }
     }
@@ -79,7 +82,7 @@
     foreach ($sources as $s) {
         $source = $RCMAIL->get_address_book($s['id']);
 
-        // check if all search fields are supported....
+        // check if search fields are supported....
         if (is_array($fields)) {
             $cols = $source->coltypes[0] ? array_flip($source->coltypes) : $source->coltypes;
             $supported = 0;
@@ -90,8 +93,9 @@
                 }
             }
 
-            // ...if not, we can skip this source
-            if ($supported < count($fields)) {
+            // in advanced search we require all fields (AND operator)
+            // in quick search we require at least one field (OR operator)
+            if (($adv && $supported < count($fields)) || (!$adv && !$supported)) {
                 continue;
             }
         }

--
Gitblit v1.9.1