From 230f944bf62f141f47c021dbfe6cc3d07b74a76d Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Wed, 24 Dec 2008 09:29:47 -0500
Subject: [PATCH] Allow empty strings for imap_root config parameter (was changed in r2143) to remain backward compatible but cache imap root and delimiter in session
---
program/include/rcmail.php | 38 ++++++++++++++++++++++++++++++++------
1 files changed, 32 insertions(+), 6 deletions(-)
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 53b4765..fcd3950 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -171,6 +171,10 @@
// set localization
setlocale(LC_ALL, $_SESSION['language'] . '.utf8', 'en_US.utf8');
+
+ // workaround for http://bugs.php.net/bug.php?id=18556
+ if (in_array($_SESSION['language'], array('tr_TR', 'ku', 'az_AZ')))
+ setlocale(LC_CTYPE, 'en_US' . '.utf8');
}
@@ -289,6 +293,14 @@
foreach (array('flag_for_deletion','read_when_deleted') as $js_config_var) {
$this->output->set_env($js_config_var, $this->config->get($js_config_var));
}
+
+ // set keep-alive/check-recent interval
+ if ($keep_alive = $this->config->get('keep_alive')) {
+ // be sure that it's less than session lifetime
+ if ($session_lifetime = $this->config->get('session_lifetime'))
+ $keep_alive = min($keep_alive, $session_lifetime * 60 - 30);
+ $this->output->set_env('keep_alive', max(60, $keep_alive));
+ }
if ($framed) {
$this->comm_path .= '&_framed=1';
@@ -340,6 +352,20 @@
// set pagesize from config
$this->imap->set_pagesize($this->config->get('pagesize', 50));
+
+ // Setting root and delimiter before iil_Connect can save time detecting them
+ // using NAMESPACE and LIST
+ $options = array(
+ 'imap' => $this->config->get('imap_auth_type', 'check'),
+ 'delimiter' => isset($_SESSION['imap_delimiter']) ? $_SESSION['imap_delimiter'] : $this->config->get('imap_delimiter'),
+ );
+
+ if (isset($_SESSION['imap_root']))
+ $options['rootdir'] = $_SESSION['imap_root'];
+ else if ($imap_root = $this->config->get('imap_root'))
+ $options['rootdir'] = $imap_root;
+
+ $this->imap->set_options($options);
// set global object for backward compatibility
$GLOBALS['IMAP'] = $this->imap;
@@ -359,7 +385,7 @@
$conn = false;
if ($_SESSION['imap_host'] && !$this->imap->conn) {
- if (!($conn = $this->imap->connect($_SESSION['imap_host'], $_SESSION['username'], $this->decrypt_passwd($_SESSION['password']), $_SESSION['imap_port'], $_SESSION['imap_ssl'], rcmail::get_instance()->config->get('imap_auth_type', 'check')))) {
+ if (!($conn = $this->imap->connect($_SESSION['imap_host'], $_SESSION['username'], $this->decrypt_passwd($_SESSION['password']), $_SESSION['imap_port'], $_SESSION['imap_ssl']))) {
if ($this->output)
$this->output->show_message($this->imap->error_code == -1 ? 'imaperror' : 'sessionerror', 'error');
}
@@ -440,7 +466,7 @@
$username = $user->data['username'];
// exit if IMAP login failed
- if (!($imap_login = $this->imap->connect($host, $username, $pass, $imap_port, $imap_ssl, $config['imap_auth_type'])))
+ if (!($imap_login = $this->imap->connect($host, $username, $pass, $imap_port, $imap_ssl)))
return false;
// user already registered -> update user's record
@@ -503,10 +529,6 @@
{
$this->imap->set_charset($this->config->get('default_charset', RCMAIL_CHARSET));
- // set root dir from config
- if ($imap_root = $this->config->get('imap_root')) {
- $this->imap->set_rootdir($imap_root);
- }
if ($default_folders = $this->config->get('default_imap_folders')) {
$this->imap->set_default_mailboxes($default_folders);
}
@@ -516,6 +538,10 @@
if (isset($_SESSION['page'])) {
$this->imap->set_page($_SESSION['page']);
}
+
+ // cache IMAP root and delimiter in session for performance reasons
+ $_SESSION['imap_root'] = $this->imap->root_dir;
+ $_SESSION['imap_delimiter'] = $this->imap->delimiter;
}
--
Gitblit v1.9.1