MDL-30335 formslib: fix repeat_elements for groups that don't appendName

This commit is contained in:
Tim Hunt 2011-11-17 16:42:13 +00:00
parent f71e41691a
commit fa2fa5c698

View file

@ -900,6 +900,29 @@ abstract class moodleform {
return array();
}
/**
* Helper used by {@link repeat_elements()}.
* @param int $i the index of this element.
* @param HTML_QuickForm_element $elementclone
*/
function repeat_elements_fix_clone($i, $elementclone, &$namecloned) {
$name = $elementclone->getName();
$namecloned[] = $name;
if (!empty($name)) {
$elementclone->setName($name."[$i]");
}
if (is_a($elementclone, 'HTML_QuickForm_header')) {
$value = $elementclone->_text;
$elementclone->setValue(str_replace('{no}', ($i+1), $value));
} else {
$value=$elementclone->getLabel();
$elementclone->setLabel(str_replace('{no}', ($i+1), $value));
}
}
/**
* Method to add a repeating group of elements to a form.
*
@ -942,19 +965,13 @@ abstract class moodleform {
for ($i = 0; $i < $repeats; $i++) {
foreach ($elementobjs as $elementobj){
$elementclone = fullclone($elementobj);
$name = $elementclone->getName();
$namecloned[] = $name;
if (!empty($name)) {
$elementclone->setName($name."[$i]");
$this->repeat_elements_fix_clone($i, $elementclone, $namecloned);
if ($elementclone instanceof HTML_QuickForm_group && !$elementclone->_appendName) {
foreach ($elementclone->getElements() as $el) {
$this->repeat_elements_fix_clone($i, $el, $namecloned);
}
if (is_a($elementclone, 'HTML_QuickForm_header')) {
$value = $elementclone->_text;
$elementclone->setValue(str_replace('{no}', ($i+1), $value));
} else {
$value=$elementclone->getLabel();
$elementclone->setLabel(str_replace('{no}', ($i+1), $value));
$elementclone->setLabel(str_replace('{no}', $i + 1, $elementclone->getLabel()));
}
$mform->addElement($elementclone);