32 public function toXML($a_include_header =
true, $a_include_binary =
true, $a_shuffle =
false, $test_output =
false, $force_image_references =
false): string
35 $ilias = $DIC[
'ilias'];
39 $a_xml_writer->xmlHeader();
40 $a_xml_writer->xmlStartTag(
"questestinterop");
42 "ident" =>
"il_" .
IL_INST_ID .
"_qst_" . $this->
object->getId(),
43 "title" => $this->
object->getTitle(),
44 "maxattempts" => $this->
object->getNrOfTries()
46 $a_xml_writer->xmlStartTag(
"item", $attrs);
48 $a_xml_writer->xmlElement(
"qticomment",
null, $this->
object->getComment());
49 $a_xml_writer->xmlStartTag(
"itemmetadata");
50 $a_xml_writer->xmlStartTag(
"qtimetadata");
51 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
52 $a_xml_writer->xmlElement(
"fieldlabel",
null,
"ILIAS_VERSION");
53 $a_xml_writer->xmlElement(
"fieldentry",
null, $ilias->getSetting(
"ilias_version"));
54 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
55 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
56 $a_xml_writer->xmlElement(
"fieldlabel",
null,
"QUESTIONTYPE");
57 $a_xml_writer->xmlElement(
"fieldentry",
null, $this->
object->getQuestionType());
58 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
59 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
60 $a_xml_writer->xmlElement(
"fieldlabel",
null,
"AUTHOR");
61 $a_xml_writer->xmlElement(
"fieldentry",
null, $this->
object->getAuthor());
62 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
68 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
69 $a_xml_writer->xmlElement(
"fieldlabel",
null,
"answer_type");
70 $a_xml_writer->xmlElement(
"fieldentry",
null, $this->
object->getAnswerType());
71 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
73 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
74 $a_xml_writer->xmlElement(
"fieldlabel",
null,
"thumb_size");
75 $a_xml_writer->xmlElement(
"fieldentry",
null, $this->
object->getThumbSize());
76 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
78 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
79 $a_xml_writer->xmlElement(
"fieldlabel",
null,
"option_label_setting");
80 $a_xml_writer->xmlElement(
"fieldentry",
null, $this->
object->getOptionLabel());
81 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
82 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
83 $a_xml_writer->xmlElement(
"fieldlabel",
null,
"custom_true_option_label");
84 $a_xml_writer->xmlElement(
"fieldentry",
null, $this->
object->getCustomTrueOptionLabel());
85 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
86 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
87 $a_xml_writer->xmlElement(
"fieldlabel",
null,
"custom_false_option_label");
88 $a_xml_writer->xmlElement(
"fieldentry",
null, $this->
object->getCustomFalseOptionLabel());
89 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
91 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
92 $a_xml_writer->xmlElement(
"fieldlabel",
null,
"feedback_setting");
93 $a_xml_writer->xmlElement(
"fieldentry",
null, $this->
object->getSpecificFeedbackSetting());
94 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
96 $a_xml_writer->xmlEndTag(
"qtimetadata");
97 $a_xml_writer->xmlEndTag(
"itemmetadata");
101 "label" => $this->
object->getTitle()
103 $a_xml_writer->xmlStartTag(
"presentation", $attrs);
105 $a_xml_writer->xmlStartTag(
"flow");
111 "rcardinality" =>
"Multiple" 113 $a_xml_writer->xmlStartTag(
"response_lid", $attrs);
117 if ($this->
object->isShuffleAnswersEnabled()) {
126 $a_xml_writer->xmlStartTag(
"render_choice", $attrs);
129 $answers = $this->
object->getAnswers();
130 $akeys = array_keys($answers);
131 foreach ($akeys as $index) {
132 $answer = $this->
object->getAnswer($index);
134 $a_xml_writer->xmlStartTag(
'response_label', [
'ident' => $answer->getPosition()]);
136 $image_file = $answer->getImageFile() ??
'';
137 if ($image_file !==
'') {
138 $this->
addQTIMaterial($a_xml_writer, $answer->getAnswertext(),
false,
false);
139 $imagetype =
"image/jpeg";
140 if (preg_match(
"/.*\.(png|gif)$/", $image_file, $matches)) {
141 $imagetype =
"image/" . $matches[1];
143 if ($force_image_references) {
145 "imagtype" => $imagetype,
146 "label" => $image_file,
147 "uri" => $answer->getImageWebPath()
149 $a_xml_writer->xmlElement(
"matimage", $attrs);
151 $imagepath = $answer->getImageFsPath();
152 $fh = @fopen($imagepath,
"rb");
154 $imagefile = fread($fh, filesize($imagepath));
156 $base64 = base64_encode($imagefile);
158 "imagtype" => $imagetype,
159 "label" => $image_file,
160 "embedded" =>
"base64" 162 $a_xml_writer->xmlElement(
"matimage", $attrs, $base64,
false,
false);
165 $a_xml_writer->xmlEndTag(
"material");
169 $a_xml_writer->xmlEndTag(
"response_label");
171 $a_xml_writer->xmlEndTag(
"render_choice");
172 $a_xml_writer->xmlEndTag(
"response_lid");
173 $a_xml_writer->xmlEndTag(
"flow");
174 $a_xml_writer->xmlEndTag(
"presentation");
178 $a_xml_writer->xmlStartTag(
'resprocessing');
180 $a_xml_writer->xmlStartTag(
'outcomes');
181 $a_xml_writer->xmlElement(
'decvar', [
182 'varname' =>
'SCORE',
'vartype' =>
'Decimal',
'defaultval' =>
'0',
185 $a_xml_writer->xmlEndTag(
'outcomes');
188 foreach ($answers as $answer) {
189 $a_xml_writer->xmlStartTag(
'respcondition', [
'continue' =>
'Yes']);
191 $a_xml_writer->xmlStartTag(
'conditionvar');
192 $a_xml_writer->xmlElement(
'varequal', [
'respident' => $answer->getPosition()], $answer->getCorrectness());
193 $a_xml_writer->xmlEndTag(
'conditionvar');
195 $a_xml_writer->xmlElement(
'displayfeedback', [
196 'feedbacktype' =>
'Response',
'linkrefid' =>
"response_{$answer->getPosition()}" 199 $a_xml_writer->xmlEndTag(
'respcondition');
202 $feedback_allcorrect = $this->
object->feedbackOBJ->getGenericFeedbackExportPresentation(
207 $a_xml_writer->xmlStartTag(
'respcondition', [
'continue' =>
'Yes']);
209 $a_xml_writer->xmlStartTag(
'conditionvar');
210 $a_xml_writer->xmlStartTag(
'and');
211 foreach ($answers as $answer) {
212 $a_xml_writer->xmlElement(
'varequal', [
'respident' => $answer->getPosition()], $answer->getCorrectness());
214 $a_xml_writer->xmlEndTag(
'and');
215 $a_xml_writer->xmlEndTag(
'conditionvar');
217 $a_xml_writer->xmlElement(
'setvar', [
'action' =>
'Add'], $this->
object->getPoints());
219 if (strlen($feedback_allcorrect)) {
220 $a_xml_writer->xmlElement(
'displayfeedback', [
'feedbacktype' =>
'Response',
'linkrefid' =>
'response_allcorrect']);
223 $a_xml_writer->xmlEndTag(
'respcondition');
225 $feedback_onenotcorrect = $this->
object->feedbackOBJ->getGenericFeedbackExportPresentation(
230 $a_xml_writer->xmlStartTag(
'respcondition', [
'continue' =>
'Yes']);
232 $a_xml_writer->xmlStartTag(
'conditionvar');
233 $a_xml_writer->xmlStartTag(
'or');
234 foreach ($answers as $answer) {
235 $a_xml_writer->xmlStartTag(
'not');
236 $a_xml_writer->xmlElement(
'varequal', [
'respident' => $answer->getPosition()], $answer->getCorrectness());
237 $a_xml_writer->xmlEndTag(
'not');
239 $a_xml_writer->xmlEndTag(
'or');
240 $a_xml_writer->xmlEndTag(
'conditionvar');
242 $a_xml_writer->xmlElement(
'setvar', [
'action' =>
'Add'], 0);
244 if (strlen($feedback_onenotcorrect)) {
245 $a_xml_writer->xmlElement(
'displayfeedback', [
'feedbacktype' =>
'Response',
'linkrefid' =>
'response_onenotcorrect']);
248 $a_xml_writer->xmlEndTag(
'respcondition');
250 $a_xml_writer->xmlEndTag(
'resprocessing');
252 foreach ($answers as $answer) {
253 $a_xml_writer->xmlStartTag(
'itemfeedback', [
'ident' =>
"response_{$answer->getPosition()}",
'view' =>
'All']);
254 $a_xml_writer->xmlStartTag(
'flow_mat');
256 $this->
addQTIMaterial($a_xml_writer, $this->
object->feedbackOBJ->getSpecificAnswerFeedbackExportPresentation(
257 $this->object->getId(),
259 $answer->getPosition()
262 $a_xml_writer->xmlEndTag(
'flow_mat');
263 $a_xml_writer->xmlEndTag(
'itemfeedback');
265 if (strlen($feedback_allcorrect)) {
266 $a_xml_writer->xmlStartTag(
'itemfeedback', [
'ident' =>
'response_allcorrect',
'view' =>
'All']);
267 $a_xml_writer->xmlStartTag(
'flow_mat');
271 $a_xml_writer->xmlEndTag(
'flow_mat');
272 $a_xml_writer->xmlEndTag(
'itemfeedback');
274 if (strlen($feedback_onenotcorrect)) {
275 $a_xml_writer->xmlStartTag(
'itemfeedback', [
'ident' =>
'response_onenotcorrect',
'view' =>
'All']);
276 $a_xml_writer->xmlStartTag(
'flow_mat');
280 $a_xml_writer->xmlEndTag(
'flow_mat');
281 $a_xml_writer->xmlEndTag(
'itemfeedback');
284 $a_xml_writer->xmlEndTag(
"item");
285 $a_xml_writer->xmlEndTag(
"questestinterop");
287 $a_xml_writer = $a_xml_writer->xmlDumpMem(
false);
288 if (!$a_include_header) {
289 $pos = strpos($a_xml_writer,
"?>");
290 $a_xml_writer = substr($a_xml_writer, $pos + 2);
292 return $a_xml_writer;
297 if ($this->
object->isScorePartialSolutionEnabled()) {
298 return ($this->
object->getPoints() / 2);
306 return $this->
object->getPoints();
addQTIMaterial(ilXmlWriter $a_xml_writer, string $a_material, bool $close_material_tag=true, bool $add_mobs=true)
Class for question exports.
addGeneralMetadata(ilXmlWriter $xmlwriter)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
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)
toXML($a_include_header=true, $a_include_binary=true, $a_shuffle=false, $test_output=false, $force_image_references=false)