From a61bbb24aafec5718ca9bc985e7c596c5821f018 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Fri, 26 Mar 2010 12:38:20 -0400
Subject: [PATCH] Added basic contact groups feature

---
 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 06209c4..1e56fb2 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 @@
 $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 ($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, '" '));
+}
+
 ?>

--
Gitblit v1.9.1