bugfix: use true/false for boolean values read from <select>s instead of 1/0

This commit is contained in:
Crack
2010-08-03 00:37:39 +02:00
parent 53e8d75c0f
commit e3f6715c44
2 changed files with 13 additions and 14 deletions

View File

@@ -461,8 +461,8 @@ class FormDisplay
*/ */
private function _validateSelect(&$value, array $allowed) private function _validateSelect(&$value, array $allowed)
{ {
foreach ($allowed as $v) { foreach ($allowed as $vk => $v) {
if ($value == $v) { if ($value == $vk) {
settype($value, gettype($v)); settype($value, gettype($v));
return true; return true;
} }
@@ -556,7 +556,7 @@ class FormDisplay
} }
break; break;
case 'select': case 'select':
if (!$this->_validateSelect($_POST[$key], array_keys($form->getOptionValueList($system_path)))) { if (!$this->_validateSelect($_POST[$key], $form->getOptionValueList($system_path))) {
$this->errors[$work_path][] = __('Incorrect value'); $this->errors[$work_path][] = __('Incorrect value');
$result = false; $result = false;
continue; continue;

View File

@@ -199,28 +199,27 @@ function display_input($path, $name, $description = '', $type, $value, $value_is
$escape = !(isset($opts['values_escaped']) && $opts['values_escaped']); $escape = !(isset($opts['values_escaped']) && $opts['values_escaped']);
$values_disabled = isset($opts['values_disabled']) $values_disabled = isset($opts['values_disabled'])
? array_flip($opts['values_disabled']) : array(); ? array_flip($opts['values_disabled']) : array();
foreach ($opts['values'] as $opt_value => $opt_name) { foreach ($opts['values'] as $opt_value_key => $opt_value) {
// set names for boolean values // set names for boolean values
if (is_bool($opt_name)) { if (is_bool($opt_value)) {
$opt_name = strtolower($opt_value ? __('Yes') : __('No')); $opt_value = strtolower($opt_value ? __('Yes') : __('No'));
} }
// cast boolean values to integers
$display_value = is_bool($opt_value) ? (int) $opt_value : $opt_value;
// escape if necessary // escape if necessary
if ($escape) { if ($escape) {
$display = htmlspecialchars($opt_name); $display = htmlspecialchars($opt_value);
$display_value = htmlspecialchars($display_value); $display_value = htmlspecialchars($opt_value_key);
} else { } else {
$display = $opt_name; $display = $opt_value;
$display_value = $opt_value_key;
} }
// compare with selected value // compare with selected value
// boolean values are cast to integers when used as array keys // boolean values are cast to integers when used as array keys
$selected = is_bool($value) $selected = is_bool($value)
? (int) $value === $opt_value ? (int) $value === $opt_value_key
: $opt_value === $value; : $opt_value_key === $value;
echo '<option value="' . $display_value . '"' echo '<option value="' . $display_value . '"'
. ($selected ? ' selected="selected"' : '') . ($selected ? ' selected="selected"' : '')
. (isset($values_disabled[$opt_value]) ? ' disabled="disabled"' : '') . (isset($values_disabled[$opt_value_key]) ? ' disabled="disabled"' : '')
. '>' . $display . '</option>'; . '>' . $display . '</option>';
} }
echo '</select>'; echo '</select>';