diff options
Diffstat (limited to 'program/include/rcube_config.php')
-rw-r--r-- | program/include/rcube_config.php | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/program/include/rcube_config.php b/program/include/rcube_config.php new file mode 100644 index 000000000..541767a00 --- /dev/null +++ b/program/include/rcube_config.php @@ -0,0 +1,152 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | program/include/rcube_config.php | + | | + | This file is part of the RoundCube Webmail client | + | Copyright (C) 2008, RoundCube Dev. - Switzerland | + | Licensed under the GNU GPL | + | | + | PURPOSE: | + | Class to read configuration settings | + | | + +-----------------------------------------------------------------------+ + | Author: Thomas Bruederli <roundcube@gmail.com> | + +-----------------------------------------------------------------------+ + + $Id: $ + +*/ + +/** + * Configuration class for RoundCube + * + * @package Core + */ +class rcube_config +{ + private $prop = array(); + + + /** + * Object constructor + */ + public function __construct() + { + $this->load(); + } + + + /** + * Load config from local config file + */ + private function load() + { + // start output buffering, we don't need any output yet, + // it'll be cleared after reading of config files, etc. + ob_start(); + + // load main config file + include_once(INSTALL_PATH . 'config/main.inc.php'); + $this->prop = (array)$rcmail_config; + + // load database config + include_once(INSTALL_PATH . 'config/db.inc.php'); + $this->prop += (array)$rcmail_config; + + // fix paths + $this->prop['skin_path'] = $this->prop['skin_path'] ? unslashify($this->prop['skin_path']) : 'skins/default'; + $this->prop['log_dir'] = $this->prop['log_dir'] ? unslashify($this->prop['log_dir']) : INSTALL_PATH . 'logs'; + + // handle aliases + if (isset($this->prop['locale_string']) && empty($this->prop['language'])) + $this->prop['language'] = $this->prop['locale_string']; + + // set PHP error logging according to config + if ($this->prop['debug_level'] & 1) { + ini_set('log_errors', 1); + ini_set('error_log', $this->prop['log_dir'] . '/errors'); + } + if ($this->prop['debug_level'] & 4) { + ini_set('display_errors', 1); + } + else { + ini_set('display_errors', 0); + } + + // clear output buffer + ob_end_clean(); + } + + + /** + * Load a host-specific config file if configured + * This will merge the host specific configuration with the given one + */ + private function load_host_config() + { + $fname = null; + + if (is_array($this->prop['include_host_config'])) { + $fname = $this->prop['include_host_config'][$_SERVER['HTTP_HOST']]; + } + else if (!empty($this->prop['include_host_config'])) { + $fname = preg_replace('/[^a-z0-9\.\-_]/i', '', $_SERVER['HTTP_HOST']) . '.inc.php'; + } + + if ($fname && is_file(INSTALL_PATH . 'config/' . $fname)) { + include(INSTALL_PATH . 'config/' . $fname); + $this->prop = array_merge($this->prop, (array)$rcmail_config); + } + } + + + /** + * Getter for a specific config parameter + * + * @param string Parameter name + * @param mixed Default value if not set + * @return mixed The requested config value + */ + public function get($name, $def = null) + { + return isset($this->prop[$name]) ? $this->prop[$name] : $def; + } + + + /** + * Setter for a config parameter + * + * @param string Parameter name + * @param mixed Parameter value + */ + public function set($name, $value) + { + $this->prop[$name] = $value; + } + + + /** + * Override config options with the given values (eg. user prefs) + * + * @param array Hash array with config props to merge over + */ + public function merge($prefs) + { + $this->prop = array_merge($this->prop, $prefs); + } + + + /** + * Getter for all config options + * + * @return array Hash array containg all config properties + */ + public function all() + { + return $this->prop; + } + +} + |