1<?php 2/* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */ 3 4include_once "./Modules/TestQuestionPool/classes/export/qti12/class.assQuestionExport.php"; 5 6/** 7* Class for error text question exports 8* 9* @author Helmut Schottmüller <helmut.schottmueller@mac.com> 10* @version $Id$ 11* @ingroup ModulesTestQuestionPool 12*/ 13class assErrorTextExport extends assQuestionExport 14{ 15 /** 16 * Returns a QTI xml representation of the question and sets the internal 17 * domxml variable with the DOM XML representation of the QTI xml representation 18 * 19 * @return string The QTI xml representation of the question 20 * @access public 21 */ 22 public function toXML($a_include_header = true, $a_include_binary = true, $a_shuffle = false, $test_output = false, $force_image_references = false) 23 { 24 global $DIC; 25 $ilias = $DIC['ilias']; 26 27 include_once("./Services/Xml/classes/class.ilXmlWriter.php"); 28 $a_xml_writer = new ilXmlWriter; 29 // set xml header 30 $a_xml_writer->xmlHeader(); 31 $a_xml_writer->xmlStartTag("questestinterop"); 32 $attrs = array( 33 "ident" => "il_" . IL_INST_ID . "_qst_" . $this->object->getId(), 34 "title" => $this->object->getTitle(), 35 "maxattempts" => $this->object->getNrOfTries() 36 ); 37 $a_xml_writer->xmlStartTag("item", $attrs); 38 // add question description 39 $a_xml_writer->xmlElement("qticomment", null, $this->object->getComment()); 40 // add estimated working time 41 $workingtime = $this->object->getEstimatedWorkingTime(); 42 $duration = sprintf("P0Y0M0DT%dH%dM%dS", $workingtime["h"], $workingtime["m"], $workingtime["s"]); 43 $a_xml_writer->xmlElement("duration", null, $duration); 44 // add ILIAS specific metadata 45 $a_xml_writer->xmlStartTag("itemmetadata"); 46 $a_xml_writer->xmlStartTag("qtimetadata"); 47 $a_xml_writer->xmlStartTag("qtimetadatafield"); 48 $a_xml_writer->xmlElement("fieldlabel", null, "ILIAS_VERSION"); 49 $a_xml_writer->xmlElement("fieldentry", null, $ilias->getSetting("ilias_version")); 50 $a_xml_writer->xmlEndTag("qtimetadatafield"); 51 $a_xml_writer->xmlStartTag("qtimetadatafield"); 52 $a_xml_writer->xmlElement("fieldlabel", null, "QUESTIONTYPE"); 53 $a_xml_writer->xmlElement("fieldentry", null, $this->object->getQuestionType()); 54 $a_xml_writer->xmlEndTag("qtimetadatafield"); 55 $a_xml_writer->xmlStartTag("qtimetadatafield"); 56 $a_xml_writer->xmlElement("fieldlabel", null, "AUTHOR"); 57 $a_xml_writer->xmlElement("fieldentry", null, $this->object->getAuthor()); 58 $a_xml_writer->xmlEndTag("qtimetadatafield"); 59 60 // additional content editing information 61 $this->addAdditionalContentEditingModeInformation($a_xml_writer); 62 $this->addGeneralMetadata($a_xml_writer); 63 64 $a_xml_writer->xmlStartTag("qtimetadatafield"); 65 $a_xml_writer->xmlElement("fieldlabel", null, "points_wrong"); 66 $a_xml_writer->xmlElement("fieldentry", null, $this->object->getPointsWrong()); 67 $a_xml_writer->xmlEndTag("qtimetadatafield"); 68 $a_xml_writer->xmlStartTag("qtimetadatafield"); 69 $a_xml_writer->xmlElement("fieldlabel", null, "errortext"); 70 $a_xml_writer->xmlElement("fieldentry", null, $this->object->getErrorText()); 71 $a_xml_writer->xmlEndTag("qtimetadatafield"); 72 $a_xml_writer->xmlStartTag("qtimetadatafield"); 73 $a_xml_writer->xmlElement("fieldlabel", null, "textsize"); 74 $a_xml_writer->xmlElement("fieldentry", null, $this->object->getTextSize()); 75 $a_xml_writer->xmlEndTag("qtimetadatafield"); 76 $a_xml_writer->xmlStartTag("qtimetadatafield"); 77 $a_xml_writer->xmlElement("fieldlabel", null, "errordata"); 78 $serialized = array(); 79 foreach ($this->object->getErrorData() as $data) { 80 array_push($serialized, array($data->text_correct, $data->text_wrong, $data->points)); 81 } 82 $a_xml_writer->xmlElement("fieldentry", null, serialize($serialized)); 83 $a_xml_writer->xmlEndTag("qtimetadatafield"); 84 $a_xml_writer->xmlEndTag("qtimetadata"); 85 $a_xml_writer->xmlEndTag("itemmetadata"); 86 87 // PART I: qti presentation 88 $attrs = array( 89 "label" => $this->object->getTitle() 90 ); 91 $a_xml_writer->xmlStartTag("presentation", $attrs); 92 // add flow to presentation 93 $a_xml_writer->xmlStartTag("flow"); 94 // add material with question text to presentation 95 $this->object->addQTIMaterial($a_xml_writer, $this->object->getQuestion()); 96 // add answers to presentation 97 $a_xml_writer->xmlEndTag("flow"); 98 $a_xml_writer->xmlEndTag("presentation"); 99 100 $this->addGenericFeedback($a_xml_writer); 101 102 $this->addAnswerSpecificFeedback($a_xml_writer, $this->object->getErrorData()); 103 104 $a_xml_writer->xmlEndTag("item"); 105 $a_xml_writer->xmlEndTag("questestinterop"); 106 107 $xml = $a_xml_writer->xmlDumpMem(false); 108 if (!$a_include_header) { 109 $pos = strpos($xml, "?>"); 110 $xml = substr($xml, $pos + 2); 111 } 112 return $xml; 113 } 114} 115