From ea83dfccf4c2c87675a05270801677bf1fa96b40 Mon Sep 17 00:00:00 2001 From: Esther Brunner <esther@kaffeehaus.ch> Date: Fri, 27 Jan 2006 01:16:36 +0100 Subject: [PATCH] functions for handling plugin settings with config manager darcs-hash:20060127001636-283c4-a54e5b7aaab261d9c875686fe4ccfb483ee7358b.gz --- lib/plugins/config/settings/config.class.php | 78 +++++++++++++++++++- 1 file changed, 74 insertions(+), 4 deletions(-) diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php index 000a73be7..56d908d22 100644 --- a/lib/plugins/config/settings/config.class.php +++ b/lib/plugins/config/settings/config.class.php @@ -20,6 +20,8 @@ if (!class_exists('configuration')) { var $_default_file = ''; var $_local_file = ''; var $_protected_file = ''; + + var $_pluginLocale = false; // locale strings for plugin settings loaded? /** * constructor @@ -41,8 +43,8 @@ if (!class_exists('configuration')) { if (isset($file['protected'])) $this->_protected_file = $file['protected']; $this->locked = $this->_is_locked(); - - $this->_metadata = $meta; + + $this->_metadata = array_merge($meta, $this->get_plugin_metadata()); $this->retrieve_settings(); } @@ -50,7 +52,7 @@ if (!class_exists('configuration')) { function retrieve_settings() { if (!$this->_loaded) { - $default = $this->_read_config($this->_default_file); + $default = array_merge($this->_read_config($this->_default_file), $this->get_plugin_default()); $local = $this->_read_config($this->_local_file); $protected = $this->_read_config($this->_protected_file); @@ -202,7 +204,47 @@ if (!class_exists('configuration')) { } return $out; - } + } + + /** + * load metadata for plugin settings + */ + function get_plugin_metadata(){ + $file = '/settings/config.metadata.php'; + $meta = array(); + + if ($dh = opendir(DOKU_PLUGIN)) { + while (false !== ($plugin = readdir($dh))) { + if ($plugin == '.' || $plugin == '..' || $plugin == 'tmp' || $plugin == 'config') continue; + if (is_file(DOKU_PLUGIN.$plugin)) continue; + + if (@file_exists(DOKU_PLUGIN.$plugin.$file)){ + @include(DOKU_PLUGIN.$plugin.$file); + } + } + closedir($dh); + } + return $meta; + } + + /** + * load default settings for plugins + */ + function get_plugin_default(){ + $file = '/settings/config.default.php'; + $default = array(); + + if ($dh = opendir(DOKU_PLUGIN)) { + while (false !== ($plugin = readdir($dh))) { + if (@file_exists(DOKU_PLUGIN.$plugin.$file)){ + $default = array_merge($default, $this->_read_config("DOKU_PLUGIN.'".$plugin.$file."'")); + } + } + closedir($dh); + } + return $default; + } + } } @@ -308,6 +350,7 @@ if (!class_exists('setting')) { } function prompt(&$plugin) { + if (!$this->pluginLocale) $this->setupPluginLocale(&$plugin); $prompt = $plugin->getLang($this->_key); if (!$prompt) $prompt = str_replace(array('____','_'),' ',$this->_key); return htmlspecialchars($prompt); @@ -318,6 +361,33 @@ if (!class_exists('setting')) { function error() { return $this->_error; } function _out_key() { return str_replace(CM_KEYMARKER,"']['",$this->_key); } + + /** + * load extra localized strings for the plugin setting prompts + */ + function setupPluginLocale(&$config){ + global $conf; + + $langfile = '/lang/'.$conf[lang].'/settings.php'; + $enlangfile = '/lang/en/settings.php'; + + if ($dh = opendir(DOKU_PLUGIN)) { + while (false !== ($plugin = readdir($dh))) { + if ($plugin == '.' || $plugin == '..' || $plugin == 'tmp' || $plugin == 'config') continue; + if (is_file(DOKU_PLUGIN.$plugin)) continue; + + if (@file_exists(DOKU_PLUGIN.$plugin.$enlangfile)){ + @include(DOKU_PLUGIN.$plugin.$enlangfile); + if ($conf['lang'] != 'en') @include(DOKU_PLUGIN.$plugin.$langfile); + } + } + closedir($dh); + + $config->lang = array_merge($lang, $config->lang); + } + $this->pluginLocale = true; + return true; + } } } -- GitLab