From 710b1bd68465ad919aabd171f1ab597a192c367b Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Thu, 10 Nov 2011 09:30:51 -0500
Subject: [PATCH] - Add option to skip alternative email addresses in autocompletion

---
 CHANGELOG                             |    1 +
 program/steps/mail/autocomplete.inc   |   14 ++++++++++++--
 program/steps/settings/func.inc       |   10 ++++++++++
 program/localization/en_US/labels.inc |    1 +
 program/localization/pl_PL/labels.inc |    1 +
 config/main.inc.php.dist              |    3 +++
 program/steps/settings/save_prefs.inc |    1 +
 7 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 7e99dca..e9f3559 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Add option to skip alternative email addresses in autocompletion
 - Fix inconsistent behaviour of Compose button in Drafts folder, add Edit button for drafts
 - Fix problem with parsing HTML message body with non-unicode characters (#1487813)
 - Add option to define matching method for addressbook search (#1486564, #1487907)
diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index ef76c2a..fe58350 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -781,4 +781,7 @@
 // Enables spell checking before sending a message.
 $rcmail_config['spellcheck_before_send'] = false;
 
+// Skip alternative email addresses in autocompletion (show one address per contact)
+$rcmail_config['autocomplete_single'] = false;
+
 // end of config file
diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc
index 77b31b6..6aefd6c 100644
--- a/program/localization/en_US/labels.inc
+++ b/program/localization/en_US/labels.inc
@@ -431,6 +431,7 @@
 $labels['reqdsn'] = 'Always request a delivery status notification';
 $labels['replysamefolder'] = 'Place replies in the folder of the message being replied to';
 $labels['defaultaddressbook'] = 'Add new contacts to the selected addressbook';
+$labels['autocompletesingle'] = 'Skip alternative email addresses in autocompletion';
 $labels['spellcheckbeforesend'] = 'Check spelling before sending a message';
 $labels['spellcheckoptions'] = 'Spellcheck Options';
 $labels['spellcheckignoresyms'] = 'Ignore words with symbols';
diff --git a/program/localization/pl_PL/labels.inc b/program/localization/pl_PL/labels.inc
index d45a7a0..cdebe50 100644
--- a/program/localization/pl_PL/labels.inc
+++ b/program/localization/pl_PL/labels.inc
@@ -433,5 +433,6 @@
 $labels['dateformat'] = 'Format daty';
 $labels['timeformat'] = 'Format czasu';
 $labels['isdraft'] = 'To jest kopia robocza wiadomości.';
+$labels['autocompletesingle'] = 'Nie pokazuj alternatywnych adresów przy autouzupełnianiu';
 
 ?>
diff --git a/program/steps/mail/autocomplete.inc b/program/steps/mail/autocomplete.inc
index 8ccfaaa..e40bb76 100644
--- a/program/steps/mail/autocomplete.inc
+++ b/program/steps/mail/autocomplete.inc
@@ -40,8 +40,9 @@
 }
 
 
-$MAXNUM = (int)$RCMAIL->config->get('autocomplete_max', 15);
+$MAXNUM = (int) $RCMAIL->config->get('autocomplete_max', 15);
 $mode   = (int) $RCMAIL->config->get('addressbook_search_mode');
+$single = (bool) $RCMAIL->config->get('autocomplete_single');
 $search = get_input_value('_search', RCUBE_INPUT_GPC, true);
 $source = get_input_value('_source', RCUBE_INPUT_GPC);
 $sid    = get_input_value('_id', RCUBE_INPUT_GPC);
@@ -66,19 +67,28 @@
         $email_arr = (array)$abook->get_col_values('email', $sql_arr, true);
         $email_cnt = count($email_arr);
         foreach ($email_arr as $email) {
-          if (empty($email))
+          if (empty($email)) {
             continue;
+          }
+
           $contact = format_email_recipient($email, $sql_arr['name']);
+
           // skip entries that don't match
           if ($email_cnt > 1 && strpos(mb_strtolower($contact), $search_lc) === false) {
             continue;
           }
+
           // skip duplicates
           if (!in_array($contact, $contacts)) {
             $contacts[] = $contact;
             if (count($contacts) >= $MAXNUM)
               break 2;
           }
+
+          // skip redundant entries (show only first email address)
+          if ($single) {
+            break;
+          }
         }
       }
     }
diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc
index bb144d4..6ba5247 100644
--- a/program/steps/settings/func.inc
+++ b/program/steps/settings/func.inc
@@ -659,6 +659,16 @@
       );
     }
 
+    if (!isset($no_override['autocomplete_single'])) {
+      $field_id = 'rcmfd_autocomplete_single';
+      $checkbox = new html_checkbox(array('name' => '_autocomplete_single', 'id' => $field_id, 'value' => 1));
+
+      $blocks['main']['options']['autocomplete_single'] = array(
+        'title' => html::label($field_id, Q(rcube_label('autocompletesingle'))),
+        'content' => $checkbox->show($config['autocomplete_single']?1:0),
+      );
+    }
+
     break;
 
     // Special IMAP folders
diff --git a/program/steps/settings/save_prefs.inc b/program/steps/settings/save_prefs.inc
index a32f594..d917e11 100644
--- a/program/steps/settings/save_prefs.inc
+++ b/program/steps/settings/save_prefs.inc
@@ -93,6 +93,7 @@
   case 'addressbook':
     $a_user_prefs = array(
       'default_addressbook' => get_input_value('_default_addressbook', RCUBE_INPUT_POST, true),
+      'autocomplete_single' => isset($_POST['_autocomplete_single']) ? TRUE : FALSE,
     );
 
   break;

--
Gitblit v1.9.1