MDL-36760 formslib: fix frozen elements with [] in name.

This was a regression caused by MDL-30845 or, to be precise, the related
issue MDL-32785.

Form elements with names like multipier[0] require special handling,
such as is present in HTML_QuickForm_element::_prepareValue. I have
added equivalent handling to MoodleQuickForm::exportValues. I am afraid
that I could not think of a way to do this reliably without duplicating
code.
This commit is contained in:
Tim Hunt
2012-11-23 11:32:04 +00:00
parent e4592b226d
commit 35314e2f91
+24 -1
View File
@@ -1670,7 +1670,7 @@ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless {
$value = '';
// If we have a default value then export it.
if (isset($this->_defaultValues[$varname])) {
$value = array($varname => $this->_defaultValues[$varname]);
$value = $this->prepare_fixed_value($varname, $this->_defaultValues[$varname]);
}
} else {
$value = $this->_elements[$key]->exportValue($this->_submitValues, true);
@@ -1700,6 +1700,29 @@ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless {
}
return $unfiltered;
}
/**
* This is a bit of a hack, and it duplicates the code in
* HTML_QuickForm_element::_prepareValue, but I could not think of a way or
* reliably calling that code. (Think about date selectors, for example.)
* @param string $name the element name.
* @param mixed $value the fixed value to set.
* @return mixed the appropriate array to add to the $unfiltered array.
*/
protected function prepare_fixed_value($name, $value) {
if (null === $value) {
return null;
} else {
if (!strpos($name, '[')) {
return array($name => $value);
} else {
$valueAry = array();
$myIndex = "['" . str_replace(array(']', '['), array('', "']['"), $name) . "']";
eval("\$valueAry$myIndex = \$value;");
return $valueAry;
}
}
}
/**
* Adds a validation rule for the given field
*