From 0491f5070c2e1c0931aeb74d06cd47101e9fdcd9 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 10 Aug 2016 12:24:01 +0200 Subject: [baseconfig] Make shadow definition a json (sub)object; fix some display errors --- .../baseconfig/inc/baseconfigutil.inc.php | 22 ++++++++++++ modules-available/baseconfig/page.inc.php | 41 ++++++++++++---------- modules-available/baseconfig/templates/_page.html | 36 +++++++++---------- 3 files changed, 63 insertions(+), 36 deletions(-) (limited to 'modules-available/baseconfig') diff --git a/modules-available/baseconfig/inc/baseconfigutil.inc.php b/modules-available/baseconfig/inc/baseconfigutil.inc.php index ebaefbcf..75173ee6 100644 --- a/modules-available/baseconfig/inc/baseconfigutil.inc.php +++ b/modules-available/baseconfig/inc/baseconfigutil.inc.php @@ -47,4 +47,26 @@ class BaseConfigUtil return $categories; } + /** + * Mark variables that would be shadowed according to the given values. + * + * @param $vars list of vars as obtained from BaseConfigUtil::getVariables() + * @param $values key-value-pairs of variable assignments to work with + */ + public static function markShadowedVars(&$vars, $values) { + foreach ($vars as $key => &$var) { + if (!isset($var['shadows'])) + continue; + foreach ($var['shadows'] as $triggerVal => $destSettings) { + if (isset($values[$key]) && $values[$key] !== $triggerVal) + continue; + foreach ($destSettings as $destSetting) { + if (isset($vars[$destSetting])) { + $vars[$destSetting]['shadowed'] = true; + } + } + } + } + } + } diff --git a/modules-available/baseconfig/page.inc.php b/modules-available/baseconfig/page.inc.php index 9ff8c086..5e99f2a0 100644 --- a/modules-available/baseconfig/page.inc.php +++ b/modules-available/baseconfig/page.inc.php @@ -49,14 +49,16 @@ class Page_BaseConfig extends Page Util::redirect('?do=BaseConfig'); } } - //echo "
";
-			//var_dump($_POST);
-			//echo "
"; // Honor override/enabled checkbox $override = Request::post('override', array()); // Load all existing config options to validate input $vars = BaseConfigUtil::getVariables(); + // First, handle shadowing so we don't create warnings for empty fields + BaseConfigUtil::markShadowedVars($vars, $newValues); + // Validate input foreach ($vars as $key => $var) { + if (isset($var['shadowed'])) + continue; if ($this->targetModule === false) { // Global mode $params['enabled'] = (is_array($override) && isset($override[$key]) && $override[$key] === 'on') ? 1 : 0; @@ -180,12 +182,13 @@ class Page_BaseConfig extends Page //echo ""; $settings[$var['catid']]['settings'][$key] += array( 'item' => $this->makeInput( - $var['validator'], - $key, - $settings[$var['catid']]['settings'][$key]['displayvalue'], - $settings[$var['catid']]['settings'][$key]['shadows'] - ), - 'description' => Util::markup(Dictionary::translateFileModule($var['module'], 'config-variables', $key)) + $var['validator'], + $key, + $settings[$var['catid']]['settings'][$key]['displayvalue'], + $settings[$var['catid']]['settings'][$key]['shadows'] + ), + 'description' => Util::markup(Dictionary::translateFileModule($var['module'], 'config-variables', $key)), + 'setting' => $key, ); } //die(); @@ -264,10 +267,9 @@ class Page_BaseConfig extends Page private function makeInput($validator, $setting, $current, $shadows) { /* for the html snippet we need: */ - $tag = 'input'; - $args = array('type' => 'text', 'class' => 'form-control', 'name' => "setting[$setting]", 'id' => $setting); + $args = array('class' => 'form-control', 'name' => "setting[$setting]", 'id' => $setting); if (!empty($shadows)) { - $args['data-shadows'] = $shadows; + $args['data-shadows'] = json_encode($shadows); } $inner = ""; /* -- */ @@ -308,17 +310,20 @@ class Page_BaseConfig extends Page $tag = 'select'; unset($args['type']); $current = ''; + } else { + // Everything else is a text input for now + $tag = 'input'; + $args['value'] = $current; + $args['type'] = 'text'; + /* Password field guessing */ + if (stripos($validator, 'password') !== false) { + $args['type'] = Property::getPasswordFieldType(); + } } /* multiinput: enter multiple free-form strings*/ if ($validator === 'multiinput') { $args['class'] .= " multiinput"; - $args['value'] = $current; - } - - /* Password field guessing */ - if (stripos($validator, 'password') !== false) { - $args['type'] = Property::getPasswordFieldType(); } $output = "<$tag "; diff --git a/modules-available/baseconfig/templates/_page.html b/modules-available/baseconfig/templates/_page.html index 7bd5f6c9..11b8d8ee 100644 --- a/modules-available/baseconfig/templates/_page.html +++ b/modules-available/baseconfig/templates/_page.html @@ -70,27 +70,27 @@