From 4fbbd81b9b2230df3b06b773b829f0e3991664f3 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Mon, 26 Aug 2013 04:29:23 -0400
Subject: [PATCH] Fix bugs when invoking contact creation form when read-only addressbook is selected (#1489296)

---
 CHANGELOG                          |    1 +
 program/steps/addressbook/edit.inc |   14 ++++++--------
 program/include/rcmail.php         |   17 +++++++++++++++++
 3 files changed, 24 insertions(+), 8 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index afb03db..51a240b 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Fix bugs when invoking contact creation form when read-only addressbook is selected (#1489296)
 - Fix identity selection on reply (#1489291)
 - Fix so additional headers are added to all messages sent (#1489284)
 - Fix display issue after moving folder in Folder Manager (#1489293)
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 4cfaca1..c9350bd 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -257,6 +257,23 @@
 
 
   /**
+   * Return identifier of the address book object
+   *
+   * @param rcube_addressbook Addressbook source object
+   *
+   * @return string Source identifier
+   */
+  public function get_address_book_id($object)
+  {
+    foreach ($this->address_books as $index => $book) {
+      if ($book === $object) {
+        return $index;
+      }
+    }
+  }
+
+
+  /**
    * Return address books list
    *
    * @param boolean True if the address book needs to be writeable
diff --git a/program/steps/addressbook/edit.inc b/program/steps/addressbook/edit.inc
index d175c05..7ddd3e5 100644
--- a/program/steps/addressbook/edit.inc
+++ b/program/steps/addressbook/edit.inc
@@ -43,16 +43,14 @@
 else {
     $source = get_input_value('_source', RCUBE_INPUT_GPC);
 
-    if (!strlen($source)) {
-        // Give priority to configured default
-        $source = $RCMAIL->config->get('default_addressbook');
+    if (strlen($source)) {
+        $CONTACTS = $RCMAIL->get_address_book($source, true);
     }
 
-    $CONTACTS = $RCMAIL->get_address_book($source, true);
-
-    // find writable addressbook
-    if (!$CONTACTS || $CONTACTS->readonly)
-        $source = $RCMAIL->get_address_book(-1, true);
+    if (!$CONTACTS || $CONTACTS->readonly) {
+        $CONTACTS = $RCMAIL->get_address_book(-1, true);
+        $source   = $RCMAIL->get_address_book_id($CONTACTS);
+    }
 
     // Initialize addressbook
     $CONTACTS = rcmail_contact_source($source, true);

--
Gitblit v1.9.1