mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 00:46:50 +02:00
MDL-62708 question: Add idnumbers to question and question category
This commit is contained in:
parent
6902f39141
commit
6189fda47f
24 changed files with 502 additions and 13 deletions
|
@ -236,6 +236,8 @@ class qformat_xml extends qformat_default {
|
|||
$qo->questiontext .= ' <img src="@@PLUGINFILE@@/' . $filename . '" />';
|
||||
}
|
||||
|
||||
$qo->idnumber = $this->getpath($question, ['#', 'idnumber', 0, '#'], null);
|
||||
|
||||
// Restore files in generalfeedback.
|
||||
$generalfeedback = $this->import_text_with_files($question,
|
||||
array('#', 'generalfeedback', 0), $qo->generalfeedback, $this->get_format($qo->questiontextformat));
|
||||
|
@ -1217,6 +1219,7 @@ class qformat_xml extends qformat_default {
|
|||
}
|
||||
$expout .= " <penalty>{$question->penalty}</penalty>\n";
|
||||
$expout .= " <hidden>{$question->hidden}</hidden>\n";
|
||||
$expout .= " <idnumber>{$question->idnumber}</idnumber>\n";
|
||||
|
||||
// The rest of the output depends on question type.
|
||||
switch($question->qtype) {
|
||||
|
|
|
@ -48,6 +48,7 @@ class qformat_xml_test extends question_testcase {
|
|||
$q = new stdClass();
|
||||
$q->id = 0;
|
||||
$q->contextid = 0;
|
||||
$q->idnumber = null;
|
||||
$q->category = 0;
|
||||
$q->parent = 0;
|
||||
$q->questiontextformat = FORMAT_HTML;
|
||||
|
@ -342,6 +343,7 @@ END;
|
|||
$qdata->length = 0;
|
||||
$qdata->penalty = 0;
|
||||
$qdata->hidden = 0;
|
||||
$qdata->idnumber = null;
|
||||
|
||||
$exporter = new qformat_xml();
|
||||
$xml = $exporter->writequestion($qdata);
|
||||
|
@ -360,6 +362,7 @@ END;
|
|||
<defaultgrade>0</defaultgrade>
|
||||
<penalty>0</penalty>
|
||||
<hidden>0</hidden>
|
||||
<idnumber></idnumber>
|
||||
</question>
|
||||
';
|
||||
|
||||
|
@ -487,6 +490,7 @@ END;
|
|||
$qdata->length = 1;
|
||||
$qdata->penalty = 0;
|
||||
$qdata->hidden = 0;
|
||||
$qdata->idnumber = null;
|
||||
$qdata->options = new stdClass();
|
||||
$qdata->options->id = 456;
|
||||
$qdata->options->questionid = 123;
|
||||
|
@ -516,6 +520,7 @@ END;
|
|||
<defaultgrade>1</defaultgrade>
|
||||
<penalty>0</penalty>
|
||||
<hidden>0</hidden>
|
||||
<idnumber></idnumber>
|
||||
<responseformat>monospaced</responseformat>
|
||||
<responserequired>0</responserequired>
|
||||
<responsefieldlines>42</responsefieldlines>
|
||||
|
@ -649,6 +654,7 @@ END;
|
|||
$qdata->length = 1;
|
||||
$qdata->penalty = 0.3333333;
|
||||
$qdata->hidden = 0;
|
||||
$qdata->idnumber = null;
|
||||
|
||||
$qdata->options = new stdClass();
|
||||
$qdata->options->shuffleanswers = 1;
|
||||
|
@ -709,6 +715,7 @@ END;
|
|||
<defaultgrade>1</defaultgrade>
|
||||
<penalty>0.3333333</penalty>
|
||||
<hidden>0</hidden>
|
||||
<idnumber></idnumber>
|
||||
<shuffleanswers>true</shuffleanswers>
|
||||
<correctfeedback format="html">
|
||||
<text>Well done.</text>
|
||||
|
@ -880,6 +887,7 @@ END;
|
|||
$qdata->length = 1;
|
||||
$qdata->penalty = 0.3333333;
|
||||
$qdata->hidden = 0;
|
||||
$qdata->idnumber = null;
|
||||
|
||||
$qdata->options = new stdClass();
|
||||
$qdata->options->single = 0;
|
||||
|
@ -922,6 +930,7 @@ END;
|
|||
<defaultgrade>2</defaultgrade>
|
||||
<penalty>0.3333333</penalty>
|
||||
<hidden>0</hidden>
|
||||
<idnumber></idnumber>
|
||||
<single>false</single>
|
||||
<shuffleanswers>false</shuffleanswers>
|
||||
<answernumbering>abc</answernumbering>
|
||||
|
@ -1053,6 +1062,7 @@ END;
|
|||
$qdata->length = 1;
|
||||
$qdata->penalty = 0.1;
|
||||
$qdata->hidden = 0;
|
||||
$qdata->idnumber = null;
|
||||
|
||||
$qdata->options = new stdClass();
|
||||
$qdata->options->answers = array(
|
||||
|
@ -1083,6 +1093,7 @@ END;
|
|||
<defaultgrade>1</defaultgrade>
|
||||
<penalty>0.1</penalty>
|
||||
<hidden>0</hidden>
|
||||
<idnumber></idnumber>
|
||||
<answer fraction="100" format="plain_text">
|
||||
<text>42</text>
|
||||
<feedback format="html">
|
||||
|
@ -1183,6 +1194,7 @@ END;
|
|||
$qdata->length = 1;
|
||||
$qdata->penalty = 0.3333333;
|
||||
$qdata->hidden = 0;
|
||||
$qdata->idnumber = null;
|
||||
|
||||
$qdata->options = new stdClass();
|
||||
$qdata->options->usecase = 0;
|
||||
|
@ -1214,6 +1226,7 @@ END;
|
|||
<defaultgrade>1</defaultgrade>
|
||||
<penalty>0.3333333</penalty>
|
||||
<hidden>0</hidden>
|
||||
<idnumber></idnumber>
|
||||
<usecase>0</usecase>
|
||||
<answer fraction="100" format="plain_text">
|
||||
<text>Beta</text>
|
||||
|
@ -1290,6 +1303,59 @@ END;
|
|||
$this->assert(new question_check_specified_fields_expectation($expectedq), $q);
|
||||
}
|
||||
|
||||
public function test_import_truefalse_with_idnumber() {
|
||||
$xml = ' <question type="truefalse">
|
||||
<name>
|
||||
<text>True false question</text>
|
||||
</name>
|
||||
<questiontext format="html">
|
||||
<text>The answer is true.</text>
|
||||
</questiontext>
|
||||
<generalfeedback>
|
||||
<text>General feedback: You should have chosen true.</text>
|
||||
</generalfeedback>
|
||||
<defaultgrade>1</defaultgrade>
|
||||
<penalty>1</penalty>
|
||||
<hidden>0</hidden>
|
||||
<idnumber>TestIdNum1</idnumber>
|
||||
<answer fraction="100">
|
||||
<text>true</text>
|
||||
<feedback>
|
||||
<text>Well done!</text>
|
||||
</feedback>
|
||||
</answer>
|
||||
<answer fraction="0">
|
||||
<text>false</text>
|
||||
<feedback>
|
||||
<text>Doh!</text>
|
||||
</feedback>
|
||||
</answer>
|
||||
</question>';
|
||||
$xmldata = xmlize($xml);
|
||||
|
||||
$importer = new qformat_xml();
|
||||
$q = $importer->import_truefalse($xmldata['question']);
|
||||
|
||||
$expectedq = new stdClass();
|
||||
$expectedq->qtype = 'truefalse';
|
||||
$expectedq->name = 'True false question';
|
||||
$expectedq->questiontext = 'The answer is true.';
|
||||
$expectedq->questiontextformat = FORMAT_HTML;
|
||||
$expectedq->generalfeedback = 'General feedback: You should have chosen true.';
|
||||
$expectedq->defaultmark = 1;
|
||||
$expectedq->length = 1;
|
||||
$expectedq->penalty = 1;
|
||||
$expectedq->idnumber = 'TestIdNum1';
|
||||
|
||||
$expectedq->feedbacktrue = array('text' => 'Well done!',
|
||||
'format' => FORMAT_HTML);
|
||||
$expectedq->feedbackfalse = array('text' => 'Doh!',
|
||||
'format' => FORMAT_HTML);
|
||||
$expectedq->correctanswer = true;
|
||||
|
||||
$this->assert(new question_check_specified_fields_expectation($expectedq), $q);
|
||||
}
|
||||
|
||||
public function test_export_truefalse() {
|
||||
$qdata = new stdClass();
|
||||
$qdata->id = 12;
|
||||
|
@ -1304,6 +1370,7 @@ END;
|
|||
$qdata->length = 1;
|
||||
$qdata->penalty = 1;
|
||||
$qdata->hidden = 0;
|
||||
$qdata->idnumber = null;
|
||||
|
||||
$qdata->options = new stdClass();
|
||||
$qdata->options->answers = array(
|
||||
|
@ -1330,6 +1397,67 @@ END;
|
|||
<defaultgrade>1</defaultgrade>
|
||||
<penalty>1</penalty>
|
||||
<hidden>0</hidden>
|
||||
<idnumber></idnumber>
|
||||
<answer fraction="100" format="plain_text">
|
||||
<text>true</text>
|
||||
<feedback format="html">
|
||||
<text>Well done!</text>
|
||||
</feedback>
|
||||
</answer>
|
||||
<answer fraction="0" format="plain_text">
|
||||
<text>false</text>
|
||||
<feedback format="html">
|
||||
<text>Doh!</text>
|
||||
</feedback>
|
||||
</answer>
|
||||
</question>
|
||||
';
|
||||
|
||||
$this->assert_same_xml($expectedxml, $xml);
|
||||
}
|
||||
|
||||
public function test_export_truefalse_with_idnumber() {
|
||||
$qdata = new stdClass();
|
||||
$qdata->id = 12;
|
||||
$qdata->contextid = \context_system::instance()->id;
|
||||
$qdata->qtype = 'truefalse';
|
||||
$qdata->name = 'True false question';
|
||||
$qdata->questiontext = 'The answer is true.';
|
||||
$qdata->questiontextformat = FORMAT_HTML;
|
||||
$qdata->generalfeedback = 'General feedback: You should have chosen true.';
|
||||
$qdata->generalfeedbackformat = FORMAT_HTML;
|
||||
$qdata->defaultmark = 1;
|
||||
$qdata->length = 1;
|
||||
$qdata->penalty = 1;
|
||||
$qdata->hidden = 0;
|
||||
$qdata->idnumber = 'TestIDNum2';
|
||||
|
||||
$qdata->options = new stdClass();
|
||||
$qdata->options->answers = array(
|
||||
1 => new question_answer(1, 'True', 1, 'Well done!', FORMAT_HTML),
|
||||
2 => new question_answer(2, 'False', 0, 'Doh!', FORMAT_HTML),
|
||||
);
|
||||
$qdata->options->trueanswer = 1;
|
||||
$qdata->options->falseanswer = 2;
|
||||
|
||||
$exporter = new qformat_xml();
|
||||
$xml = $exporter->writequestion($qdata);
|
||||
|
||||
$expectedxml = '<!-- question: 12 -->
|
||||
<question type="truefalse">
|
||||
<name>
|
||||
<text>True false question</text>
|
||||
</name>
|
||||
<questiontext format="html">
|
||||
<text>The answer is true.</text>
|
||||
</questiontext>
|
||||
<generalfeedback format="html">
|
||||
<text>General feedback: You should have chosen true.</text>
|
||||
</generalfeedback>
|
||||
<defaultgrade>1</defaultgrade>
|
||||
<penalty>1</penalty>
|
||||
<hidden>0</hidden>
|
||||
<idnumber>TestIDNum2</idnumber>
|
||||
<answer fraction="100" format="plain_text">
|
||||
<text>true</text>
|
||||
<feedback format="html">
|
||||
|
@ -1474,6 +1602,7 @@ END;
|
|||
</generalfeedback>
|
||||
<penalty>0.3333333</penalty>
|
||||
<hidden>0</hidden>
|
||||
<idnumber></idnumber>
|
||||
<hint format="html">
|
||||
<text>Hint 1</text>
|
||||
</hint>
|
||||
|
@ -1505,6 +1634,7 @@ END;
|
|||
</generalfeedback>
|
||||
<penalty>0.3333333</penalty>
|
||||
<hidden>0</hidden>
|
||||
<idnumber></idnumber>
|
||||
</question>
|
||||
';
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue