diff --git a/lib/form/select.php b/lib/form/select.php index 9742d923f75..f6bcfbd10e6 100644 --- a/lib/form/select.php +++ b/lib/form/select.php @@ -117,4 +117,39 @@ class MoodleQuickForm_select extends HTML_QuickForm_select{ return 'default'; } } + /** + * We check the options and return only the values that _could_ have been + * selected. We also return a scalar value if select is not "multiple" + */ + function exportValue(&$submitValues, $assoc = false) + { + if (empty($this->_options)) { + return $this->_prepareValue(null, $assoc); + } + + $value = $this->_findValue($submitValues); + if (is_null($value)) { + $value = $this->getValue(); + } + $value = (array)$value; + + $cleaned = array(); + foreach ($value as $v) { + foreach ($this->_options as $option) { + if ((string)$option['attr']['value'] === (string)$v) { + $cleaned[] = (string)$option['attr']['value']; + break; + } + } + } + + if (empty($cleaned)) { + return $this->_prepareValue(null, $assoc); + } + if ($this->getMultiple()) { + return $this->_prepareValue($cleaned, $assoc); + } else { + return $this->_prepareValue($cleaned[0], $assoc); + } + } } diff --git a/lib/form/selectgroups.php b/lib/form/selectgroups.php index 9db9b8f52f1..583851006c6 100644 --- a/lib/form/selectgroups.php +++ b/lib/form/selectgroups.php @@ -487,37 +487,41 @@ class MoodleQuickForm_selectgroups extends HTML_QuickForm_element { */ function exportValue(&$submitValues, $assoc = false) { + if (empty($this->_optGroups)) { + return $this->_prepareValue(null, $assoc); + } + $value = $this->_findValue($submitValues); if (is_null($value)) { $value = $this->getValue(); - } elseif(!is_array($value)) { - $value = array($value); } - if (is_array($value) && !empty($this->_optGroups)) { - $cleanValue = null; - foreach ($value as $v) { - foreach ($this->_optGroups as $optGroup){ - if (empty($optGroup['options'])) { - continue; - } - for ($i = 0, $optCount = count($optGroup['options']); $i < $optCount; $i++) { - if ($v == $optGroup['options'][$i]['attr']['value']) { - $cleanValue[] = $v; - break; - } + $value = (array)$value; + + $cleaned = array(); + foreach ($value as $v) { + foreach ($this->_optGroups as $optGroup){ + if (empty($optGroup['options'])) { + continue; + } + foreach ($optGroup['options'] as $option) { + if ((string)$option['attr']['value'] === (string)$v) { + $cleaned[] = (string)$option['attr']['value']; + break; } } } - } else { - $cleanValue = $value; } - if (is_array($cleanValue) && !$this->getMultiple()) { - return $this->_prepareValue($cleanValue[0], $assoc); + + if (empty($cleaned)) { + return $this->_prepareValue(null, $assoc); + } + if ($this->getMultiple()) { + return $this->_prepareValue($cleaned, $assoc); } else { - return $this->_prepareValue($cleanValue, $assoc); + return $this->_prepareValue($cleaned[0], $assoc); } } - + // }}} // {{{ onQuickFormEvent() diff --git a/lib/form/selectwithlink.php b/lib/form/selectwithlink.php index 6d5a1de4318..ccdd55a2599 100755 --- a/lib/form/selectwithlink.php +++ b/lib/form/selectwithlink.php @@ -148,4 +148,39 @@ class MoodleQuickForm_selectwithlink extends HTML_QuickForm_select{ return 'default'; } } + /** + * We check the options and return only the values that _could_ have been + * selected. We also return a scalar value if select is not "multiple" + */ + function exportValue(&$submitValues, $assoc = false) + { + if (empty($this->_options)) { + return $this->_prepareValue(null, $assoc); + } + + $value = $this->_findValue($submitValues); + if (is_null($value)) { + $value = $this->getValue(); + } + $value = (array)$value; + + $cleaned = array(); + foreach ($value as $v) { + foreach ($this->_options as $option) { + if ((string)$option['attr']['value'] === (string)$v) { + $cleaned[] = (string)$option['attr']['value']; + break; + } + } + } + + if (empty($cleaned)) { + return $this->_prepareValue(null, $assoc); + } + if ($this->getMultiple()) { + return $this->_prepareValue($cleaned, $assoc); + } else { + return $this->_prepareValue($cleaned[0], $assoc); + } + } }