MDL-59447 question: GIFT import to respect multichoice defaults

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.
This commit is contained in:
Nick Phillips
2018-07-13 13:33:33 +12:00
parent c7d148dc20
commit b6efeb4730
2 changed files with 34 additions and 2 deletions
+4
View 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 {
+30 -2
View 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