From ecf295f6ef2b83c5e51cc74adf833fd8e18b6cfb Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Tue, 14 Jun 2011 09:45:26 -0400
Subject: [PATCH] - Added searching in all addressbook sources (global-search) - Added addressbook source selection in contacts import

---
 program/steps/addressbook/import.inc |   65 ++++++++++++++++++++------------
 1 files changed, 40 insertions(+), 25 deletions(-)

diff --git a/program/steps/addressbook/import.inc b/program/steps/addressbook/import.inc
index 4583be5..fdac962 100644
--- a/program/steps/addressbook/import.inc
+++ b/program/steps/addressbook/import.inc
@@ -13,9 +13,10 @@
  |                                                                       |
  +-----------------------------------------------------------------------+
  | Author: Thomas Bruederli <roundcube@gmail.com>                        |
+ | Author: Aleksander Machniak <machniak@kolabsys.com>                   |
  +-----------------------------------------------------------------------+
 
- $Id: $
+ $Id$
 
 */
 
@@ -26,30 +27,44 @@
 {
   global $RCMAIL, $OUTPUT;
   $target = get_input_value('_target', RCUBE_INPUT_GPC);
-  
+
   $attrib += array('id' => "rcmImportForm");
-  
-  $abook = new html_hiddenfield(array('name' => '_target', 'value' => $target));
-  $form = $abook->show();
+
+  $writable_books = $RCMAIL->get_address_sources(true);
 
   $upload = new html_inputfield(array('type' => 'file', 'name' => '_file', 'id' => 'rcmimportfile', 'size' => 40));
-  $form .= html::p(null, html::label('rcmimportfile', rcube_label('importfromfile')) . html::br() . $upload->show());
-  
+  $form = html::p(null, html::label('rcmimportfile', rcube_label('importfromfile')) . $upload->show());
+
+  // addressbook selector
+  if (count($writable_books) > 1) {
+    $select = new html_select(array('name' => '_target', 'id' => 'rcmimporttarget'));
+
+    foreach ($writable_books as $book)
+        $select->add($book['name'], $book['id']);
+
+    $form .= html::p(null, html::label('rcmimporttarget', rcube_label('importtarget'))
+        . $select->show($target));
+  }
+  else {
+    $abook = new html_hiddenfield(array('name' => '_target', 'value' => key($writable_books)));
+    $form .= $abook->show();
+  }
+
   $check_replace = new html_checkbox(array('name' => '_replace', 'value' => 1, 'id' => 'rcmimportreplace'));
   $form .= html::p(null, $check_replace->show(get_input_value('_replace', RCUBE_INPUT_GPC)) .
     html::label('rcmimportreplace', rcube_label('importreplace')));
-  
+
   $OUTPUT->add_label('selectimportfile','importwait');
   $OUTPUT->add_gui_object('importform', $attrib['id']);
-  
+
   $out = html::p(null, Q(rcube_label('importtext'), 'show'));
-  
+
   $out .= $OUTPUT->form_tag(array(
       'action' => $RCMAIL->url('import'),
       'method' => 'post',
       'enctype' => 'multipart/form-data') + $attrib,
     $form);
-  
+
   return $out;
 }
 
@@ -60,19 +75,19 @@
 function rcmail_import_confirm($attrib)
 {
   global $IMPORT_STATS;
-  
+
   $vars = get_object_vars($IMPORT_STATS);
   $vars['names'] = $vars['skipped_names'] = '';
-  
+
   $content = html::p(null, rcube_label(array(
       'name' => 'importconfirm',
       'nr' => $IMORT_STATS->inserted,
       'vars' => $vars,
     )) . ($IMPORT_STATS->names ? ':' : '.'));
-    
+
   if ($IMPORT_STATS->names)
     $content .= html::p('em', join(', ', array_map('Q', $IMPORT_STATS->names)));
-  
+
   if ($IMPORT_STATS->skipped) {
       $content .= html::p(null, rcube_label(array(
           'name' => 'importconfirmskipped',
@@ -81,7 +96,7 @@
         )) . ':');
       $content .= html::p('em', join(', ', array_map('Q', $IMPORT_STATS->skipped_names)));
   }
-  
+
   return html::div($attrib, $content);
 }
 
@@ -93,10 +108,10 @@
 {
   global $IMPORT_STATS, $OUTPUT;
   $target = get_input_value('_target', RCUBE_INPUT_GPC);
-  
+
   $attrib += array('type' => 'input');
   unset($attrib['name']);
-  
+
   if (is_object($IMPORT_STATS)) {
     $attrib['class'] = trim($attrib['class'] . ' mainaction');
     $out = $OUTPUT->button(array('command' => 'list', 'prop' => $target, 'label' => 'done') + $attrib);
@@ -107,7 +122,7 @@
     $attrib['class'] = trim($attrib['class'] . ' mainaction');
     $out .= $OUTPUT->button(array('command' => 'import', 'label' => 'import') + $attrib);
   }
-  
+
   return $out;
 }
 
@@ -137,13 +152,13 @@
     $IMPORT_STATS->skipped_names = array();
     $IMPORT_STATS->count = count($vcards);
     $IMPORT_STATS->inserted = $IMPORT_STATS->skipped = $IMPORT_STATS->nomail = $IMPORT_STATS->errors = 0;
-    
+
     if ($replace)
       $CONTACTS->delete_all();
-    
+
     foreach ($vcards as $vcard) {
       $email = $vcard->email[0];
-      
+
       // skip entries without an e-mail address
       if (empty($email)) {
         $IMPORT_STATS->nomail++;
@@ -152,7 +167,7 @@
 
       // We're using UTF8 internally
       $email = rcube_idn_to_utf8($email);
-      
+
       if (!$replace && $email) {
         // compare e-mail address
         $existing = $CONTACTS->search('email', $email, false, false);
@@ -165,10 +180,10 @@
           continue;
         }
       }
-      
+
       $a_record = $vcard->get_assoc();
       $a_record['vcard'] = $vcard->export();
-      
+
       $plugin = $RCMAIL->plugins->exec_hook('contact_create', array('record' => $a_record, 'source' => null));
       $a_record = $plugin['record'];
 

--
Gitblit v1.9.1