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