diff --git a/program/include/rcmail.php b/program/include/rcmail.php index 63ae8e20f..c70170209 100644 --- a/program/include/rcmail.php +++ b/program/include/rcmail.php @@ -171,7 +171,7 @@ class rcmail extends rcube /** * Return instance of the internal address book class * - * @param string Address book identifier + * @param string Address book identifier (-1 for default addressbook) * @param boolean True if the address book needs to be writeable * * @return rcube_contacts Address book object @@ -180,17 +180,17 @@ class rcmail extends rcube { $contacts = null; $ldap_config = (array)$this->config->get('ldap_public'); - $abook_type = strtolower($this->config->get('address_book_type')); // 'sql' is the alias for '0' used by autocomplete if ($id == 'sql') - $id = '0'; + $id = '0'; + else if ($id == -1) { + $id = $this->config->get('default_addressbook'); + $default = true; + } // use existing instance - if (isset($this->address_books[$id]) && is_object($this->address_books[$id]) - && is_a($this->address_books[$id], 'rcube_addressbook') - && (!$writeable || !$this->address_books[$id]->readonly) - ) { + if (isset($this->address_books[$id]) && ($this->address_books[$id] instanceof rcube_addressbook)) { $contacts = $this->address_books[$id]; } else if ($id && $ldap_config[$id]) { @@ -206,14 +206,16 @@ class rcmail extends rcube if ($plugin['instance'] instanceof rcube_addressbook) { $contacts = $plugin['instance']; } - // get first source from the list - else if (!$id) { - $source = reset($this->get_address_sources($writeable)); - if (!empty($source)) { - $contacts = $this->get_address_book($source['id']); - if ($contacts) - $id = $source['id']; - } + } + + // Get first addressbook from the list if configured default doesn't exist + // This can happen when user deleted the addressbook (e.g. Kolab folder) + if (!$contacts && (!$id || $default)) { + $source = reset($this->get_address_sources($writeable)); + if (!empty($source)) { + $contacts = $this->get_address_book($source['id']); + if ($contacts) + $id = $source['id']; } } @@ -225,6 +227,10 @@ class rcmail extends rcube true, true); } + if ($writeable && $contacts->readonly) { + return null; + } + // set configured sort order if ($sort_col = $this->config->get('addressbook_sort_col')) $contacts->set_sort_order($sort_col); diff --git a/program/steps/mail/addcontact.inc b/program/steps/mail/addcontact.inc index 2dc406f84..380557766 100644 --- a/program/steps/mail/addcontact.inc +++ b/program/steps/mail/addcontact.inc @@ -23,17 +23,8 @@ if (!$OUTPUT->ajax_call) return; -$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)) { - $source = reset($RCMAIL->get_address_sources(true)); - $CONTACTS = $RCMAIL->get_address_book($source['id'], true); -} +// Get default addressbook +$CONTACTS = $RCMAIL->get_address_book(-1, true); if (!empty($_POST['_address']) && is_object($CONTACTS)) { diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 5a18ded6b..21fa3e8aa 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -518,21 +518,26 @@ function rcmail_check_safe(&$message) { global $RCMAIL; - $show_images = $RCMAIL->config->get('show_images'); if (!$message->is_safe - && !empty($show_images) - && $message->has_html_part()) - { - switch($show_images) { - case '1': // known senders only - $CONTACTS = new rcube_contacts($RCMAIL->db, $_SESSION['user_id']); - if ($CONTACTS->search('email', $message->sender['mailto'], true, false)->count) { - $message->set_safe(true); + && ($show_images = $RCMAIL->config->get('show_images')) + && $message->has_html_part() + ) { + switch ($show_images) { + case 1: // known senders only + // get default addressbook, like in addcontact.inc + $CONTACTS = $RCMAIL->get_address_book(-1, true); + + if ($CONTACTS) { + $result = $CONTACTS->search('email', $message->sender['mailto'], 1, false); + if ($result->count) { + $message->set_safe(true); + } } - break; - case '2': // always + break; + + case 2: // always $message->set_safe(true); - break; + break; } } }