From 075c225b050b84b816e66f600f9600b6a689cb77 Mon Sep 17 00:00:00 2001 From: Christian Klinger Date: Mon, 1 Aug 2016 15:39:03 +0200 Subject: Fixed problems with validation of multilist and multiinput. --- modules-available/baseconfig/inc/validator.inc.php | 17 ++++++-- modules-available/baseconfig/page.inc.php | 50 +++++++++++++++++----- 2 files changed, 53 insertions(+), 14 deletions(-) (limited to 'modules-available/baseconfig') diff --git a/modules-available/baseconfig/inc/validator.inc.php b/modules-available/baseconfig/inc/validator.inc.php index 00e8c0e0..ec7b95aa 100644 --- a/modules-available/baseconfig/inc/validator.inc.php +++ b/modules-available/baseconfig/inc/validator.inc.php @@ -30,7 +30,7 @@ class Validator case 'function': return self::$data[1]($displayValue); case 'multilist': - return self::validateList($data[1], $displayValue); + return self::validateMultiList($data[1], $displayValue); case 'multiinput': return self::validateMultiInput($data[1], $displayValue); default: @@ -86,12 +86,21 @@ class Validator return $displayValue; return false; } + private static function validateMultiList($list, &$displayValue) + { + $allowedValues = explode('|', $list); + $values = []; + foreach ($displayValue as $v) { + if (in_array($v, $allowedValues)) { + $values[] = $v; + } + } + $displayValue = implode(' ', $values); + return $displayValue; + } private static function validateMultiInput(&$list, &$displayValue) { return $displayValue; - //die("validateMultiInput: " . print_r($list, true) . ", disp = " . $displayValue); - //return implode('~,~', $displayValue); - /* TODO: DO I have to do validation */ } } diff --git a/modules-available/baseconfig/page.inc.php b/modules-available/baseconfig/page.inc.php index 5d125cc2..389aa0ce 100644 --- a/modules-available/baseconfig/page.inc.php +++ b/modules-available/baseconfig/page.inc.php @@ -49,6 +49,9 @@ 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 @@ -172,12 +175,22 @@ class Page_BaseConfig extends Page if (!isset($settings[$var['catid']]['settings'][$key]['shadows'])) { $settings[$var['catid']]['settings'][$key]['shadows'] = null; } + //echo "
";
+			//var_dump($settings[$var['catid']]['settings'][$key]);
+			//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'] + '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)) ); } + //die(); + + // Sort categories $sortvals = array(); foreach ($settings as $catid => &$setting) { @@ -250,7 +263,6 @@ 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); @@ -261,28 +273,46 @@ class Page_BaseConfig extends Page /* -- */ $parts = explode(':', $validator, 2); - if ($parts[0] === 'list' || $parts[0] == 'multilist') { - $items = explode('|', $parts[1]); - if ($parts[0] === 'multilist') { - $args['multiple'] = 'multiple'; - $args['class'] .= " multilist"; - } + $items = explode('|', $parts[1]); + if ($parts[0] === 'list') { foreach ($items as $item) { if ($item === $current) { - $inner .= ''; + $inner .= ""; } else { - $inner .= ''; + $inner .= ""; } } $tag = 'select'; unset($args['type']); $current = ''; + } + if ($parts[0] == 'multilist') { + + $args['multiple'] = 'multiple'; + $args['class'] .= " multilist"; + $args['name'] .= '[]'; + + $selected = explode(' ', $current); + + foreach ($items as $item) { + if (in_array($item, $selected)) { + $inner .= ""; + } else { + $inner .= ""; + } + } + $tag = 'select'; + unset($args['type']); + $current = ''; + } + /* multiinput: enter multiple free-form strings*/ if ($validator === 'multiinput') { $args['class'] .= " multiinput"; + $args['value'] = $current; } /* Password field guessing */ -- cgit v1.2.3-55-g7522