From 041c93ce0bc00cb6417ce2e4bdce2ed84d37f50a Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Tue, 22 May 2012 06:31:37 -0400
Subject: [PATCH] Removed $Id$

---
 program/include/rcmail.php |   60 +++++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 47 insertions(+), 13 deletions(-)

diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 5394055..20a0ff4 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -19,9 +19,6 @@
  | Author: Thomas Bruederli <roundcube@gmail.com>                        |
  | Author: Aleksander Machniak <alec@alec.pl>                            |
  +-----------------------------------------------------------------------+
-
- $Id$
-
 */
 
 
@@ -325,7 +322,7 @@
     $this->output->set_charset(RCMAIL_CHARSET);
 
     // add some basic labels to client
-    $this->output->add_label('loading', 'servererror');
+    $this->output->add_label('loading', 'servererror', 'requesttimedout');
 
     return $this->output;
   }
@@ -520,7 +517,7 @@
       $_SESSION['storage_port'] = $port;
       $_SESSION['storage_ssl']  = $ssl;
       $_SESSION['password']     = $this->encrypt($pass);
-      $_SESSION['login_time']   = mktime();
+      $_SESSION['login_time']   = time();
 
       if (isset($_REQUEST['_timezone']) && $_REQUEST['_timezone'] != '_default_')
         $_SESSION['timezone'] = floatval($_REQUEST['_timezone']);
@@ -1329,11 +1326,12 @@
         $attrib      = $hook['attribs'];
 
         if ($type == 'select') {
+            $attrib['is_escaped'] = true;
             $select = new html_select($attrib);
 
             // add no-selection option
             if ($attrib['noselection']) {
-                $select->add($rcmail->gettext($attrib['noselection']), '');
+                $select->add(html::quote($rcmail->gettext($attrib['noselection'])), '');
             }
 
             $rcmail->render_folder_tree_select($a_mailboxes, $mbox_name, $attrib['maxlength'], $select, $attrib['realnames']);
@@ -1362,7 +1360,7 @@
      */
     public function folder_selector($p = array())
     {
-        $p += array('maxlength' => 100, 'realnames' => false);
+        $p += array('maxlength' => 100, 'realnames' => false, 'is_escaped' => true);
         $a_mailboxes = array();
         $storage = $this->get_storage();
 
@@ -1388,7 +1386,7 @@
         $select = new html_select($p);
 
         if ($p['noselection']) {
-            $select->add($p['noselection'], '');
+            $select->add(html::quote($p['noselection']), '');
         }
 
         $this->render_folder_tree_select($a_mailboxes, $mbox, $p['maxlength'], $select, $p['realnames'], 0, $p);
@@ -1577,13 +1575,13 @@
                 if ($maxlength && $maxlength > 1) {
                     $foldername = abbreviate_string($foldername, $maxlength);
                 }
+            }
 
-                 $select->add(str_repeat('&nbsp;', $nestLevel*4) . $foldername, $folder['id']);
+            $select->add(str_repeat('&nbsp;', $nestLevel*4) . html::quote($foldername), $folder['id']);
 
-                if (!empty($folder['folders'])) {
-                    $out .= $this->render_folder_tree_select($folder['folders'], $mbox_name, $maxlength,
-                        $select, $realnames, $nestLevel+1, $opts);
-                }
+            if (!empty($folder['folders'])) {
+                $out .= $this->render_folder_tree_select($folder['folders'], $mbox_name, $maxlength,
+                    $select, $realnames, $nestLevel+1, $opts);
             }
         }
 
@@ -2006,4 +2004,40 @@
     {
         rcube_utils::setcookie($name, $value, $exp);
     }
+
+    public function imap_connect()
+    {
+        return $this->storage_connect();
+    }
+
+    /**
+     * 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)) {
+                    $error = $storage->get_error_code() == -1 ? 'storageerror' : 'sessionerror';
+                    $this->output->show_message($error, 'error');
+                }
+            }
+            else {
+                $this->set_storage_prop();
+                return $storage->is_connected();
+            }
+        }
+
+        return false;
+    }
 }

--
Gitblit v1.9.1