From 63d6e6dfc35e6d82c4a64f37c408794c163becd4 Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Wed, 28 Sep 2011 15:16:41 -0400 Subject: [PATCH] Bump versions to 0.6 stable --- program/include/rcmail.php | 66 ++++++++++++++++++++++++--------- 1 files changed, 48 insertions(+), 18 deletions(-) diff --git a/program/include/rcmail.php b/program/include/rcmail.php index d38f771..48c709e 100644 --- a/program/include/rcmail.php +++ b/program/include/rcmail.php @@ -336,20 +336,41 @@ } $this->memcache = new Memcache; - $mc_available = 0; + $this->mc_available = 0; + + // add alll configured hosts to pool + $pconnect = $this->config->get('memcache_pconnect', true); foreach ($this->config->get('memcache_hosts', array()) as $host) { list($host, $port) = explode(':', $host); if (!$port) $port = 11211; - // add server and attempt to connect if not already done yet - if ($this->memcache->addServer($host, $port) && !$mc_available) - $mc_available += intval($this->memcache->connect($host, $port)); + $this->mc_available += intval($this->memcache->addServer($host, $port, $pconnect, 1, 1, 15, false, array($this, 'memcache_failure'))); } + + // test connection and failover (will result in $this->mc_available == 0 on complete failure) + $this->memcache->increment('__CONNECTIONTEST__', 1); // NOP if key doesn't exist - if (!$mc_available) + if (!$this->mc_available) $this->memcache = false; } return $this->memcache; + } + + /** + * Callback for memcache failure + */ + public function memcache_failure($host, $port) + { + static $seen = array(); + + // only report once + if (!$seen["$host:$port"]++) { + $this->mc_available--; + raise_error(array('code' => 604, 'type' => 'db', + 'line' => __LINE__, 'file' => __FILE__, + 'message' => "Memcache failure on host $host:$port"), + true, false); + } } @@ -392,7 +413,10 @@ $id = '0'; // use existing instance - if (isset($this->address_books[$id]) && is_a($this->address_books[$id], 'rcube_addressbook') && (!$writeable || !$this->address_books[$id]->readonly)) { + 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) + ) { $contacts = $this->address_books[$id]; } else if ($id && $ldap_config[$id]) { @@ -421,7 +445,7 @@ if (!$contacts) { raise_error(array( - 'code' => 600, 'type' => 'php', + 'code' => 700, 'type' => 'php', 'file' => __FILE__, 'line' => __LINE__, 'message' => "Addressbook source ($id) not found!"), true, true); @@ -439,6 +463,7 @@ * Return address books list * * @param boolean True if the address book needs to be writeable + * * @return array Address books array */ public function get_address_sources($writeable = false) @@ -453,9 +478,9 @@ if (!isset($this->address_books['0'])) $this->address_books['0'] = new rcube_contacts($this->db, $this->user->ID); $list['0'] = array( - 'id' => '0', - 'name' => rcube_label('personaladrbook'), - 'groups' => $this->address_books['0']->groups, + 'id' => '0', + 'name' => rcube_label('personaladrbook'), + 'groups' => $this->address_books['0']->groups, 'readonly' => $this->address_books['0']->readonly, 'autocomplete' => in_array('sql', $autocomplete) ); @@ -465,11 +490,12 @@ $ldap_config = (array) $ldap_config; foreach ($ldap_config as $id => $prop) $list[$id] = array( - 'id' => $id, - 'name' => $prop['name'], - 'groups' => is_array($prop['groups']), + 'id' => $id, + 'name' => $prop['name'], + 'groups' => is_array($prop['groups']), 'readonly' => !$prop['writable'], - 'autocomplete' => in_array('sql', $autocomplete) + 'hidden' => $prop['hidden'], + 'autocomplete' => in_array($id, $autocomplete) ); } @@ -829,13 +855,17 @@ else if ($config['auto_create_user']) { if ($created = rcube_user::create($username, $host)) { $user = $created; + + // fix default settings according to namespace prefix + $this->fix_namespace_settings($user); + // create default folders on first login if ($config['create_default_folders']) $this->imap->create_default_folders(); } else { raise_error(array( - 'code' => 600, 'type' => 'php', + 'code' => 620, 'type' => 'php', 'file' => __FILE__, 'line' => __LINE__, 'message' => "Failed to create a user record. Maybe aborted by a plugin?" ), true, false); @@ -843,9 +873,9 @@ } else { raise_error(array( - 'code' => 600, 'type' => 'php', + 'code' => 621, 'type' => 'php', 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Acces denied for new user $username. 'auto_create_user' is disabled" + 'message' => "Access denied for new user $username. 'auto_create_user' is disabled" ), true, false); } @@ -1160,7 +1190,7 @@ $this->smtp->disconnect(); foreach ($this->address_books as $book) { - if (is_a($book, 'rcube_addressbook')) + if (is_object($book) && is_a($book, 'rcube_addressbook')) $book->close(); } -- Gitblit v1.9.1