summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--program/steps/addressbook/search.inc14
1 files changed, 9 insertions, 5 deletions
diff --git a/program/steps/addressbook/search.inc b/program/steps/addressbook/search.inc
index bb2f4d2ad..352556de0 100644
--- a/program/steps/addressbook/search.inc
+++ b/program/steps/addressbook/search.inc
@@ -56,7 +56,10 @@ function rcmail_contact_search()
$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 @@ function rcmail_contact_search()
$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 @@ function rcmail_contact_search()
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 @@ function rcmail_contact_search()
}
}
- // ...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;
}
}