summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--program/include/rcmail.php32
-rw-r--r--program/steps/addressbook/copy.inc9
-rw-r--r--program/steps/addressbook/func.inc11
-rw-r--r--program/steps/mail/addcontact.inc16
4 files changed, 38 insertions, 30 deletions
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 00dca6ea6..348a91675 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -235,6 +235,38 @@ class rcmail
/**
+ * Return instance of the internal address book class
+ *
+ * @param boolean True if the address book needs to be writeable
+ * @return object rcube_contacts Address book object
+ */
+ public function get_address_book($id, $writeable = false)
+ {
+ $contacts = null;
+ $ldap_config = (array)$this->config->get('ldap_public');
+ $abook_type = strtolower($this->config->get('address_book_type'));
+
+ if ($id && $ldap_config[$id]) {
+ $contacts = new rcube_ldap($ldap_config[$id]);
+ }
+ else if ($abook_type == 'ldap') {
+ // Use the first writable LDAP address book.
+ foreach ($ldap_config as $id => $prop) {
+ if (!$writeable || $prop['writable']) {
+ $contacts = new rcube_ldap($prop);
+ break;
+ }
+ }
+ }
+ else {
+ $contacts = new rcube_contacts($this->db, $this->user->ID);
+ }
+
+ return $contacts;
+ }
+
+
+ /**
* Init output object for GUI and add common scripts.
* This will instantiate a rcmail_template object and set
* environment vars according to the current session and configuration
diff --git a/program/steps/addressbook/copy.inc b/program/steps/addressbook/copy.inc
index af8b87c40..268903bf5 100644
--- a/program/steps/addressbook/copy.inc
+++ b/program/steps/addressbook/copy.inc
@@ -23,12 +23,9 @@ $cid = get_input_value('_cid', RCUBE_INPUT_POST);
$target = get_input_value('_to', RCUBE_INPUT_POST);
if ($cid && preg_match('/^[a-z0-9\-_=]+(,[a-z0-9\-_=]+)*$/i', $cid) && strlen($target) && $target != $source)
{
- if ($target != '0')
- $TARGET = new rcube_ldap($CONFIG['ldap_public'][$target]);
- else
- $TARGET = new rcube_contacts($DB, $_SESSION['user_id']);
-
- $success = false;
+ $success = false;
+ $TARGET = $RCMAIL->get_address_book($target);
+
if ($TARGET && $TARGET->ready && !$TARGET->readonly)
$success = $TARGET->insert($CONTACTS->search($CONTACTS->primary_key, $cid), true);
diff --git a/program/steps/addressbook/func.inc b/program/steps/addressbook/func.inc
index 98c56af78..c4fbab219 100644
--- a/program/steps/addressbook/func.inc
+++ b/program/steps/addressbook/func.inc
@@ -20,16 +20,7 @@
*/
// instantiate a contacts object according to the given source
-if (($source = get_input_value('_source', RCUBE_INPUT_GPC)) && isset($CONFIG['ldap_public'][$source]))
- $CONTACTS = new rcube_ldap($CONFIG['ldap_public'][$source]);
-else if (strtolower($CONFIG['address_book_type']) == 'ldap') {
- // Get the first LDAP address book.
- $source = key((array)$CONFIG['ldap_public']);
- $prop = current((array)$CONFIG['ldap_public']);
- $CONTACTS = new rcube_ldap($prop);
-} else {
- $CONTACTS = new rcube_contacts($DB, $_SESSION['user_id']);
-} // end else
+$CONTACTS = $RCMAIL->get_address_book(($source = get_input_value('_source', RCUBE_INPUT_GPC)));
$CONTACTS->set_pagesize($CONFIG['pagesize']);
diff --git a/program/steps/mail/addcontact.inc b/program/steps/mail/addcontact.inc
index aefdd83de..d98d71faf 100644
--- a/program/steps/mail/addcontact.inc
+++ b/program/steps/mail/addcontact.inc
@@ -20,22 +20,10 @@
*/
$done = false;
+$CONTACTS = $RCMAIL->get_address_book(null, true);
-if (!empty($_POST['_address']))
+if (!empty($_POST['_address']) && is_object($CONTACTS))
{
- $CONTACTS = array();
- if (strtolower($CONFIG['address_book_type']) == 'ldap') {
- // Use the first writable LDAP address book.
- foreach ($CONFIG["ldap_public"] as $id => $prop) {
- if ($prop["writable"]) {
- $CONTACTS = new rcube_ldap($prop);
- break;
- } // end if
- } // end foreach
- } // end if
- else {
- $CONTACTS = new rcube_contacts($DB, $_SESSION['user_id']);
- } // end else
$contact_arr = $IMAP->decode_address_list(get_input_value('_address', RCUBE_INPUT_POST, true), 1, false);
if (!empty($contact_arr[1]['mailto']))