From da71783bc95f786968955a865943f6052eca83a4 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Thu, 25 Aug 2011 16:09:36 -0400
Subject: [PATCH] Move timezone computation to rcube_config; don't override SESSION['timezone'] when saving prefs

---
 program/include/main.inc              |   21 ++++-----------------
 program/include/rcube_config.php      |   13 +++++++++++++
 program/steps/settings/save_prefs.inc |    2 +-
 3 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/program/include/main.inc b/program/include/main.inc
index 0401fe2..edd74f8 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -1021,7 +1021,7 @@
  */
 function format_date($date, $format=NULL)
 {
-  global $CONFIG;
+  global $RCMAIL, $CONFIG;
   
   $ts = NULL;
 
@@ -1032,13 +1032,7 @@
     return '';
 
   // get user's timezone
-  if ($CONFIG['timezone'] === 'auto')
-    $tz = isset($_SESSION['timezone']) ? $_SESSION['timezone'] : date('Z')/3600;
-  else {
-    $tz = $CONFIG['timezone'];
-    if ($CONFIG['dst_active'])
-      $tz++;
-  }
+  $tz = $RCMAIL->config->get_timezone();
 
   // convert time to user's timezone
   $timestamp = $ts - date('Z', $ts) + ($tz * 3600);
@@ -1823,17 +1817,10 @@
 // Returns RFC2822 formatted current date in user's timezone
 function rcmail_user_date()
 {
-  global $CONFIG;
+  global $RCMAIL, $CONFIG;
 
   // get user's timezone
-  if ($CONFIG['timezone'] === 'auto') {
-    $tz = isset($_SESSION['timezone']) ? $_SESSION['timezone'] : date('Z')/3600;
-  }
-  else {
-    $tz = $CONFIG['timezone'];
-    if ($CONFIG['dst_active'])
-      $tz++;
-  }
+  $tz = $RCMAIL->config->get_timezone();
 
   $date = time() + $tz * 60 * 60;
   $date = gmdate('r', $date);
diff --git a/program/include/rcube_config.php b/program/include/rcube_config.php
index 9379e9e..31b7ed6 100644
--- a/program/include/rcube_config.php
+++ b/program/include/rcube_config.php
@@ -220,6 +220,19 @@
         return $this->prop;
     }
 
+    /**
+     * Special getter for user's timezone
+     */
+    public function get_timezone()
+    {
+      $tz = $this->get('timezone');
+      if ($tz == 'auto')
+        $tz = isset($_SESSION['timezone']) ? $_SESSION['timezone'] : date('Z') / 3600;
+      else
+        $tz = intval($tz) + intval($this->get('dst_active'));
+
+      return $tz;
+    }
 
     /**
      * Return requested DES crypto key.
diff --git a/program/steps/settings/save_prefs.inc b/program/steps/settings/save_prefs.inc
index ac1cfb3..208874f 100644
--- a/program/steps/settings/save_prefs.inc
+++ b/program/steps/settings/save_prefs.inc
@@ -141,7 +141,7 @@
     if (isset($CONFIG['max_pagesize']) && ($a_user_prefs['pagesize'] > $CONFIG['max_pagesize']))
       $a_user_prefs['pagesize'] = (int) $CONFIG['max_pagesize'];
 
-    $a_user_prefs['timezone'] = $_SESSION['timezone'] = (string) $a_user_prefs['timezone'];
+    $a_user_prefs['timezone'] = (string) $a_user_prefs['timezone'];
 
   break;
   case 'mailbox':

--
Gitblit v1.9.1