From 8bfaad3b5bf1f987c64d46ff958c765d55c5bcbe Mon Sep 17 00:00:00 2001 From: Jamie Pratt Date: Sun, 21 Aug 2011 20:55:55 +0700 Subject: [PATCH] MDL-47494 ddimageortext: NOBUG removing 'correct answer is' textual feedback to student as it is unintelligible and improving summarising of response. Fixed random guess score in statistics that was showing zero. Fixed statistics for question parts. --- .../lang/en/qtype_ddimagetoimage.php | 4 ++ question/type/ddimageortext/question.php | 61 +++++++++++++++++-- question/type/ddimageortext/questiontype.php | 35 +++++++++++ question/type/ddimageortext/renderer.php | 17 +----- 4 files changed, 97 insertions(+), 20 deletions(-) diff --git a/question/type/ddimageortext/lang/en/qtype_ddimagetoimage.php b/question/type/ddimageortext/lang/en/qtype_ddimagetoimage.php index e065751d67b..75ef985e90e 100644 --- a/question/type/ddimageortext/lang/en/qtype_ddimagetoimage.php +++ b/question/type/ddimageortext/lang/en/qtype_ddimagetoimage.php @@ -53,5 +53,9 @@ $string['previewarea'] = 'Preview area -'; $string['previewareaheader'] = 'Preview'; $string['previewareamessage'] = ''; $string['shuffleimages'] = 'Shuffle Draggable Images'; +$string['summarisechoice'] = '{$a->no}. {$a->text}'; +$string['summariseplace'] = '{$a->no}. {$a->text}'; +$string['summarisechoiceno'] = 'Image {$a}'; +$string['summariseplaceno'] = 'Drop zone {$a}'; $string['xleft'] = 'Left'; $string['ytop'] = 'Top'; \ No newline at end of file diff --git a/question/type/ddimageortext/question.php b/question/type/ddimageortext/question.php index 42439880685..45a308a0233 100755 --- a/question/type/ddimageortext/question.php +++ b/question/type/ddimageortext/question.php @@ -59,9 +59,25 @@ class qtype_ddimagetoimage_question extends qtype_gapselect_question_base { $allblank = true; foreach ($this->places as $placeno => $place) { if (array_key_exists($this->field($placeno), $response) && - $response[$this->field($placeno)]) { - $choices[] = '{' . html_to_text($this->get_selected_choice( - $place->group, $response[$this->field($placeno)])->text, 0, false) . '}'; + $response[$this->field($placeno)]) { + $selected = $this->get_selected_choice($place->group, + $response[$this->field($placeno)]); + if (trim($selected->text) !='') { + $summarisechoice = + get_string('summarisechoice', 'qtype_ddimagetoimage', $selected); + } else { + $summarisechoice = + get_string('summarisechoiceno', 'qtype_ddimagetoimage', $selected->no); + } + $place->no = $placeno; + if (trim($place->text) !='') { + $summariseplace = + get_string('summariseplace', 'qtype_ddimagetoimage', $place); + } else { + $summariseplace = + get_string('summariseplaceno', 'qtype_ddimagetoimage', $place->no); + } + $choices[] = "$summariseplace -> {{$summarisechoice}}"; $allblank = false; } else { $choices[] = '{}'; @@ -105,6 +121,43 @@ class qtype_ddimagetoimage_question extends qtype_gapselect_question_base { } return get_string('pleasedraganimagetoeachdropregion', 'qtype_ddimagetoimage'); } + + public function classify_response(array $response) { + $parts = array(); + foreach ($this->places as $placeno => $place) { + $group = $place->group; + if (!array_key_exists($this->field($placeno), $response) || + !$response[$this->field($placeno)]) { + $parts[$placeno] = question_classified_response::no_response(); + continue; + } + + $fieldname = $this->field($placeno); + $choiceno = $this->choiceorder[$group][$response[$fieldname]]; + $choice = $this->choices[$group][$choiceno]; + if (trim($choice->text) !='') { + $summarisechoice = + get_string('summarisechoice', 'qtype_ddimagetoimage', $choice); + } else { + $summarisechoice = + get_string('summarisechoiceno', 'qtype_ddimagetoimage', $choice->no); + } + $correct = $this->get_right_choice_for($placeno) == $response[$fieldname]; + $parts[$placeno] = new question_classified_response( + $choiceno, $summarisechoice, $correct?1:0); + } + return $parts; + } + + public function get_random_guess_score() { + $accum = 0; + + foreach ($this->places as $place) { + $accum += 1 / count($this->choices[$place->group]); + } + + return $accum / count($this->places); + } } @@ -116,7 +169,7 @@ class qtype_ddimagetoimage_question extends qtype_gapselect_question_base { */ class qtype_ddimagetoimage_drag_item { public $id; - public $alttextlabel; + public $text; public $no; public $group; public $isinfinite; diff --git a/question/type/ddimageortext/questiontype.php b/question/type/ddimageortext/questiontype.php index 22a6813a83c..be37c6b6666 100755 --- a/question/type/ddimageortext/questiontype.php +++ b/question/type/ddimageortext/questiontype.php @@ -416,4 +416,39 @@ class qtype_ddimagetoimage extends question_type { } return $string; } + + public function get_possible_responses($questiondata) { + $question = $this->make_question($questiondata); + + $parts = array(); + foreach ($question->places as $placeno => $place) { + $group = $place->group; + $choices = array(); + + foreach ($question->choices[$group] as $i => $choice) { + if (trim($choice->text) !='') { + $summarisechoice = + get_string('summarisechoice', 'qtype_ddimagetoimage', $choice); + } else { + $summarisechoice = + get_string('summarisechoiceno', 'qtype_ddimagetoimage', $choice->no); + } + $correct = $question->rightchoices[$placeno] == $i; + $choices[$choice->no] = new question_possible_response( + $summarisechoice, + $correct?1:0); + } + $choices[null] = question_possible_response::no_response(); + + $parts[$placeno] = $choices; + } + + return $parts; + } + + public function get_random_guess_score($questiondata) { + $question = $this->make_question($questiondata); + return $question->get_random_guess_score(); + } + } diff --git a/question/type/ddimageortext/renderer.php b/question/type/ddimageortext/renderer.php index 0100e758623..18a3c238a04 100755 --- a/question/type/ddimageortext/renderer.php +++ b/question/type/ddimageortext/renderer.php @@ -165,21 +165,6 @@ class qtype_ddimagetoimage_renderer extends qtype_with_combined_feedback_rendere } public function correct_response(question_attempt $qa) { - $question = $qa->get_question(); - - $correctanswer = ''; - foreach ($question->places as $i => $place) { - $choice = $question->choices[$place->group][$question->rightchoices[$i]]; - if ($choice->text != '') { - $text = $choice->text; - } else { - $text = get_string('nolabel', 'qtype_ddimagetoimage'); - } - $correctanswer .= '[' . str_replace('-', '‑', $text) . ']'; - } - - if (!empty($correctanswer)) { - return get_string('correctansweris', 'qtype_gapselect', $correctanswer); - } + return ''; } }