Returns a QTI xml representation of the question Returns a QTI xml representation of the question and sets the internal domxml variable with the DOM XML representation of the QTI xml representation. 
   52         $ilias = $DIC[
'ilias'];
    55         $eval->suppress_errors = 
true;
    59         $a_xml_writer->xmlHeader();
    60         $a_xml_writer->xmlStartTag(
"questestinterop");
    62             "ident" => 
"il_" . 
IL_INST_ID . 
"_qst_" . $this->
object->getId(),
    63             "title" => $this->
object->getTitle(),
    64             "maxattempts" => $this->
object->getNrOfTries()
    66         $a_xml_writer->xmlStartTag(
"item", $attrs);
    68         $a_xml_writer->xmlElement(
"qticomment", null, $this->
object->getComment());
    69         $a_xml_writer->xmlStartTag(
"itemmetadata");
    70         $a_xml_writer->xmlStartTag(
"qtimetadata");
    71         $a_xml_writer->xmlStartTag(
"qtimetadatafield");
    72         $a_xml_writer->xmlElement(
"fieldlabel", null, 
"ILIAS_VERSION");
    73         $a_xml_writer->xmlElement(
"fieldentry", null, $ilias->getSetting(
"ilias_version"));
    74         $a_xml_writer->xmlEndTag(
"qtimetadatafield");
    75         $a_xml_writer->xmlStartTag(
"qtimetadatafield");
    76         $a_xml_writer->xmlElement(
"fieldlabel", null, 
"QUESTIONTYPE");
    78         $a_xml_writer->xmlEndTag(
"qtimetadatafield");
    79         $a_xml_writer->xmlStartTag(
"qtimetadatafield");
    80         $a_xml_writer->xmlElement(
"fieldlabel", null, 
"AUTHOR");
    81         $a_xml_writer->xmlElement(
"fieldentry", null, $this->
object->getAuthor());
    82         $a_xml_writer->xmlEndTag(
"qtimetadatafield");
    88         $a_xml_writer->xmlStartTag(
"qtimetadatafield");
    89         $a_xml_writer->xmlElement(
"fieldlabel", null, 
"textgaprating");
    90         $a_xml_writer->xmlElement(
"fieldentry", null, $this->
object->getTextgapRating());
    91         $a_xml_writer->xmlEndTag(
"qtimetadatafield");
    93         $a_xml_writer->xmlStartTag(
"qtimetadatafield");
    94         $a_xml_writer->xmlElement(
"fieldlabel", null, 
"fixedTextLength");
    95         $a_xml_writer->xmlElement(
"fieldentry", null, $this->
object->getFixedTextLength());
    96         $a_xml_writer->xmlEndTag(
"qtimetadatafield");
    98         $a_xml_writer->xmlStartTag(
"qtimetadatafield");
    99         $a_xml_writer->xmlElement(
"fieldlabel", null, 
"identicalScoring");
   100         $a_xml_writer->xmlElement(
"fieldentry", null, $this->
object->getIdenticalScoring());
   101         $a_xml_writer->xmlEndTag(
"qtimetadatafield");
   103         $a_xml_writer->xmlStartTag(
"qtimetadatafield");
   104         $a_xml_writer->xmlElement(
"fieldlabel", null, 
"feedback_mode");
   105         $a_xml_writer->xmlElement(
"fieldentry", null, $this->
object->getFeedbackMode());
   106         $a_xml_writer->xmlEndTag(
"qtimetadatafield");
   108         $a_xml_writer->xmlStartTag(
"qtimetadatafield");
   109         $a_xml_writer->xmlElement(
"fieldlabel", null, 
"combinations");
   110         $a_xml_writer->xmlElement(
"fieldentry", null, base64_encode(json_encode($this->
object->getGapCombinations())));
   111         $a_xml_writer->xmlEndTag(
"qtimetadatafield");
   113         $a_xml_writer->xmlEndTag(
"qtimetadata");
   114         $a_xml_writer->xmlEndTag(
"itemmetadata");
   118             "label" => $this->
object->getTitle()
   120         $a_xml_writer->xmlStartTag(
"presentation", $attrs);
   122         $a_xml_writer->xmlStartTag(
"flow");
   124         $questionText = $this->
object->getQuestion() ? $this->
object->getQuestion() : 
' ';
   127         $text_parts = preg_split(
"/\[gap.*?\[\/gap\]/", $this->
object->getClozeText());
   130         for ($i = 0; $i <= $this->
object->getGapCount(); $i++) {
   133             if ($i < $this->
object->getGapCount()) {
   135                 $gap = $this->
object->getGap($i);
   136                 switch ($gap->getType()) {
   141                             "rcardinality" => 
"Single"   143                         $a_xml_writer->xmlStartTag(
"response_str", $attrs);
   148                         $attrs = [
"shuffle" => ($gap->getShuffle() ? 
"Yes" : 
"No")];
   149                         $a_xml_writer->xmlStartTag(
"render_choice", $attrs);
   152                         foreach ($gap->getItems($this->randomGroup->dontShuffle()) as $answeritem) {
   154                                 "ident" => $answeritem->getOrder()
   156                             $a_xml_writer->xmlStartTag(
"response_label", $attrs);
   157                             $a_xml_writer->xmlStartTag(
"material");
   158                             $a_xml_writer->xmlElement(
"mattext", null, $answeritem->getAnswertext());
   159                             $a_xml_writer->xmlEndTag(
"material");
   160                             $a_xml_writer->xmlEndTag(
"response_label");
   162                         $a_xml_writer->xmlEndTag(
"render_choice");
   163                         $a_xml_writer->xmlEndTag(
"response_str");
   169                             "rcardinality" => 
"Single"   171                         $a_xml_writer->xmlStartTag(
"response_str", $attrs);
   176                             "fibtype" => 
"String",
   178                             "columns" => $gap->getMaxWidth(),
   179                             "maxchars" => $gap->getGapSize()
   181                         $a_xml_writer->xmlStartTag(
"render_fib", $attrs);
   182                         $a_xml_writer->xmlEndTag(
"render_fib");
   183                         $a_xml_writer->xmlEndTag(
"response_str");
   189                             "numtype" => 
"Decimal",
   190                             "rcardinality" => 
"Single"   192                         $a_xml_writer->xmlStartTag(
"response_num", $attrs);
   196                         $answeritem = $gap->getItem(0);
   198                             "fibtype" => 
"Decimal",
   200                             "columns" => $gap->getMaxWidth(),
   201                             "maxchars" => $gap->getGapSize()
   203                         if (is_object($answeritem)) {
   204                             if ($eval->e($answeritem->getLowerBound()) !== 
false) {
   205                                 $attrs[
"minnumber"] = $answeritem->getLowerBound();
   207                             if ($eval->e($answeritem->getUpperBound()) !== 
false) {
   208                                 $attrs[
"maxnumber"] = $answeritem->getUpperBound();
   211                         $a_xml_writer->xmlStartTag(
"render_fib", $attrs);
   212                         $a_xml_writer->xmlEndTag(
"render_fib");
   213                         $a_xml_writer->xmlEndTag(
"response_num");
   218         $a_xml_writer->xmlEndTag(
"flow");
   219         $a_xml_writer->xmlEndTag(
"presentation");
   222         $a_xml_writer->xmlStartTag(
"resprocessing");
   223         $a_xml_writer->xmlStartTag(
"outcomes");
   224         $a_xml_writer->xmlStartTag(
"decvar");
   225         $a_xml_writer->xmlEndTag(
"decvar");
   226         $a_xml_writer->xmlEndTag(
"outcomes");
   229         for ($i = 0; $i < $this->
object->getGapCount(); $i++) {
   230             $gap = $this->
object->getGap($i);
   231             switch ($gap->getType()) {
   233                     foreach ($gap->getItems($this->randomGroup->dontShuffle()) as $answer) {
   237                         $a_xml_writer->xmlStartTag(
"respcondition", $attrs);
   239                         $a_xml_writer->xmlStartTag(
"conditionvar");
   242                             "respident" => 
"gap_$i"   244                         $a_xml_writer->xmlElement(
"varequal", $attrs, $answer->getAnswertext());
   245                         $a_xml_writer->xmlEndTag(
"conditionvar");
   250                         $a_xml_writer->xmlElement(
"setvar", $attrs, $answer->getPoints());
   252                         $linkrefid = 
"$i" . 
"_Response_" . $answer->getOrder();
   254                             "feedbacktype" => 
"Response",
   255                             "linkrefid" => $linkrefid
   257                         $a_xml_writer->xmlElement(
"displayfeedback", $attrs);
   258                         $a_xml_writer->xmlEndTag(
"respcondition");
   263                     foreach ($gap->getItems($this->randomGroup->dontShuffle()) as $answer) {
   267                         $a_xml_writer->xmlStartTag(
"respcondition", $attrs);
   269                         $a_xml_writer->xmlStartTag(
"conditionvar");
   271                             "respident" => 
"gap_$i"   273                         $a_xml_writer->xmlElement(
"varequal", $attrs, $answer->getAnswertext());
   274                         $a_xml_writer->xmlEndTag(
"conditionvar");
   279                         $a_xml_writer->xmlElement(
"setvar", $attrs, $answer->getPoints());
   281                         $linkrefid = 
"$i" . 
"_Response_" . $answer->getOrder();
   283                             "feedbacktype" => 
"Response",
   284                             "linkrefid" => $linkrefid
   286                         $a_xml_writer->xmlElement(
"displayfeedback", $attrs);
   287                         $a_xml_writer->xmlEndTag(
"respcondition");
   293         $feedback_allcorrect = $this->
object->feedbackOBJ->getGenericFeedbackExportPresentation(
   297         if (strlen($feedback_allcorrect)) {
   301             $a_xml_writer->xmlStartTag(
"respcondition", $attrs);
   303             $a_xml_writer->xmlStartTag(
"conditionvar");
   305             for ($i = 0; $i < $this->
object->getGapCount(); $i++) {
   306                 $gap = $this->
object->getGap($i);
   307                 $indexes = $gap->getBestSolutionIndexes();
   309                     $a_xml_writer->xmlStartTag(
"and");
   311                 switch ($gap->getType()) {
   316                         foreach ($indexes as 
$key) {
   318                                 $a_xml_writer->xmlStartTag(
"or");
   321                                 "respident" => 
"gap_$i"   323                             $answer = $gap->getItem($key);
   324                             $a_xml_writer->xmlElement(
"varequal", $attrs, $answer->getAnswertext());
   326                                 $a_xml_writer->xmlEndTag(
"or");
   333                     $a_xml_writer->xmlEndTag(
"and");
   336             $a_xml_writer->xmlEndTag(
"conditionvar");
   339                 "feedbacktype" => 
"Response",
   340                 "linkrefid" => 
"response_allcorrect"   342             $a_xml_writer->xmlElement(
"displayfeedback", $attrs);
   343             $a_xml_writer->xmlEndTag(
"respcondition");
   345         $feedback_onenotcorrect = $this->
object->feedbackOBJ->getGenericFeedbackExportPresentation(
   349         if (strlen($feedback_onenotcorrect)) {
   353             $a_xml_writer->xmlStartTag(
"respcondition", $attrs);
   355             $a_xml_writer->xmlStartTag(
"conditionvar");
   357             $a_xml_writer->xmlStartTag(
"not");
   358             for ($i = 0; $i < $this->
object->getGapCount(); $i++) {
   359                 $gap = $this->
object->getGap($i);
   360                 $indexes = $gap->getBestSolutionIndexes();
   362                     $a_xml_writer->xmlStartTag(
"and");
   364                 switch ($gap->getType()) {
   369                         foreach ($indexes as $key) {
   371                                 $a_xml_writer->xmlStartTag(
"or");
   374                                 "respident" => 
"gap_$i"   376                             $answer = $gap->getItem($key);
   377                             $a_xml_writer->xmlElement(
"varequal", $attrs, $answer->getAnswertext());
   379                                 $a_xml_writer->xmlEndTag(
"or");
   386                     $a_xml_writer->xmlEndTag(
"and");
   389             $a_xml_writer->xmlEndTag(
"not");
   390             $a_xml_writer->xmlEndTag(
"conditionvar");
   393                 "feedbacktype" => 
"Response",
   394                 "linkrefid" => 
"response_onenotcorrect"   396             $a_xml_writer->xmlElement(
"displayfeedback", $attrs);
   397             $a_xml_writer->xmlEndTag(
"respcondition");
   400         $a_xml_writer->xmlEndTag(
"resprocessing");
   403         for ($i = 0; $i < $this->
object->getGapCount(); $i++) {
   404             $gap = $this->
object->getGap($i);
   405             switch ($gap->getType()) {
   414         if (strlen($feedback_allcorrect)) {
   416                 "ident" => 
"response_allcorrect",
   419             $a_xml_writer->xmlStartTag(
"itemfeedback", $attrs);
   421             $a_xml_writer->xmlStartTag(
"flow_mat");
   423             $a_xml_writer->xmlEndTag(
"flow_mat");
   424             $a_xml_writer->xmlEndTag(
"itemfeedback");
   426         if (strlen($feedback_onenotcorrect)) {
   428                 "ident" => 
"response_onenotcorrect",
   431             $a_xml_writer->xmlStartTag(
"itemfeedback", $attrs);
   433             $a_xml_writer->xmlStartTag(
"flow_mat");
   435             $a_xml_writer->xmlEndTag(
"flow_mat");
   436             $a_xml_writer->xmlEndTag(
"itemfeedback");
   441         $a_xml_writer->xmlEndTag(
"item");
   442         $a_xml_writer->xmlEndTag(
"questestinterop");
   444         $xml = $a_xml_writer->xmlDumpMem(
false);
   445         if (!$a_include_header) {
   446             $pos = strpos($xml, 
"?>");
   447             $xml = substr($xml, $pos + 2);
 
const CLOZE_TEXT
Cloze question constants. 
 
addQTIMaterial(ilXmlWriter $a_xml_writer, string $a_material, bool $close_material_tag=true, bool $add_mobs=true)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
addGeneralMetadata(ilXmlWriter $xmlwriter)
 
exportAnswerSpecificFeedbacks(ilXmlWriter $xmlWriter)
 
addAdditionalContentEditingModeInformation(ilXmlWriter $a_xml_writer)
adds a qti meta data field for ilias specific information of "additional content editing mode" (xml w...
 
addSuggestedSolution(ilXmlWriter $writer)
 
addSolutionHints(ilXmlWriter $writer)
 
const CLOZE_TEST_IDENTIFIER
Question identifier constants.