From fe2f0be4352ba0bc213a2c6d4dfcbbddea1a551c Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Tue, 21 Aug 2012 04:50:14 -0400
Subject: [PATCH] Fix possible PHP warning, read default_folders using config->get() to support deprecated option name (default_imap_folders)
---
program/include/rcmail.php | 63 +++++++++++++++++++------------
1 files changed, 38 insertions(+), 25 deletions(-)
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 63ae8e2..d866919 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -171,7 +171,7 @@
/**
* 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 @@
{
$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 @@
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'];
}
}
@@ -223,6 +225,10 @@
'file' => __FILE__, 'line' => __LINE__,
'message' => "Addressbook source ($id) not found!"),
true, true);
+ }
+
+ if ($writeable && $contacts->readonly) {
+ return null;
}
// set configured sort order
@@ -447,7 +453,14 @@
// Convert username to lowercase. If storage backend
// is case-insensitive we need to store always the same username (#1487113)
if ($config['login_lc']) {
- $username = mb_strtolower($username);
+ if ($config['login_lc'] == 2 || $config['login_lc'] === true) {
+ $username = mb_strtolower($username);
+ }
+ else if (strpos($username, '@')) {
+ // lowercase domain name
+ list($local, $domain) = explode('@', $username);
+ $username = $local . '@' . mb_strtolower($domain);
+ }
}
// try to resolve email address from virtuser table
@@ -457,17 +470,13 @@
// Here we need IDNA ASCII
// Only rcube_contacts class is using domain names in Unicode
- $host = rcube_utils::idn_to_ascii($host);
- if (strpos($username, '@')) {
- // lowercase domain name
- list($local, $domain) = explode('@', $username);
- $username = $local . '@' . mb_strtolower($domain);
- $username = rcube_utils::idn_to_ascii($username);
- }
+ $host = rcube_utils::idn_to_ascii($host);
+ $username = rcube_utils::idn_to_ascii($username);
// user already registered -> overwrite username
- if ($user = rcube_user::query($username, $host))
+ if ($user = rcube_user::query($username, $host)) {
$username = $user->data['username'];
+ }
$storage = $this->get_storage();
@@ -720,8 +729,12 @@
*/
public function url($p)
{
- if (!is_array($p))
+ if (!is_array($p)) {
+ if (strpos($p, 'http') === 0)
+ return $p;
+
$p = array('_action' => @func_get_arg(0));
+ }
$task = $p['_task'] ? $p['_task'] : ($p['task'] ? $p['task'] : $this->task);
$p['_task'] = $task;
--
Gitblit v1.9.1