From c73b195e5d02a09d56430dd6e666313b86fee2f9 Mon Sep 17 00:00:00 2001 From: thomascube Date: Thu, 21 May 2009 20:34:28 +0000 Subject: Add function for plugins to load a local config file --- program/include/rcube_config.php | 34 +++++++++++++++++++++++++--------- program/include/rcube_plugin.php | 14 ++++++++++++++ program/steps/error.inc | 2 +- 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/program/include/rcube_config.php b/program/include/rcube_config.php index 56f577bda..d4adb7bd1 100644 --- a/program/include/rcube_config.php +++ b/program/include/rcube_config.php @@ -51,15 +51,11 @@ class rcube_config ob_start(); // load main config file - if (include(RCMAIL_CONFIG_DIR . '/main.inc.php')) - $this->prop = (array)$rcmail_config; - else + if (!$this->load_from_file(RCMAIL_CONFIG_DIR . '/main.inc.php')) $this->errors[] = 'main.inc.php was not found.'; // load database config - if (include(RCMAIL_CONFIG_DIR . '/db.inc.php')) - $this->prop += (array)$rcmail_config; - else + if (!$this->load_from_file(RCMAIL_CONFIG_DIR . '/db.inc.php')) $this->errors[] = 'db.inc.php was not found.'; // load host-specific configuration @@ -124,10 +120,30 @@ class rcube_config $fname = preg_replace('/[^a-z0-9\.\-_]/i', '', $_SERVER['HTTP_HOST']) . '.inc.php'; } - if ($fname && is_file(RCMAIL_CONFIG_DIR . '/' . $fname)) { - include(RCMAIL_CONFIG_DIR . '/' . $fname); - $this->prop = array_merge($this->prop, (array)$rcmail_config); + if ($fname) { + $this->load_from_file(RCMAIL_CONFIG_DIR . '/' . $fname); + } + } + + + /** + * Read configuration from a file + * and merge with the already stored config values + * + * @param string Full path to the config file to be loaded + * @return booelan True on success, false on failure + */ + public function load_from_file($fpath) + { + if (is_file($fpath)) { + @include($fpath); + if (is_array($rcmail_config)) { + $this->prop = array_merge($this->prop, $rcmail_config); + return true; + } } + + return false; } diff --git a/program/include/rcube_plugin.php b/program/include/rcube_plugin.php index 365ef2898..63acaf84e 100644 --- a/program/include/rcube_plugin.php +++ b/program/include/rcube_plugin.php @@ -47,6 +47,20 @@ abstract class rcube_plugin * Initialization method, needs to be implemented by the plugin itself */ abstract function init(); + + /** + * Load local config file from plugins directory. + * The loaded values are patched over the global configuration. + * + * @param string Config file name relative to the plugin's folder + */ + public function load_config($fname = 'config.inc.php') + { + $fpath = $this->home.'/'.$fname; + $rcmail = rcmail::get_instance(); + if (!$rcmail->config->load_from_file($fpath)) + raise_error(array('code' => 527, 'type' => 'php', 'message' => "Failed to load config from $fpath"), true, false); + } /** * Register a callback function for a specific (server-side) hook diff --git a/program/steps/error.inc b/program/steps/error.inc index 039f8b3bb..a42a1f680 100644 --- a/program/steps/error.inc +++ b/program/steps/error.inc @@ -81,7 +81,7 @@ else { if (($CONFIG['debug_level'] & 4) && $ERROR_MESSAGE) $__error_text = $ERROR_MESSAGE; else - $__error_text = sprintf('Error No. [0x%04X]', $ERROR_CODE); + $__error_text = sprintf('Error No. [%s]', $ERROR_CODE); } -- cgit v1.2.3