From d7344819834e469c2e5875f756f1ad973b2e06d9 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Fri, 27 May 2011 07:22:56 -0400
Subject: [PATCH] - Added option to specify to which address book add new contacts

---
 CHANGELOG                             |    1 +
 program/steps/settings/func.inc       |   27 +++++++++++++++++++++++++++
 program/localization/en_US/labels.inc |    1 +
 program/localization/pl_PL/labels.inc |    1 +
 config/main.inc.php.dist              |    5 +++++
 program/steps/settings/save_prefs.inc |   12 ++++++++++++
 program/steps/mail/addcontact.inc     |   12 ++++++++++--
 7 files changed, 57 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 64c0ad3..807cd82 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Added option to specify to which address book add new contacts
 - Added plugin hook for keep-alive requests
 - Store user preferences in session when write-master is not available and session is stored in memcache, write them later
 - Improve performence of folder manager operations
diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index 29af284..ddb1eda 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -698,4 +698,9 @@
 // Sets default mode of Forward feature to "forward as attachment"
 $rcmail_config['forward_attachment'] = false;
 
+// Defines address book (internal index) to which new contacts will be added
+// By default it is the first writeable addressbook.
+// Note: Use '0' for built-in address book.
+$rcmail_config['default_addressbook'] = null;
+
 // end of config file
diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc
index e9d6b6b..3e88d09 100644
--- a/program/localization/en_US/labels.inc
+++ b/program/localization/en_US/labels.inc
@@ -412,6 +412,7 @@
 $labels['reqmdn'] = 'Always request a return receipt';
 $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['folder']  = 'Folder';
 $labels['folders']  = 'Folders';
diff --git a/program/localization/pl_PL/labels.inc b/program/localization/pl_PL/labels.inc
index d51b59e..652b302 100644
--- a/program/localization/pl_PL/labels.inc
+++ b/program/localization/pl_PL/labels.inc
@@ -406,5 +406,6 @@
 $labels['personalfolder'] = 'Folder prywatny';
 $labels['otherfolder'] = 'Folder innego użytkownika'; 
 $labels['sharedfolder'] = 'Folder współdzielony';
+$labels['defaultaddressbook'] = 'Nowe kontakty dodawaj do wybranej książki adresowej';
 
 ?>
diff --git a/program/steps/mail/addcontact.inc b/program/steps/mail/addcontact.inc
index 0baf6cd..57bc2a1 100644
--- a/program/steps/mail/addcontact.inc
+++ b/program/steps/mail/addcontact.inc
@@ -23,8 +23,16 @@
 if (!$OUTPUT->ajax_call)
   return;
 
-$done = false;
-$CONTACTS = $RCMAIL->get_address_book(null, true);
+$abook = $RCMAIL->config->get('default_addressbook');
+
+// Get configured addressbook
+$CONTACTS = $RCMAIL->get_address_book($abook, true);
+
+// Get first writeable addressbook if the configured doesn't exist
+// This can happen when user deleted the addressbook (e.g. Kolab folder)
+if ($abook !== null && !is_object($CONTACTS)) {
+  $CONTACTS = $RCMAIL->get_address_book(null, true);
+}
 
 if (!empty($_POST['_address']) && is_object($CONTACTS))
 {
diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc
index a44d6c8..280185e 100644
--- a/program/steps/settings/func.inc
+++ b/program/steps/settings/func.inc
@@ -131,6 +131,7 @@
   $sections['mailbox'] = array('id' => 'mailbox', 'section' => rcube_label('mailboxview'));
   $sections['compose'] = array('id' => 'compose', 'section' => rcube_label('messagescomposition'));
   $sections['mailview'] = array('id' => 'mailview','section' => rcube_label('messagesdisplaying'));
+  $sections['addressbook'] = array('id' => 'addressbook','section' => rcube_label('addressbook'));
   $sections['folders'] = array('id' => 'folders', 'section' => rcube_label('specialfolders'));
   $sections['server'] = array('id' => 'server',  'section' => rcube_label('serversettings'));
 
@@ -582,6 +583,32 @@
 
     break;
 
+
+    // Addressbook config
+    case 'addressbook':
+
+    $blocks = array(
+      'main' => array('name' => Q(rcube_label('mainoptions'))),
+    );
+
+    if (!isset($no_override['default_addressbook'])
+      && ($books = $RCMAIL->get_address_sources(true))
+    ) {
+      $field_id = 'rcmfd_default_addressbook';
+      $select_abook = new html_select(array('name' => '_default_addressbook', 'id' => $field_id));
+
+      foreach ($books as $book) {
+        $select_abook->add($book['name'], $book['id']);
+      }
+
+      $blocks['main']['options']['default_addressbook'] = array(
+        'title' => html::label($field_id, Q(rcube_label('defaultaddressbook'))),
+        'content' => $select_abook->show($config['default_addressbook']),
+      );
+    }
+
+    break;
+
     // Special IMAP folders
     case 'folders':
 
diff --git a/program/steps/settings/save_prefs.inc b/program/steps/settings/save_prefs.inc
index 42ad0b9..031e0d3 100644
--- a/program/steps/settings/save_prefs.inc
+++ b/program/steps/settings/save_prefs.inc
@@ -37,6 +37,7 @@
     );
 
   break;
+
   case 'mailbox':
     $a_user_prefs = array(
       'preview_pane'         => isset($_POST['_preview_pane']) ? TRUE : FALSE,
@@ -48,6 +49,7 @@
     );
 
   break;
+
   case 'mailview':
     $a_user_prefs = array(
       'prefer_html'     => isset($_POST['_prefer_html']) ? TRUE : FALSE,
@@ -58,6 +60,7 @@
     );
 
   break;
+
   case 'compose':
     $a_user_prefs = array(
       'htmleditor'         => intval($_POST['_htmleditor']),
@@ -74,6 +77,14 @@
     );
 
   break;
+
+  case 'addressbook':
+    $a_user_prefs = array(
+      'default_addressbook' => get_input_value('_default_addressbook', RCUBE_INPUT_POST),
+    );
+
+  break;
+
   case 'server':
     $a_user_prefs = array(
       'read_when_deleted' => isset($_POST['_read_when_deleted']) ? TRUE : FALSE,
@@ -85,6 +96,7 @@
     );
 
   break;
+
   case 'folders':
     $a_user_prefs = array(
       'drafts_mbox' => get_input_value('_drafts_mbox', RCUBE_INPUT_POST),

--
Gitblit v1.9.1