mirror of
https://github.com/moodle/moodle.git
synced 2025-01-18 22:08:20 +01:00
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:
parent
f42c34a38a
commit
5f137dcbe2
@ -1631,7 +1631,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);
|
||||
@ -1662,6 +1662,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
|
||||
*
|
||||
|
@ -159,7 +159,7 @@ class qtype_numerical_edit_form extends question_edit_form {
|
||||
if ($mform->elementExists('multiplier[0]')) {
|
||||
$firstunit = $mform->getElement('multiplier[0]');
|
||||
$firstunit->freeze();
|
||||
$firstunit->setValue('1.0');
|
||||
$mform->setDefault('multiplier[0]', '1.0');
|
||||
$mform->addHelpButton('multiplier[0]', 'numericalmultiplier', 'qtype_numerical');
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user