Simplified method of getting default addressbook.

Make sure to use the same source when adding contact and checking
if message is safe (sender is in addressbook).
Small code improvements.
pull/13/head
Aleksander Machniak 13 years ago
parent 2b21b97ef0
commit 840b4dbeb8

@ -171,7 +171,7 @@ class rcmail extends rcube
/** /**
* Return instance of the internal address book class * 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 * @param boolean True if the address book needs to be writeable
* *
* @return rcube_contacts Address book object * @return rcube_contacts Address book object
@ -180,17 +180,17 @@ class rcmail extends rcube
{ {
$contacts = null; $contacts = null;
$ldap_config = (array)$this->config->get('ldap_public'); $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 // 'sql' is the alias for '0' used by autocomplete
if ($id == 'sql') if ($id == 'sql')
$id = '0'; $id = '0';
else if ($id == -1) {
$id = $this->config->get('default_addressbook');
$default = true;
}
// use existing instance // use existing instance
if (isset($this->address_books[$id]) && is_object($this->address_books[$id]) if (isset($this->address_books[$id]) && ($this->address_books[$id] instanceof rcube_addressbook)) {
&& is_a($this->address_books[$id], 'rcube_addressbook')
&& (!$writeable || !$this->address_books[$id]->readonly)
) {
$contacts = $this->address_books[$id]; $contacts = $this->address_books[$id];
} }
else if ($id && $ldap_config[$id]) { else if ($id && $ldap_config[$id]) {
@ -206,8 +206,11 @@ class rcmail extends rcube
if ($plugin['instance'] instanceof rcube_addressbook) { if ($plugin['instance'] instanceof rcube_addressbook) {
$contacts = $plugin['instance']; $contacts = $plugin['instance'];
} }
// get first source from the list }
else if (!$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)); $source = reset($this->get_address_sources($writeable));
if (!empty($source)) { if (!empty($source)) {
$contacts = $this->get_address_book($source['id']); $contacts = $this->get_address_book($source['id']);
@ -215,7 +218,6 @@ class rcmail extends rcube
$id = $source['id']; $id = $source['id'];
} }
} }
}
if (!$contacts) { if (!$contacts) {
self::raise_error(array( self::raise_error(array(
@ -225,6 +227,10 @@ class rcmail extends rcube
true, true); true, true);
} }
if ($writeable && $contacts->readonly) {
return null;
}
// set configured sort order // set configured sort order
if ($sort_col = $this->config->get('addressbook_sort_col')) if ($sort_col = $this->config->get('addressbook_sort_col'))
$contacts->set_sort_order($sort_col); $contacts->set_sort_order($sort_col);

@ -23,17 +23,8 @@
if (!$OUTPUT->ajax_call) if (!$OUTPUT->ajax_call)
return; return;
$abook = $RCMAIL->config->get('default_addressbook'); // Get default addressbook
$CONTACTS = $RCMAIL->get_address_book(-1, true);
// 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);
}
if (!empty($_POST['_address']) && is_object($CONTACTS)) if (!empty($_POST['_address']) && is_object($CONTACTS))
{ {

@ -518,19 +518,24 @@ function rcmail_check_safe(&$message)
{ {
global $RCMAIL; global $RCMAIL;
$show_images = $RCMAIL->config->get('show_images');
if (!$message->is_safe if (!$message->is_safe
&& !empty($show_images) && ($show_images = $RCMAIL->config->get('show_images'))
&& $message->has_html_part()) && $message->has_html_part()
{ ) {
switch($show_images) { switch ($show_images) {
case '1': // known senders only case 1: // known senders only
$CONTACTS = new rcube_contacts($RCMAIL->db, $_SESSION['user_id']); // get default addressbook, like in addcontact.inc
if ($CONTACTS->search('email', $message->sender['mailto'], true, false)->count) { $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); $message->set_safe(true);
} }
}
break; break;
case '2': // always
case 2: // always
$message->set_safe(true); $message->set_safe(true);
break; break;
} }

Loading…
Cancel
Save