MDL-59447 question: GIFT import to respect multichoice defaults
authorNick Phillips <nick.phillips@otago.ac.nz>
Thu, 13 Jul 2017 01:28:52 +0000 (13:28 +1200)
committerNick Phillips <nick.phillips@otago.ac.nz>
Fri, 13 Jul 2018 01:33:33 +0000 (13:33 +1200)
Fix GIFT import to respect default answernumbering for new multichoice
questions (introduced in MDL-50011). Default for shuffleanswers is still
ignored, as this is a rather coarse-grained way to do it, and the wrong
setting for shuffleanswers would irreversibly alter the meaning of some
questions.

This is not an ideal long-term fix, but will save significant effort
for anyone who needs to be able to set answernumbering style for
questions imported in GIFT format.

question/format/gift/format.php
question/format/gift/tests/giftformat_test.php

index 022a5c3..8fef597 100644 (file)
@@ -338,6 +338,10 @@ class qformat_gift extends qformat_default {
                 return $question;
 
             case 'multichoice':
+                // "Temporary" solution to enable choice of answernumbering on GIFT import
+                // by respecting default set for multichoice questions (MDL-59447)
+                $question->answernumbering = get_config('qtype_multichoice', 'answernumbering');
+
                 if (strpos($answertext, "=") === false) {
                     $question->single = 0; // Multiple answers are enabled if no single answer is 100% correct.
                 } else {
index 2d3b9ab..90c89ef 100644 (file)
@@ -267,7 +267,18 @@ class qformat_gift_test extends question_testcase {
         $this->assert_same_gift($expectedgift, $gift);
     }
 
-    public function test_import_multichoice() {
+    /**
+     * Test import of multichoice question in GIFT format
+     *
+     * @dataProvider numberingstyle_provider
+     *
+     * @param string $numberingstyle multichoice numbering style to set for qtype_multichoice
+     *
+     */
+    public function test_import_multichoice($numberingstyle) {
+        $this->resetAfterTest(true);
+
+        set_config('answernumbering', $numberingstyle, 'qtype_multichoice');
         $gift = "
 // multiple choice with specified feedback for right and wrong answers
 ::Q2:: What's between orange and green in the spectrum?
@@ -293,7 +304,7 @@ class qformat_gift_test extends question_testcase {
             'length' => 1,
             'single' => 1,
             'shuffleanswers' => '1',
-            'answernumbering' => 'abc',
+            'answernumbering' => $numberingstyle,
             'correctfeedback' => array(
                 'text' => '',
                 'format' => FORMAT_MOODLE,
@@ -352,6 +363,23 @@ class qformat_gift_test extends question_testcase {
         $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
     }
 
+    /**
+     * Return a list of numbering styles (see question/type/multichoice/questiontype.php
+     * for valid choices)
+     *
+     * @return array Array of 1-element arrays of qtype_multichoice numbering styles
+     */
+    public function numberingstyle_provider() {
+        return [
+            ['abc'],
+            ['ABCD'],
+            ['123'],
+            ['iii'],
+            ['IIII'],
+            ['none']
+        ];
+    }
+
     public function test_import_multichoice_multi() {
         $gift = "
 // multiple choice, multiple response with specified feedback for right and wrong answers