diff options
Diffstat (limited to 'program/steps/mail')
-rw-r--r-- | program/steps/mail/autocomplete.inc | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/program/steps/mail/autocomplete.inc b/program/steps/mail/autocomplete.inc index 06209c41b..1e56fb222 100644 --- a/program/steps/mail/autocomplete.inc +++ b/program/steps/mail/autocomplete.inc @@ -5,7 +5,7 @@ | program/steps/mail/autocomplete.inc | | | | This file is part of the RoundCube Webmail client | - | Copyright (C) 2008-2009, RoundCube Dev Team | + | Copyright (C) 2008-2010, RoundCube Dev Team | | Licensed under the GNU GPL | | | | PURPOSE: | @@ -23,7 +23,7 @@ $MAXNUM = 15; $contacts = array(); $book_types = (array) $RCMAIL->config->get('autocomplete_addressbooks', 'sql'); -if ($book_types && $search = get_input_value('_search', RCUBE_INPUT_POST, true)) { +if ($book_types && $search = get_input_value('_search', RCUBE_INPUT_GPC, true)) { foreach ($book_types as $id) { $abook = $RCMAIL->get_address_book($id); @@ -32,16 +32,42 @@ if ($book_types && $search = get_input_value('_search', RCUBE_INPUT_POST, true)) if ($result = $abook->search(array('email','name'), $search)) { while ($sql_arr = $result->iterate()) { $contacts[] = format_email_recipient($sql_arr['email'], $sql_arr['name']); - if (count($contacts) >= $MAXNUM) + if (count($contacts) >= $MAXNUM) break 2; } } + + // also list matching contact groups + if ($abook->groups) { + foreach ($abook->list_groups($search) as $group) { + $members = array(); + $abook->reset(); + $abook->set_group($group['ID']); + $result = $abook->list_records(array('email','name')); + while ($result && ($sql_arr = $result->iterate())) + $members[] = format_email_recipient($sql_arr['email'], $sql_arr['name']); + + if (count($members)) { + $contacts[] = array('name' => $group['name'] . ' (' . rcube_label('group') . ')', 'members' => $members); + if (count($contacts) >= $MAXNUM) + break; + } + } + } } - sort($contacts); + usort($contacts, 'contact_results_sort'); } $OUTPUT->command('ksearch_query_results', $contacts, $search); $OUTPUT->send(); + +function contact_results_sort($a, $b) +{ + $name_a = is_array($a) ? $a['name'] : $a; + $name_b = is_array($b) ? $b['name'] : $b; + return strcmp(trim($name_a, '" '), trim($name_b, '" ')); +} + ?> |