From ade8e117dfbb62f6dbd16b4aca81dfbdbd054579 Mon Sep 17 00:00:00 2001 From: thomascube Date: Tue, 2 Sep 2008 07:42:46 +0000 Subject: Let rcmail class create address book instances --- program/include/rcmail.php | 32 ++++++++++++++++++++++++++++++++ program/steps/addressbook/copy.inc | 9 +++------ program/steps/addressbook/func.inc | 11 +---------- program/steps/mail/addcontact.inc | 16 ++-------------- 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 @@ -234,6 +234,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 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'])) -- cgit v1.2.3