From bc92ca56ef6c51393d2782b7654eaa162dfc2e10 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Mon, 30 Jul 2012 07:20:56 -0400
Subject: [PATCH] Fixes after default->classic switch
---
program/include/rcube.php | 73 +++++++++++++++---------------------
1 files changed, 31 insertions(+), 42 deletions(-)
diff --git a/program/include/rcube.php b/program/include/rcube.php
index 55dc4ee..ab5879d 100644
--- a/program/include/rcube.php
+++ b/program/include/rcube.php
@@ -18,9 +18,6 @@
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
-
- $Id$
-
*/
@@ -109,12 +106,14 @@
/**
* This implements the 'singleton' design pattern
*
+ * @param integer Options to initialize with this instance. See rcube::INIT_WITH_* constants
* @return rcube The one and only instance
*/
- static function get_instance()
+ static function get_instance($mode = 0)
{
if (!self::$instance) {
self::$instance = new rcube();
+ self::$instance->init($mode);
}
return self::$instance;
@@ -194,11 +193,17 @@
$this->memcache = new Memcache;
$this->mc_available = 0;
- // add alll configured hosts to pool
+ // add all 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;
+ if (substr($host, 0, 7) != 'unix://') {
+ list($host, $port) = explode(':', $host);
+ if (!$port) $port = 11211;
+ }
+ else {
+ $port = 0;
+ }
+
$this->mc_available += intval($this->memcache->addServer($host, $port, $pconnect, 1, 1, 15, false, array($this, 'memcache_failure')));
}
@@ -243,8 +248,7 @@
*/
public function get_cache($name, $type='db', $ttl=0, $packed=true)
{
- if (!isset($this->caches[$name])) {
- $userid = $this->get_user_id();
+ if (!isset($this->caches[$name]) && ($userid = $this->get_user_id())) {
$this->caches[$name] = new rcube_cache($type, $userid, $name, $ttl, $packed);
}
@@ -362,35 +366,6 @@
/**
- * Connect to the mail storage server with stored session data
- *
- * @return bool True on success, False on error
- */
- public function storage_connect()
- {
- $storage = $this->get_storage();
-
- if ($_SESSION['storage_host'] && !$storage->is_connected()) {
- $host = $_SESSION['storage_host'];
- $user = $_SESSION['username'];
- $port = $_SESSION['storage_port'];
- $ssl = $_SESSION['storage_ssl'];
- $pass = $this->decrypt($_SESSION['password']);
-
- if (!$storage->connect($host, $user, $pass, $port, $ssl)) {
- if (is_object($this->output))
- $this->output->show_message($storage->get_error_code() == -1 ? 'storageerror' : 'sessionerror', 'error');
- }
- else {
- $this->set_storage_prop();
- return $storage->is_connected();
- }
- }
-
- return false;
- }
-
- /**
* Set storage parameters.
* This must be done AFTER connecting to the server!
*/
@@ -440,6 +415,7 @@
ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.serialize_handler', 'php');
+ ini_set('session.cookie_httponly', 1);
// use database for storing session data
$this->session = new rcube_session($this->get_dbh(), $this->config);
@@ -476,7 +452,7 @@
$this->session->set_keep_alive($keep_alive);
}
- $this->session->set_secret($this->config->get('des_key') . $_SERVER['HTTP_USER_AGENT']);
+ $this->session->set_secret($this->config->get('des_key') . dirname($_SERVER['SCRIPT_NAME']));
$this->session->set_ip_check($this->config->get('ip_check'));
}
@@ -631,7 +607,7 @@
$this->texts = array_merge($this->texts, $messages);
// include user language files
- if ($lang != 'en' && is_dir(INSTALL_PATH . 'program/localization/' . $lang)) {
+ if ($lang != 'en' && $lang != 'en_US' && is_dir(INSTALL_PATH . 'program/localization/' . $lang)) {
include_once(INSTALL_PATH . 'program/localization/' . $lang . '/labels.inc');
include_once(INSTALL_PATH . 'program/localization/' . $lang . '/messages.inc');
@@ -1050,6 +1026,18 @@
*/
public static function raise_error($arg = array(), $log = false, $terminate = false)
{
+ // handle PHP exceptions
+ if (is_object($arg) && is_a($arg, 'Exception')) {
+ $err = array(
+ 'type' => 'php',
+ 'code' => $arg->getCode(),
+ 'line' => $arg->getLine(),
+ 'file' => $arg->getFile(),
+ 'message' => $arg->getMessage(),
+ );
+ $arg = $err;
+ }
+
// installer
if (class_exists('rcube_install', false)) {
$rci = rcube_install::get_instance();
@@ -1057,7 +1045,8 @@
return;
}
- if ($log && $arg['type'] && $arg['message']) {
+ if (($log || $terminate) && $arg['type'] && $arg['message']) {
+ $arg['fatal'] = $terminate;
self::log_bug($arg);
}
@@ -1085,7 +1074,7 @@
}
// write error to local log file
- if ($level & 1) {
+ if (($level & 1) || !empty($arg_arr['fatal'])) {
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$post_query = '?_task='.urlencode($_POST['_task']).'&_action='.urlencode($_POST['_action']);
}
--
Gitblit v1.9.1