From f8c96f737c1916377e361e3fbaa8a415c4101ca4 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Thu, 07 Jun 2012 04:34:56 -0400
Subject: [PATCH] Enable attachments drag&drop upload for default skin

---
 program/include/rcube_config.php |  113 ++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 81 insertions(+), 32 deletions(-)

diff --git a/program/include/rcube_config.php b/program/include/rcube_config.php
index 1c8e237..34c61c5 100644
--- a/program/include/rcube_config.php
+++ b/program/include/rcube_config.php
@@ -5,8 +5,11 @@
  | program/include/rcube_config.php                                      |
  |                                                                       |
  | This file is part of the Roundcube Webmail client                     |
- | Copyright (C) 2008-2010, The Roundcube Dev Team                       |
- | Licensed under the GNU GPL                                            |
+ | Copyright (C) 2008-2012, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
  |                                                                       |
  | PURPOSE:                                                              |
  |   Class to read configuration settings                                |
@@ -14,9 +17,6 @@
  +-----------------------------------------------------------------------+
  | Author: Thomas Bruederli <roundcube@gmail.com>                        |
  +-----------------------------------------------------------------------+
-
- $Id$
-
 */
 
 /**
@@ -29,6 +29,18 @@
     private $prop = array();
     private $errors = array();
     private $userprefs = array();
+
+    /**
+     * Renamed options
+     *
+     * @var array
+     */
+    private $legacy_props = array(
+        // new name => old name
+        'default_folders'      => 'default_imap_folders',
+        'mail_pagesize'        => 'pagesize',
+        'addressbook_pagesize' => 'pagesize',
+    );
 
 
     /**
@@ -70,11 +82,11 @@
 
         // fix default imap folders encoding
         foreach (array('drafts_mbox', 'junk_mbox', 'sent_mbox', 'trash_mbox') as $folder)
-            $this->prop[$folder] = rcube_charset_convert($this->prop[$folder], RCMAIL_CHARSET, 'UTF7-IMAP');
+            $this->prop[$folder] = rcube_charset::convert($this->prop[$folder], RCMAIL_CHARSET, 'UTF7-IMAP');
 
-        if (!empty($this->prop['default_imap_folders']))
-            foreach ($this->prop['default_imap_folders'] as $n => $folder)
-                $this->prop['default_imap_folders'][$n] = rcube_charset_convert($folder, RCMAIL_CHARSET, 'UTF7-IMAP');
+        if (!empty($this->prop['default_folders']))
+            foreach ($this->prop['default_folders'] as $n => $folder)
+                $this->prop['default_folders'][$n] = rcube_charset::convert($folder, RCMAIL_CHARSET, 'UTF7-IMAP');
 
         // set PHP error logging according to config
         if ($this->prop['debug_level'] & 1) {
@@ -90,12 +102,17 @@
 
         // enable display_errors in 'show' level, but not for ajax requests
         ini_set('display_errors', intval(empty($_REQUEST['_remote']) && ($this->prop['debug_level'] & 4)));
-        
+
         // set timezone auto settings values
         if ($this->prop['timezone'] == 'auto') {
-          $this->prop['dst_active'] = intval(date('I'));
-          $this->prop['_timezone_value']   = date('Z') / 3600 - $this->prop['dst_active'];
+          $this->prop['_timezone_value'] = $this->client_timezone();
         }
+        else if (is_numeric($this->prop['timezone'])) {
+          $this->prop['timezone'] = timezone_name_from_abbr("", $this->prop['timezone'] * 3600, 0);
+        }
+
+        // remove deprecated properties
+        unset($this->prop['dst_active']);
 
         // export config data
         $GLOBALS['CONFIG'] = &$this->prop;
@@ -156,20 +173,25 @@
      */
     public function get($name, $def = null)
     {
-        $result = isset($this->prop[$name]) ? $this->prop[$name] : $def;
-        $rcmail = rcmail::get_instance();
-        
+        if (isset($this->prop[$name])) {
+            $result = $this->prop[$name];
+        }
+        else if (isset($this->legacy_props[$name])) {
+            return $this->get($this->legacy_props[$name], $def);
+        }
+        else {
+            $result = $def;
+        }
+
+        $rcube = rcube::get_instance();
+
         if ($name == 'timezone' && isset($this->prop['_timezone_value']))
             $result = $this->prop['_timezone_value'];
 
-        if (is_object($rcmail->plugins)) {
-            $plugin = $rcmail->plugins->exec_hook('config_get', array(
-                'name' => $name, 'default' => $def, 'result' => $result));
+        $plugin = $rcube->plugins->exec_hook('config_get', array(
+            'name' => $name, 'default' => $def, 'result' => $result));
 
-            return $plugin['result'];
-        }
-
-        return $result;
+        return $plugin['result'];
     }
 
 
