From a3644638aaf0418598196a870204e0b632a4c8ad Mon Sep 17 00:00:00 2001 From: Thomas Bruederli <thomas@roundcube.net> Date: Fri, 17 Apr 2015 06:28:40 -0400 Subject: [PATCH] Allow preference sections to define CSS class names --- program/lib/Roundcube/rcube_config.php | 106 +++++++++++++++++++++++++++-------------------------- 1 files changed, 54 insertions(+), 52 deletions(-) diff --git a/program/lib/Roundcube/rcube_config.php b/program/lib/Roundcube/rcube_config.php index e9a16c0..e80474a 100644 --- a/program/lib/Roundcube/rcube_config.php +++ b/program/lib/Roundcube/rcube_config.php @@ -3,7 +3,7 @@ /* +-----------------------------------------------------------------------+ | This file is part of the Roundcube Webmail client | - | Copyright (C) 2008-2013, The Roundcube Dev Team | + | Copyright (C) 2008-2014, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -26,11 +26,12 @@ { const DEFAULT_SKIN = 'larry'; - private $env = ''; - private $paths = array(); - private $prop = array(); - private $errors = array(); + private $env = ''; + private $paths = array(); + private $prop = array(); + private $errors = array(); private $userprefs = array(); + /** * Renamed options @@ -47,7 +48,6 @@ 'messages_cache_ttl' => 'message_cache_lifetime', 'redundant_attachments_cache_ttl' => 'redundant_attachments_memcache_ttl', ); - /** * Object constructor @@ -92,7 +92,6 @@ $this->set('contactlist_fields', array('name', 'firstname', 'surname', 'email')); } - /** * @brief Guess the type the string may fit into. * @@ -102,22 +101,24 @@ * * @return The guess at the type. */ - private function guess_type($value) { + private function guess_type($value) + { $_ = 'string'; - + // array requires hint to be passed. - - if (preg_match('/^[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?$/', $value) !== False) { + + if (preg_match('/^[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?$/', $value) !== false) { $_ = 'double'; - } else if (preg_match('/^\d+$/', $value) !== False) { + } + else if (preg_match('/^\d+$/', $value) !== false) { $_ = 'integer'; - } else if (preg_match('/(t(rue)?)|(f(alse)?)/i', $value) !== False) { + } + else if (preg_match('/(t(rue)?)|(f(alse)?)/i', $value) !== false) { $_ = 'boolean'; } - + return $_; } - /** * @brief Parse environment variable into PHP type. @@ -129,11 +130,10 @@ * * @return Appropriately typed interpretation of $string. */ - private function parse_env($string, $type) { - console("parse $string into $type"); - + private function parse_env($string, $type) + { $_ = $string; - + switch ($type) { case 'boolean': $_ = (boolean) $_; @@ -157,10 +157,9 @@ default: $_ = $this->parse_env($_, $this->guess_type($_)); } - + return $_; } - /** * @brief Get environment variable value. @@ -174,21 +173,23 @@ * * @return Value of the environment variable or default if not found. */ - private function getenv_default($varname, $default_value, $type = null) { + private function getenv_default($varname, $default_value, $type = null) + { $_ = getenv($varname); - - if ($_ === False) { + + if ($_ === false) { $_ = $default_value; - } else { + } + else { if (is_null($type)) { $type = gettype($default_value); } + $_ = $this->parse_env($_, $type); } - + return $_; } - /** * Load config from local config file @@ -232,12 +233,19 @@ $this->prop['skin'] = self::DEFAULT_SKIN; // fix paths - $this->prop['log_dir'] = $this->prop['log_dir'] ? realpath(unslashify($this->prop['log_dir'])) : RCUBE_INSTALL_PATH . 'logs'; - $this->prop['temp_dir'] = $this->prop['temp_dir'] ? realpath(unslashify($this->prop['temp_dir'])) : RCUBE_INSTALL_PATH . 'temp'; + foreach (array('log_dir' => 'logs', 'temp_dir' => 'temp') as $key => $dir) { + foreach (array($this->prop[$key], '../' . $this->prop[$key], RCUBE_INSTALL_PATH . $dir) as $path) { + if ($path && ($realpath = realpath(unslashify($path)))) { + $this->prop[$key] = $realpath; + break; + } + } + } // fix default imap folders encoding - foreach (array('drafts_mbox', 'junk_mbox', 'sent_mbox', 'trash_mbox') as $folder) + foreach (array('drafts_mbox', 'junk_mbox', 'sent_mbox', 'trash_mbox') as $folder) { $this->prop[$folder] = rcube_charset::convert($this->prop[$folder], RCUBE_CHARSET, 'UTF7-IMAP'); + } // set PHP error logging according to config if ($this->prop['debug_level'] & 1) { @@ -377,6 +385,8 @@ $result = $def; } + $result = $this->getenv_default('ROUNDCUBE_' . strtoupper($name), $result); + $rcube = rcube::get_instance(); if ($name == 'timezone') { @@ -391,14 +401,11 @@ $result = explode(',', $result); } - $result = $this->getenv_default('ROUNDCUBE_' . strtoupper($name), $result) - $plugin = $rcube->plugins->exec_hook('config_get', array( 'name' => $name, 'default' => $def, 'result' => $result)); return $plugin['result']; } - /** * Setter for a config parameter @@ -411,7 +418,6 @@ $this->prop[$name] = $value; } - /** * Override config options with the given values (eg. user prefs) * @@ -422,7 +428,6 @@ $prefs = $this->fix_legacy_props($prefs); $this->prop = array_merge($this->prop, $prefs, $this->userprefs); } - /** * Merge the given prefs over the current config @@ -451,7 +456,6 @@ $this->prop = array_merge($this->prop, $prefs); } - /** * Getter for all config options * @@ -461,8 +465,9 @@ { $props = $this->prop; - foreach ($props as $prop_name => $prop_value) + foreach ($props as $prop_name => $prop_value) { $props[$prop_name] = $this->getenv_default('ROUNDCUBE_' . strtoupper($prop_name), $prop_value); + } $rcube = rcube::get_instance(); $plugin = $rcube->plugins->exec_hook('config_get', array( @@ -479,16 +484,16 @@ */ public function get_timezone() { - if ($tz = $this->get('timezone')) { - try { - $tz = new DateTimeZone($tz); - return $tz->getOffset(new DateTime('now')) / 3600; + if ($tz = $this->get('timezone')) { + try { + $tz = new DateTimeZone($tz); + return $tz->getOffset(new DateTime('now')) / 3600; + } + catch (Exception $e) { + } } - catch (Exception $e) { - } - } - return 0; + return 0; } /** @@ -522,7 +527,6 @@ return $key; } - /** * Try to autodetect operating system and find the correct line endings * @@ -533,14 +537,16 @@ // use the configured delimiter for headers if (!empty($this->prop['mail_header_delimiter'])) { $delim = $this->prop['mail_header_delimiter']; - if ($delim == "\n" || $delim == "\r\n") + if ($delim == "\n" || $delim == "\r\n") { return $delim; - else + } + else { rcube::raise_error(array( 'code' => 500, 'type' => 'php', 'file' => __FILE__, 'line' => __LINE__, 'message' => "Invalid mail_header_delimiter setting" ), true, false); + } } $php_os = strtolower(substr(PHP_OS, 0, 3)); @@ -553,7 +559,6 @@ return "\n"; } - /** * Return the mail domain configured for the given host @@ -581,7 +586,6 @@ return $domain; } - /** * Getter for error state * @@ -591,7 +595,6 @@ { return empty($this->errors) ? false : join("\n", $this->errors); } - /** * Internal getter for client's (browser) timezone identifier @@ -680,7 +683,6 @@ '180' => "Europe/Moscow", '210' => "Asia/Tehran", '240' => "Asia/Dubai", - '300' => "Asia/Karachi", '270' => "Asia/Kabul", '300' => "Asia/Karachi", '330' => "Asia/Kolkata", -- Gitblit v1.9.1