diff --git a/mod/feedback/item/feedback_item_class.php b/mod/feedback/item/feedback_item_class.php index 2dba8531d2d92..ddb3c432354d1 100644 --- a/mod/feedback/item/feedback_item_class.php +++ b/mod/feedback/item/feedback_item_class.php @@ -181,6 +181,7 @@ public function get_display_name_postfix($item) { * If it is important which mode the form is in, use $form->get_mode() * * Each item type must add a single form element with the name $item->typ.'_'.$item->id + * This element must always be present in form data even if nothing is selected (i.e. use advcheckbox and not checkbox). * To add an element use either: * $form->add_form_element() - adds a single element to the form * $form->add_form_group_element() - adds a group element to the form diff --git a/mod/feedback/item/multichoice/lib.php b/mod/feedback/item/multichoice/lib.php index 57e05538223cc..8e47ca0feeea5 100644 --- a/mod/feedback/item/multichoice/lib.php +++ b/mod/feedback/item/multichoice/lib.php @@ -350,11 +350,16 @@ public function complete_form_element($item, $form) { } } else { // Radio. + if (!array_key_exists(0, $options)) { + // Always add '0' as hidden element, otherwise form submit data may not have this element. + $objs[] = ['hidden', $inputname.'[0]']; + } foreach ($options as $idx => $label) { $objs[] = ['radio', $inputname.'[0]', '', $label, $idx]; } $element = $form->add_form_group_element($item, 'group_'.$inputname, $name, $objs, $separator, $class); $form->set_element_default($inputname.'[0]', $tmpvalue); + $form->set_element_type($inputname.'[0]', PARAM_INT); } } diff --git a/mod/feedback/item/multichoicerated/lib.php b/mod/feedback/item/multichoicerated/lib.php index 0abe8d234a98a..5eb16e37b1d09 100644 --- a/mod/feedback/item/multichoicerated/lib.php +++ b/mod/feedback/item/multichoicerated/lib.php @@ -305,12 +305,17 @@ public function complete_form_element($item, $form) { ['select', $inputname, $name, array('' => '') + $options, array('class' => $class)]); } else { $objs = array(); + if (!array_key_exists(0, $options)) { + // Always add '0' as hidden element, otherwise form submit data may not have this element. + $objs[] = ['hidden', $inputname]; + } foreach ($options as $idx => $label) { $objs[] = ['radio', $inputname, '', $label, $idx]; } $separator = $info->horizontal ? ' ' : '
'; $class .= ' multichoicerated-' . ($info->horizontal ? 'horizontal' : 'vertical'); $el = $form->add_form_group_element($item, 'group_'.$inputname, $name, $objs, $separator, $class); + $form->set_element_type($inputname, PARAM_INT); // Set previously input values. $form->set_element_default($inputname, $form->get_item_value($item));