@@ -214,14 +236,20 @@
             }
         }
 
+        // convert user's timezone into the new format
+        if (is_numeric($prefs['timezone'])) {
+            $prefs['timezone'] = timezone_name_from_abbr('', $prefs['timezone'] * 3600, 0);
+        }
+
         $this->userprefs = $prefs;
         $this->prop      = array_merge($this->prop, $prefs);
 
         // override timezone settings with client values
         if ($this->prop['timezone'] == 'auto') {
-            $this->prop['_timezone_value'] = isset($_SESSION['timezone']) ? $_SESSION['timezone'] : $this->prop['_timezone_value'];
-            $this->prop['dst_active'] = isset($_SESSION['dst_active']) ? $_SESSION['dst_active'] : $this->prop['dst_active'];
+            $this->prop['_timezone_value'] = isset($_SESSION['timezone']) ? $this->client_timezone() : $this->prop['_timezone_value'];
         }
+        else if (isset($this->prop['_timezone_value']))
+           unset($this->prop['_timezone_value']);
     }
 
 
@@ -239,10 +267,20 @@
      * Special getter for user's timezone offset including DST
      *
      * @return float  Timezone offset (in hours)
+     * @deprecated
      */
     public function get_timezone()
     {
-      return floatval($this->get('timezone')) + intval($this->get('dst_active'));
+      if ($tz = $this->get('timezone')) {
+        try {
+          $tz = new DateTimeZone($tz);
+          return $tz->getOffset(new DateTime('now')) / 3600;
+        }
+        catch (Exception $e) {
+        }
+      }
+
+      return 0;
     }
 
     /**
@@ -255,7 +293,7 @@
     {
         // Bomb out if the requested key does not exist
         if (!array_key_exists($key, $this->prop)) {
-            raise_error(array(
+            rcube::raise_error(array(
                 'code' => 500, 'type' => 'php',
                 'file' => __FILE__, 'line' => __LINE__,
                 'message' => "Request for unconfigured crypto key \"$key\""
@@ -266,7 +304,7 @@
 
         // Bomb out if the configured key is not exactly 24 bytes long
         if (strlen($key) != 24) {
-            raise_error(array(
+            rcube::raise_error(array(
                 'code' => 500, 'type' => 'php',
 	            'file' => __FILE__, 'line' => __LINE__,
                 'message' => "Configured crypto key '$key' is not exactly 24 bytes long"
@@ -290,7 +328,7 @@
             if ($delim == "\n" || $delim == "\r\n")
                 return $delim;
             else
-                raise_error(array(
+                rcube::raise_error(array(
                     'code' => 500, 'type' => 'php',
 	                'file' => __FILE__, 'line' => __LINE__,
                     'message' => "Invalid mail_header_delimiter setting"
@@ -324,11 +362,13 @@
             if (isset($this->prop['mail_domain'][$host]))
                 $domain = $this->prop['mail_domain'][$host];
         }
-        else if (!empty($this->prop['mail_domain']))
-            $domain = rcube_parse_host($this->prop['mail_domain']);
+        else if (!empty($this->prop['mail_domain'])) {
+            $domain = rcube_utils::parse_host($this->prop['mail_domain']);
+        }
 
-        if ($encode)
-            $domain = rcube_idn_to_ascii($domain);
+        if ($encode) {
+            $domain = rcube_utils::idn_to_ascii($domain);
+        }
 
         return $domain;
     }
@@ -344,4 +384,13 @@
         return empty($this->errors) ? false : join("\n", $this->errors);
     }
 
+
+    /**
+     * Internal getter for client's (browser) timezone identifier
+     */
+    private function client_timezone()
+    {
+        return isset($_SESSION['timezone']) ? timezone_name_from_abbr("", $_SESSION['timezone'] * 3600, 0) : date_default_timezone_get();
+    }
+
 }

--
Gitblit v1.9.1