Skip to content

Commit 7f0d116

Browse files
committed
MDL-66115 qtype_ddimageortext: Fixing choice deletion.
Summarising responses fails when question choices have been removed. AMOS BEGIN CPY [deletedchoice,qtype_match],[deletedchoice,qtype_ddimageortext] AMOS END (cherry picked from commit f0265e6db16caa6d13f8bce291e7da91b0eabb53)
1 parent 39ef515 commit 7f0d116

File tree

4 files changed

+22
-2
lines changed

4 files changed

+22
-2
lines changed

question/type/ddimageortext/lang/en/qtype_ddimageortext.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,4 @@
7070
$string['summariseplaceno'] = 'Drop zone {$a}';
7171
$string['xleft'] = 'Left';
7272
$string['ytop'] = 'Top';
73+
$string['deletedchoice'] = '[Deleted choice]';

question/type/ddimageortext/questionbase.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,11 @@ public function summarise_response(array $response) {
6262
$response[$this->field($placeno)]) {
6363
$selected = $this->get_selected_choice($place->group,
6464
$response[$this->field($placeno)]);
65-
$summarisechoice = $selected->summarise();
65+
if (isset($selected)) {
66+
$summarisechoice = $selected->summarise();
67+
} else {
68+
$summarisechoice = get_string('deletedchoice', 'qtype_ddimageortext');
69+
}
6670
$allblank = false;
6771
} else {
6872
$summarisechoice = '';

question/type/ddimageortext/tests/question_test.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,4 +266,19 @@ public function test_classify_response() {
266266
4 => new question_classified_response(4, '4. dog', 1)
267267
), $dd->classify_response(array('p1' => '', 'p2' => '1', 'p3' => '2', 'p4' => '2')));
268268
}
269+
270+
public function test_summarise_response_choice_deleted() {
271+
/** @var qtype_ddtoimage_question_base $dd */
272+
$dd = test_question_maker::make_question('ddimageortext');
273+
$dd->shufflechoices = false;
274+
$dd->start_attempt(new question_attempt_step(), 1);
275+
// Simulation of an instructor deleting 1 choice after an attempt has been made.
276+
unset($dd->choices[1][1]);
277+
$delquestionstr = get_string('deletedchoice', 'qtype_ddimageortext');
278+
$this->assertEquals("Drop zone 1 -> {{$delquestionstr}} ".
279+
"Drop zone 2 -> {{$delquestionstr}} ".
280+
'Drop zone 3 -> {3. lazy} '.
281+
'Drop zone 4 -> {3. lazy}',
282+
$dd->summarise_response(array('p1' => '1', 'p2' => '1', 'p3' => '1', 'p4' => '1')));
283+
}
269284
}

question/type/gapselect/questionbase.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ public function get_question_summary() {
127127

128128
protected function get_selected_choice($group, $shuffledchoicenumber) {
129129
$choiceno = $this->choiceorder[$group][$shuffledchoicenumber];
130-
return $this->choices[$group][$choiceno];
130+
return isset($this->choices[$group][$choiceno]) ? $this->choices[$group][$choiceno] : null;
131131
}
132132

133133
public function summarise_response(array $response) {

0 commit comments

Comments
 (0)