Aleksander Machniak
2014-06-28 6d5a1b9e8f426d5ddc7c5bf2840a25859ab9d9e1
program/lib/Roundcube/rcube.php
@@ -3,8 +3,8 @@
/*
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2008-2012, The Roundcube Dev Team                       |
 | Copyright (C) 2011-2012, Kolab Systems AG                             |
 | Copyright (C) 2008-2014, The Roundcube Dev Team                       |
 | Copyright (C) 2011-2014, Kolab Systems AG                             |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
@@ -94,6 +94,13 @@
     */
    public $plugins;
    /**
     * Instance of rcube_user class.
     *
     * @var rcube_user
     */
    public $user;
    /* private/protected vars */
    protected $texts;
@@ -165,9 +172,13 @@
    public function get_dbh()
    {
        if (!$this->db) {
            $config_all = $this->config->all();
            $this->db = rcube_db::factory($config_all['db_dsnw'], $config_all['db_dsnr'], $config_all['db_persistent']);
            $this->db->set_debug((bool)$config_all['sql_debug']);
            $this->db = rcube_db::factory(
                $this->config->get('db_dsnw'),
                $this->config->get('db_dsnr'),
                $this->config->get('db_persistent')
            );
            $this->db->set_debug((bool)$this->config->get('sql_debug'));
        }
        return $this->db;
@@ -348,40 +359,18 @@
        // for backward compat. (deprecated, will be removed)
        $this->imap = $this->storage;
        // enable caching of mail data
        $storage_cache  = $this->config->get("{$driver}_cache");
        $messages_cache = $this->config->get('messages_cache');
        // for backward compatybility
        if ($storage_cache === null && $messages_cache === null && $this->config->get('enable_caching')) {
            $storage_cache  = 'db';
            $messages_cache = true;
        }
        if ($storage_cache) {
            $this->storage->set_caching($storage_cache);
        }
        if ($messages_cache) {
            $this->storage->set_messages_caching(true);
        }
        // set pagesize from config
        $pagesize = $this->config->get('mail_pagesize');
        if (!$pagesize) {
            $pagesize = $this->config->get('pagesize', 50);
        }
        $this->storage->set_pagesize($pagesize);
        // set class options
        $options = array(
            'auth_type'   => $this->config->get("{$driver}_auth_type", 'check'),
            'auth_cid'    => $this->config->get("{$driver}_auth_cid"),
            'auth_pw'     => $this->config->get("{$driver}_auth_pw"),
            'debug'       => (bool) $this->config->get("{$driver}_debug"),
            'force_caps'  => (bool) $this->config->get("{$driver}_force_caps"),
            'disabled_caps' => $this->config->get("{$driver}_disabled_caps"),
            'timeout'     => (int) $this->config->get("{$driver}_timeout"),
            'skip_deleted' => (bool) $this->config->get('skip_deleted'),
            'driver'      => $driver,
            'auth_type'      => $this->config->get("{$driver}_auth_type", 'check'),
            'auth_cid'       => $this->config->get("{$driver}_auth_cid"),
            'auth_pw'        => $this->config->get("{$driver}_auth_pw"),
            'debug'          => (bool) $this->config->get("{$driver}_debug"),
            'force_caps'     => (bool) $this->config->get("{$driver}_force_caps"),
            'disabled_caps'  => $this->config->get("{$driver}_disabled_caps"),
            'socket_options' => $this->config->get("{$driver}_conn_options"),
            'timeout'        => (int) $this->config->get("{$driver}_timeout"),
            'skip_deleted'   => (bool) $this->config->get('skip_deleted'),
            'driver'         => $driver,
        );
        if (!empty($_SESSION['storage_host'])) {
@@ -405,22 +394,65 @@
    /**
     * Set storage parameters.
     * This must be done AFTER connecting to the server!
     */
    protected function set_storage_prop()
    {
        $storage = $this->get_storage();
        // set pagesize from config
        $pagesize = $this->config->get('mail_pagesize');
        if (!$pagesize) {
            $pagesize = $this->config->get('pagesize', 50);
        }
        $storage->set_pagesize($pagesize);
        $storage->set_charset($this->config->get('default_charset', RCUBE_CHARSET));
        if ($default_folders = $this->config->get('default_folders')) {
            $storage->set_default_folders($default_folders);
        // enable caching of mail data
        $driver         = $this->config->get('storage_driver', 'imap');
        $storage_cache  = $this->config->get("{$driver}_cache");
        $messages_cache = $this->config->get('messages_cache');
        // for backward compatybility
        if ($storage_cache === null && $messages_cache === null && $this->config->get('enable_caching')) {
            $storage_cache  = 'db';
            $messages_cache = true;
        }
        if (isset($_SESSION['mbox'])) {
            $storage->set_folder($_SESSION['mbox']);
        if ($storage_cache) {
            $storage->set_caching($storage_cache);
        }
        if (isset($_SESSION['page'])) {
            $storage->set_page($_SESSION['page']);
        if ($messages_cache) {
            $storage->set_messages_caching(true);
        }
    }
    /**
     * Set special folders type association.
     * This must be done AFTER connecting to the server!
     */
    protected function set_special_folders()
    {
        $storage = $this->get_storage();
        $folders = $storage->get_special_folders(true);
        $prefs   = array();
        // check SPECIAL-USE flags on IMAP folders
        foreach ($folders as $type => $folder) {
            $idx = $type . '_mbox';
            if ($folder !== $this->config->get($idx)) {
                $prefs[$idx] = $folder;
            }
        }
        // Some special folders differ, update user preferences
        if (!empty($prefs) && $this->user) {
            $this->user->save_prefs($prefs);
        }
        // create default folders (on login)
        if ($this->config->get('create_default_folders')) {
            $storage->create_default_folders();
        }
    }
@@ -1105,6 +1137,11 @@
                return true;
        }
        // add session ID to the log
        if ($sess = session_id()) {
            $line = '<' . substr($sess, 0, 8) . '> ' . $line;
        }
        if ($log_driver == 'syslog') {
            $prio = $name == 'errors' ? LOG_ERR : LOG_INFO;
            syslog($prio, $line);
@@ -1180,8 +1217,8 @@
        }
        // installer
        if (class_exists('rcube_install', false)) {
            $rci = rcube_install::get_instance();
        if (class_exists('rcmail_install', false)) {
            $rci = rcmail_install::get_instance();
            $rci->raise_error($arg);
            return;
        }
@@ -1302,6 +1339,20 @@
        self::write_log($dest, sprintf("%s: %0.4f sec", $label, $diff));
    }
    /**
     * Setter for system user object
     *
     * @param rcube_user Current user instance
     */
    public function set_user($user)
    {
        if (is_object($user)) {
            $this->user = $user;
            // overwrite config with user preferences
            $this->config->set_user_prefs((array)$this->user->get_prefs());
        }
    }
    /**
     * Getter for logged user ID.
@@ -1438,6 +1489,13 @@
        ));
        if ($plugin['abort']) {
            if (!empty($plugin['error'])) {
                $error = $plugin['error'];
            }
            if (!empty($plugin['body_file'])) {
                $body_file = $plugin['body_file'];
            }
            return isset($plugin['result']) ? $plugin['result'] : false;
        }