From 2a368cb3e597e35b467a6aebbaf35d42747681f5 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 26 Apr 2017 15:34:58 +0200 Subject: [baseconfig] Display inherited value and source when editing module specific settings This optionally requires a callback to find the inheritance source in the module in question. The locations module was updated accordingly. This implements #3120 --- .../baseconfig/lang/de/template-tags.json | 4 +- .../baseconfig/lang/en/template-tags.json | 4 +- modules-available/baseconfig/page.inc.php | 65 ++++++++++++++++------ modules-available/baseconfig/templates/_page.html | 16 ++++-- 4 files changed, 63 insertions(+), 26 deletions(-) (limited to 'modules-available/baseconfig') diff --git a/modules-available/baseconfig/lang/de/template-tags.json b/modules-available/baseconfig/lang/de/template-tags.json index cdd54f6a..7d6da790 100644 --- a/modules-available/baseconfig/lang/de/template-tags.json +++ b/modules-available/baseconfig/lang/de/template-tags.json @@ -1,7 +1,9 @@ { "lang_basicConfiguration": "Basiskonfiguration", "lang_clientRelatedConfig": "Die Optionen auf dieser Seite beziehen sich auf das Verhalten der bwLehrpool-Clients.", + "lang_defaultValue": "Standard", "lang_editOverrideNotice": "Sie bearbeiten die Einstellungen f\u00fcr einen Unterbereich", "lang_enableOverride": "\u00dcberschreiben", - "lang_settingActive": "Einstellung aktiv" + "lang_inheritSource": "Geerbt von", + "lang_settingActive": "Einstellung aktivieren" } \ No newline at end of file diff --git a/modules-available/baseconfig/lang/en/template-tags.json b/modules-available/baseconfig/lang/en/template-tags.json index 8e75e5ac..1a32cb0d 100644 --- a/modules-available/baseconfig/lang/en/template-tags.json +++ b/modules-available/baseconfig/lang/en/template-tags.json @@ -1,7 +1,9 @@ { "lang_basicConfiguration": "Basic Configuration", "lang_clientRelatedConfig": "The options on this page are related to the bwLehrpool client machines.", + "lang_defaultValue": "Default", "lang_editOverrideNotice": "You're editing the settings of a sub-section", "lang_enableOverride": "Override", - "lang_settingActive": "Setting active" + "lang_inheritSource": "Inherited from", + "lang_settingActive": "Enable setting" } \ No newline at end of file diff --git a/modules-available/baseconfig/page.inc.php b/modules-available/baseconfig/page.inc.php index 5e99f2a0..bd9d6683 100644 --- a/modules-available/baseconfig/page.inc.php +++ b/modules-available/baseconfig/page.inc.php @@ -124,9 +124,6 @@ class Page_BaseConfig extends Page Util::redirect('?do=BaseConfig'); } } - // List config options - $settings = array(); - $vars = BaseConfigUtil::getVariables(); // Get stuff that's set in DB already if ($this->targetModule === false) { $fields = ', enabled'; @@ -141,19 +138,28 @@ class Page_BaseConfig extends Page $where = ''; $params = array(); } + // List config options + $settings = array(); + $vars = BaseConfigUtil::getVariables(); + // Remember missing variables + $missing = $vars; // Populate structure with existing config from db - $res = Database::simpleQuery("SELECT setting, value, displayvalue $fields FROM {$this->qry_extra['table']} " - . " {$where} ORDER BY setting ASC", $params); - while ($row = $res->fetch(PDO::FETCH_ASSOC)) { - if (!isset($vars[$row['setting']]) || !is_array($vars[$row['setting']])) { - $unknown[] = $row['setting']; - continue; + $this->fillSettings($vars, $settings, $missing, $this->qry_extra['table'], $fields, $where, $params, false); + if (isset($this->qry_extra['getfallback']) && !empty($missing)) { + $method = explode('::', $this->qry_extra['getfallback']); + $fieldValue = $this->qry_extra['field_value']; + $tries = 0; + while (++$tries < 100 && !empty($missing)) { + $ret = call_user_func($method, $fieldValue); + if ($ret === false) + break; + $fieldValue = $ret['value']; + $params = array('field_value' => $fieldValue); + $this->fillSettings($vars, $settings, $missing, $this->qry_extra['table'], $fields, $where, $params, $ret['display']); } - $row += $vars[$row['setting']]; - if (!isset($row['catid'])) { - $row['catid'] = 'unknown'; - } - $settings[$row['catid']]['settings'][$row['setting']] = $row; + } + if ($this->targetModule !== false && !empty($missing)) { + $this->fillSettings($vars, $settings, $missing, 'setting_global', '', '', array(), 'Global'); } // Add entries that weren't in the db (global), setup override checkbox (module specific) foreach ($vars as $key => $var) { @@ -162,10 +168,7 @@ class Page_BaseConfig extends Page if (!isset($settings[$var['catid']]['settings'][$key]['enabled']) || $settings[$var['catid']]['settings'][$key]['enabled'] == 1) { $settings[$var['catid']]['settings'][$key]['checked'] = 'checked'; } - } elseif (isset($settings[$var['catid']]['settings'][$key])) { - // Module specific - value is set in DB - $settings[$var['catid']]['settings'][$key]['checked'] = 'checked'; - } else { + } elseif (!isset($settings[$var['catid']]['settings'][$key])) { // Module specific - value is not set in DB $settings[$var['catid']]['settings'][$key] = $var + array( 'setting' => $key @@ -216,6 +219,32 @@ class Page_BaseConfig extends Page Module::isAvailable('bootstrap_switch'); } + private function fillSettings($vars, &$settings, &$missing, $table, $fields, $where, $params, $sourceName) + { + $res = Database::simpleQuery("SELECT setting, value, displayvalue $fields FROM $table " + . " {$where} ORDER BY setting ASC", $params); + while ($row = $res->fetch(PDO::FETCH_ASSOC)) { + if (!isset($missing[$row['setting']])) + continue; + if (!isset($vars[$row['setting']]) || !is_array($vars[$row['setting']])) { + $unknown[] = $row['setting']; + continue; + } + unset($missing[$row['setting']]); + if ($sourceName !== false) { + $row['defaultvalue'] = ''; + $row['defaultsource'] = $sourceName; + } elseif ($this->targetModule !== false) { + $row['checked'] = 'checked'; + } + $row += $vars[$row['setting']]; + if (!isset($row['catid'])) { + $row['catid'] = 'unknown'; + } + $settings[$row['catid']]['settings'][$row['setting']] = $row; + } + } + private function getCurrentModuleName() { if (isset($this->qry_extra['tostring'])) { diff --git a/modules-available/baseconfig/templates/_page.html b/modules-available/baseconfig/templates/_page.html index 7f380495..e0be35bc 100644 --- a/modules-available/baseconfig/templates/_page.html +++ b/modules-available/baseconfig/templates/_page.html @@ -25,18 +25,22 @@
{{setting}}
- {{^override}}
+ {{#defaultvalue}}{{lang_defaultValue}}:{{/defaultvalue}} {{defaultvalue}}
- - {{/override}} - {{#override}} - - {{/override}} + +
{{{item}}} +
+ {{#defaultsource}}{{lang_inheritSource}}:{{/defaultsource}} + {{defaultsource}} +
-- cgit v1.2.3-55-g7522