diff --git a/mod/feedback/complete.php b/mod/feedback/complete.php index 1ccf71ea280..aebb1edd867 100644 --- a/mod/feedback/complete.php +++ b/mod/feedback/complete.php @@ -507,11 +507,8 @@ if ($feedback_can_submit) { //get the value $frmvaluename = $feedbackitem->typ . '_'. $feedbackitem->id; if (isset($savereturn)) { - if (isset($formdata->{$frmvaluename})) { - $value = $formdata->{$frmvaluename}; - } else { - $value = null; - } + $value = isset($formdata->{$frmvaluename}) ? $formdata->{$frmvaluename} : null; + $value = feedback_clean_input_value($feedbackitem, $value); } else { if (isset($feedbackcompletedtmp->id)) { $value = feedback_get_item_value($feedbackcompletedtmp->id, @@ -530,6 +527,7 @@ if ($feedback_can_submit) { feedback_print_item_complete($feedbackitem, $value, $highlightrequired); echo $OUTPUT->box_end(); } + echo $OUTPUT->box_end(); $lastbreakposition = $feedbackitem->position; //last item-pos (item or pagebreak) diff --git a/mod/feedback/complete_guest.php b/mod/feedback/complete_guest.php index 25747a99082..b472c09e023 100644 --- a/mod/feedback/complete_guest.php +++ b/mod/feedback/complete_guest.php @@ -72,7 +72,7 @@ if (isset($formdata->sesskey) AND !isset($formdata->gonextpage) AND !isset($formdata->gopreviouspage)) { - $gopage = $formdata->lastpage; + $gopage = (int) $formdata->lastpage; } if (isset($formdata->savevalues)) { $savevalues = true; @@ -441,13 +441,10 @@ if ($feedback_can_submit) { echo $OUTPUT->box_start('feedback_item_box_'.$align.$dependstyle); $value = ''; //get the value - $frmvaluename = $feedbackitem->typ.'_'.$feedbackitem->id; + $frmvaluename = $feedbackitem->typ . '_'. $feedbackitem->id; if (isset($savereturn)) { - if (isset($formdata->{$frmvaluename})) { - $value = $formdata->{$frmvaluename}; - } else { - $value = null; - } + $value = isset($formdata->{$frmvaluename}) ? $formdata->{$frmvaluename} : null; + $value = feedback_clean_input_value($feedbackitem, $value); } else { if (isset($feedbackcompletedtmp->id)) { $value = feedback_get_item_value($feedbackcompletedtmp->id, @@ -466,6 +463,7 @@ if ($feedback_can_submit) { feedback_print_item_complete($feedbackitem, $value, $highlightrequired); echo $OUTPUT->box_end(); } + echo $OUTPUT->box_end(); $lastbreakposition = $feedbackitem->position; //last item-pos (item or pagebreak) diff --git a/mod/feedback/item/captcha/lib.php b/mod/feedback/item/captcha/lib.php index 126d51e3417..f790a658daa 100644 --- a/mod/feedback/item/captcha/lib.php +++ b/mod/feedback/item/captcha/lib.php @@ -326,4 +326,12 @@ class feedback_item_captcha extends feedback_item_base { public function can_switch_require() { return false; } + + public function value_type() { + return PARAM_RAW; + } + + public function clean_input_value($value) { + return clean_param($value, $this->value_type()); + } } diff --git a/mod/feedback/item/feedback_item_class.php b/mod/feedback/item/feedback_item_class.php index 981aefd58ea..b001b4ec336 100644 --- a/mod/feedback/item/feedback_item_class.php +++ b/mod/feedback/item/feedback_item_class.php @@ -98,7 +98,7 @@ abstract class feedback_item_base { */ abstract public function get_analysed($item, $groupid = false, $courseid = false); - /** + /** * print the item at the edit-page of feedback * * @global object @@ -107,7 +107,7 @@ abstract class feedback_item_base { */ abstract public function print_item_preview($item); - /** + /** * print the item at the complete-page of feedback * * @global object @@ -118,7 +118,7 @@ abstract class feedback_item_base { */ abstract public function print_item_complete($item, $value = '', $highlightrequire = false); - /** + /** * print the item at the complete-page of feedback * * @global object @@ -128,6 +128,14 @@ abstract class feedback_item_base { */ abstract public function print_item_show_value($item, $value = ''); + /** + * cleans the userinput while submitting the form + * + * @param mixed $value + * @return mixed + */ + abstract public function clean_input_value($value); + } //a dummy class to realize pagebreaks @@ -175,7 +183,9 @@ class feedback_item_pagebreak extends feedback_item_base { } public function can_switch_require() { } + public function value_type() { + } + public function clean_input_value($value) { + } } - - diff --git a/mod/feedback/item/info/lib.php b/mod/feedback/item/info/lib.php index 870c3287bb4..ca502990ac8 100644 --- a/mod/feedback/item/info/lib.php +++ b/mod/feedback/item/info/lib.php @@ -388,4 +388,12 @@ class feedback_item_info extends feedback_item_base { public function can_switch_require() { return false; } + + public function value_type() { + return PARAM_INT; + } + + public function clean_input_value($value) { + return clean_param($value, $this->value_type()); + } } diff --git a/mod/feedback/item/label/lib.php b/mod/feedback/item/label/lib.php index 25c62a9f55d..c643b31caf1 100644 --- a/mod/feedback/item/label/lib.php +++ b/mod/feedback/item/label/lib.php @@ -270,4 +270,12 @@ class feedback_item_label extends feedback_item_base { } public function get_analysed($item, $groupid = false, $courseid = false) { } + + public function value_type() { + return PARAM_BOOL; + } + + public function clean_input_value($value) { + return ''; + } } diff --git a/mod/feedback/item/multichoice/lib.php b/mod/feedback/item/multichoice/lib.php index 4c836e0d850..59d17d7c394 100644 --- a/mod/feedback/item/multichoice/lib.php +++ b/mod/feedback/item/multichoice/lib.php @@ -826,4 +826,8 @@ class feedback_item_multichoice extends feedback_item_base { public function value_is_array() { return true; } + + public function clean_input_value($value) { + return clean_param_array($value, $this->value_type()); + } } diff --git a/mod/feedback/item/multichoicerated/lib.php b/mod/feedback/item/multichoicerated/lib.php index 050f7ebc050..e859f47d738 100644 --- a/mod/feedback/item/multichoicerated/lib.php +++ b/mod/feedback/item/multichoicerated/lib.php @@ -678,4 +678,11 @@ class feedback_item_multichoicerated extends feedback_item_base { return true; } + public function value_type() { + return PARAM_INT; + } + + public function clean_input_value($value) { + return clean_param($value, $this->value_type()); + } } diff --git a/mod/feedback/item/numeric/lib.php b/mod/feedback/item/numeric/lib.php index ae19cf9fcdb..8d1669edfb6 100644 --- a/mod/feedback/item/numeric/lib.php +++ b/mod/feedback/item/numeric/lib.php @@ -220,7 +220,7 @@ class feedback_item_numeric extends feedback_item_base { return $row_offset; } - /** + /** * print the item at the edit-page of feedback * * @global object @@ -296,7 +296,7 @@ class feedback_item_numeric extends feedback_item_base { echo ''; } - /** + /** * print the item at the complete-page of feedback * * @global object @@ -364,13 +364,13 @@ class feedback_item_numeric extends feedback_item_base { 'name="'.$item->typ.'_'.$item->id.'" '. 'size="10" '. 'maxlength="10" '. - 'value="'.($value ? $value : '').'" />'; + 'value="'.$value.'" />'; echo ''; echo ''; } - /** + /** * print the item at the complete-page of feedback * * @global object @@ -534,4 +534,15 @@ class feedback_item_numeric extends feedback_item_base { public function can_switch_require() { return true; } + + public function value_type() { + return PARAM_FLOAT; + } + + public function clean_input_value($value) { + if (!is_numeric($value)) { + return null; + } + return clean_param($value, $this->value_type()); + } } diff --git a/mod/feedback/item/textarea/lib.php b/mod/feedback/item/textarea/lib.php index e6aaec5529f..c3dc8d6aebc 100644 --- a/mod/feedback/item/textarea/lib.php +++ b/mod/feedback/item/textarea/lib.php @@ -262,7 +262,7 @@ class feedback_item_textarea extends feedback_item_base { echo ''; echo ''; echo ''; @@ -308,7 +308,7 @@ class feedback_item_textarea extends feedback_item_base { } public function create_value($data) { - $data = clean_text($data); + $data = s($data); return $data; } @@ -333,4 +333,12 @@ class feedback_item_textarea extends feedback_item_base { public function can_switch_require() { return true; } + + public function value_type() { + return PARAM_RAW; + } + + public function clean_input_value($value) { + return s($value); + } } diff --git a/mod/feedback/item/textfield/lib.php b/mod/feedback/item/textfield/lib.php index 083069ed033..bf9bbe50ebe 100644 --- a/mod/feedback/item/textfield/lib.php +++ b/mod/feedback/item/textfield/lib.php @@ -252,7 +252,7 @@ class feedback_item_textfield extends feedback_item_base { 'name="'.$item->typ.'_'.$item->id.'" '. 'size="'.$presentation[0].'" '. 'maxlength="'.$presentation[1].'" '. - 'value="'.($value ? htmlspecialchars($value) : '').'" />'; + 'value="'.$value.'" />'; echo ''; echo ''; } @@ -295,7 +295,7 @@ class feedback_item_textfield extends feedback_item_base { } public function create_value($data) { - $data = clean_text($data); + $data = s($data); return $data; } @@ -320,4 +320,12 @@ class feedback_item_textfield extends feedback_item_base { public function can_switch_require() { return true; } + + public function value_type() { + return PARAM_RAW; + } + + public function clean_input_value($value) { + return s($value); + } } diff --git a/mod/feedback/lib.php b/mod/feedback/lib.php index 19e642575bd..14b57727509 100644 --- a/mod/feedback/lib.php +++ b/mod/feedback/lib.php @@ -2064,6 +2064,17 @@ function feedback_get_page_to_continue($feedbackid, $courseid = false, $guestid //functions to handle the values //////////////////////////////////////////////// +/** + * cleans the userinput while submitting the form. + * + * @param mixed $value + * @return mixed + */ +function feedback_clean_input_value($item, $value) { + $itemobj = feedback_get_item_class($item->typ); + return $itemobj->clean_input_value($value); +} + /** * this saves the values of an completed. * if the param $tmp is set true so the values are saved temporary in table feedback_valuetmp.