summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthomascube <thomas@roundcube.net>2009-05-21 20:34:28 +0000
committerthomascube <thomas@roundcube.net>2009-05-21 20:34:28 +0000
commitc73b195e5d02a09d56430dd6e666313b86fee2f9 (patch)
treedec1d935a0a9dda33b2a4771a3a03c325d02d64a
parent66f68e96236848e8f1dd5992f1d7d0c5cc6da2a9 (diff)
Add function for plugins to load a local config file
-rw-r--r--program/include/rcube_config.php34
-rw-r--r--program/include/rcube_plugin.php14
-rw-r--r--program/steps/error.inc2
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);
}