summaryrefslogtreecommitdiffstats
path: root/modules-available/baseconfig/page.inc.php
diff options
context:
space:
mode:
authorSimon Rettberg2017-04-26 15:34:58 +0200
committerSimon Rettberg2017-04-26 15:34:58 +0200
commit2a368cb3e597e35b467a6aebbaf35d42747681f5 (patch)
treeb62b33d104200009dbd62a8272da76337e1b2054 /modules-available/baseconfig/page.inc.php
parent[baseconfig_bwlp] Update translations (diff)
downloadslx-admin-2a368cb3e597e35b467a6aebbaf35d42747681f5.tar.gz
slx-admin-2a368cb3e597e35b467a6aebbaf35d42747681f5.tar.xz
slx-admin-2a368cb3e597e35b467a6aebbaf35d42747681f5.zip
[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
Diffstat (limited to 'modules-available/baseconfig/page.inc.php')
-rw-r--r--modules-available/baseconfig/page.inc.php65
1 files changed, 47 insertions, 18 deletions
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'])) {