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.
33 : string
34 {
36 $ilias =
$DIC[
'ilias'];
37
38 include_once("./Services/Xml/classes/class.ilXmlWriter.php");
40
42 $xml->xmlStartTag(
"questestinterop");
43 $attrs = array(
45 "title" => $this->object->getTitle(),
46 "maxattempts" => $this->object->getNrOfTries()
47 );
48 $xml->xmlStartTag(
"item", $attrs);
49
50 $xml->xmlElement(
"qticomment",
null, $this->
object->getComment());
51 $xml->xmlStartTag(
"itemmetadata");
52 $xml->xmlStartTag(
"qtimetadata");
53 $xml->xmlStartTag(
"qtimetadatafield");
54 $xml->xmlElement(
"fieldlabel",
null,
"ILIAS_VERSION");
55 $xml->xmlElement(
"fieldentry",
null, $ilias->getSetting(
"ilias_version"));
56 $xml->xmlEndTag(
"qtimetadatafield");
57 $xml->xmlStartTag(
"qtimetadatafield");
58 $xml->xmlElement(
"fieldlabel",
null,
"QUESTIONTYPE");
60 $xml->xmlEndTag(
"qtimetadatafield");
61 $xml->xmlStartTag(
"qtimetadatafield");
62 $xml->xmlElement(
"fieldlabel",
null,
"AUTHOR");
63 $xml->xmlElement(
"fieldentry",
null, $this->
object->getAuthor());
64 $xml->xmlEndTag(
"qtimetadatafield");
65
66
69
70 $xml->xmlStartTag(
"qtimetadatafield");
71 $xml->xmlElement(
"fieldlabel",
null,
"answer_type");
72 $xml->xmlElement(
"fieldentry",
null, $this->
object->getAnswerType());
73 $xml->xmlEndTag(
"qtimetadatafield");
74
75 $xml->xmlStartTag(
"qtimetadatafield");
76 $xml->xmlElement(
"fieldlabel",
null,
"thumb_size");
77 $xml->xmlElement(
"fieldentry",
null, $this->
object->getThumbSize());
78 $xml->xmlEndTag(
"qtimetadatafield");
79
80 $xml->xmlStartTag(
"qtimetadatafield");
81 $xml->xmlElement(
"fieldlabel",
null,
"option_label_setting");
82 $xml->xmlElement(
"fieldentry",
null, $this->
object->getOptionLabel());
83 $xml->xmlEndTag(
"qtimetadatafield");
84 $xml->xmlStartTag(
"qtimetadatafield");
85 $xml->xmlElement(
"fieldlabel",
null,
"custom_true_option_label");
86 $xml->xmlElement(
"fieldentry",
null, $this->
object->getCustomTrueOptionLabel());
87 $xml->xmlEndTag(
"qtimetadatafield");
88 $xml->xmlStartTag(
"qtimetadatafield");
89 $xml->xmlElement(
"fieldlabel",
null,
"custom_false_option_label");
90 $xml->xmlElement(
"fieldentry",
null, $this->
object->getCustomFalseOptionLabel());
91 $xml->xmlEndTag(
"qtimetadatafield");
92
93 $xml->xmlStartTag(
"qtimetadatafield");
94 $xml->xmlElement(
"fieldlabel",
null,
"feedback_setting");
95 $xml->xmlElement(
"fieldentry",
null, $this->
object->getSpecificFeedbackSetting());
96 $xml->xmlEndTag(
"qtimetadatafield");
97
98 $xml->xmlEndTag(
"qtimetadata");
99 $xml->xmlEndTag(
"itemmetadata");
100
101
102 $attrs = array(
103 "label" => $this->
object->getTitle()
104 );
105 $xml->xmlStartTag(
"presentation", $attrs);
106
107 $xml->xmlStartTag(
"flow");
108
109 $this->
object->addQTIMaterial(
$xml, $this->
object->getQuestion());
110
111 $attrs = array(
112 "ident" => "MCMR",
113 "rcardinality" => "Multiple"
114 );
115 $xml->xmlStartTag(
"response_lid", $attrs);
116 $solution = $this->object->getSuggestedSolution(0);
117 if (count($solution)) {
118 if (preg_match("/il_(\d*?)_(\w+)_(\d+)/", $solution["internal_link"], $matches)) {
119 $xml->xmlStartTag(
"material");
120 $intlink =
"il_" .
IL_INST_ID .
"_" . $matches[2] .
"_" . $matches[3];
121 if (strcmp($matches[1], "") != 0) {
122 $intlink = $solution["internal_link"];
123 }
124 $attrs = array(
125 "label" => "suggested_solution"
126 );
127 $xml->xmlElement(
"mattext", $attrs, $intlink);
128 $xml->xmlEndTag(
"material");
129 }
130 }
131
132 $attrs = array();
133 if ($this->
object->isShuffleAnswersEnabled()) {
134 $attrs = array(
135 "shuffle" => "Yes"
136 );
137 } else {
138 $attrs = array(
139 "shuffle" => "No"
140 );
141 }
142 $xml->xmlStartTag(
"render_choice", $attrs);
143
144
145 $answers = $this->object->getAnswers();
146 $akeys = array_keys($answers);
147 foreach ($akeys as
$index) {
148 $answer = $this->object->getAnswer($index);
149
150 $xml->xmlStartTag(
'response_label', array(
'ident' => $answer->getPosition()));
151
152 if (strlen($answer->getImageFile())) {
153 $this->
object->addQTIMaterial(
$xml, $answer->getAnswertext(),
false,
false);
154 $imagetype = "image/jpeg";
155 if (preg_match("/.*\.(png|gif)$/", $answer->getImageFile(), $matches)) {
156 $imagetype = "image/" . $matches[1];
157 }
158 if ($force_image_references) {
159 $attrs = array(
160 "imagtype" => $imagetype,
161 "label" => $answer->getImageFile(),
162 "uri" => $answer->getImageWebPath()
163 );
164 $xml->xmlElement(
"matimage", $attrs);
165 } else {
166 $imagepath = $answer->getImageFsPath();
167 $fh = @fopen($imagepath, "rb");
168 if ($fh != false) {
169 $imagefile = fread($fh, filesize($imagepath));
170 fclose($fh);
171 $base64 = base64_encode($imagefile);
172 $attrs = array(
173 "imagtype" => $imagetype,
174 "label" => $answer->getImageFile(),
175 "embedded" => "base64"
176 );
177 $xml->xmlElement(
"matimage", $attrs, $base64,
false,
false);
178 }
179 }
180 $xml->xmlEndTag(
"material");
181 } else {
182 $this->
object->addQTIMaterial(
$xml, $answer->getAnswertext());
183 }
184 $xml->xmlEndTag(
"response_label");
185 }
186 $xml->xmlEndTag(
"render_choice");
187 $xml->xmlEndTag(
"response_lid");
188 $xml->xmlEndTag(
"flow");
189 $xml->xmlEndTag(
"presentation");
190
191
192
193 $xml->xmlStartTag(
'resprocessing');
194
195 $xml->xmlStartTag(
'outcomes');
196 $xml->xmlElement(
'decvar', array(
197 'varname' => 'SCORE', 'vartype' => 'Decimal', 'defaultval' => '0',
199 ));
200 $xml->xmlEndTag(
'outcomes');
201
202
203 foreach ($answers as $answer) {
204 $xml->xmlStartTag(
'respcondition', array(
'continue' =>
'Yes'));
205
206 $xml->xmlStartTag(
'conditionvar');
207 $xml->xmlElement(
'varequal', array(
'respident' => $answer->getPosition()), $answer->getCorrectness());
208 $xml->xmlEndTag(
'conditionvar');
209
210 $xml->xmlElement(
'displayfeedback', array(
211 'feedbacktype' => 'Response', 'linkrefid' => "response_{$answer->getPosition()}"
212 ));
213
214 $xml->xmlEndTag(
'respcondition');
215 }
216
217 $feedback_allcorrect = $this->object->feedbackOBJ->getGenericFeedbackExportPresentation(
219 true
220 );
221
222 $xml->xmlStartTag(
'respcondition', array(
'continue' =>
'Yes'));
223
224 $xml->xmlStartTag(
'conditionvar');
225 $xml->xmlStartTag(
'and');
226 foreach ($answers as $answer) {
227 $xml->xmlElement(
'varequal', array(
'respident' => $answer->getPosition()), $answer->getCorrectness());
228 }
229 $xml->xmlEndTag(
'and');
230 $xml->xmlEndTag(
'conditionvar');
231
232 $xml->xmlElement(
'setvar', array(
'action' =>
'Add'), $this->
object->getPoints());
233
234 if (strlen($feedback_allcorrect)) {
235 $xml->xmlElement(
'displayfeedback', array(
'feedbacktype' =>
'Response',
'linkrefid' =>
'response_allcorrect'));
236 }
237
238 $xml->xmlEndTag(
'respcondition');
239
240 $feedback_onenotcorrect = $this->object->feedbackOBJ->getGenericFeedbackExportPresentation(
242 false
243 );
244
245 $xml->xmlStartTag(
'respcondition', array(
'continue' =>
'Yes'));
246
247 $xml->xmlStartTag(
'conditionvar');
248 $xml->xmlStartTag(
'or');
249 foreach ($answers as $answer) {
250 $xml->xmlStartTag(
'not');
251 $xml->xmlElement(
'varequal', array(
'respident' => $answer->getPosition()), $answer->getCorrectness());
252 $xml->xmlEndTag(
'not');
253 }
254 $xml->xmlEndTag(
'or');
255 $xml->xmlEndTag(
'conditionvar');
256
257 $xml->xmlElement(
'setvar', array(
'action' =>
'Add'), 0);
258
259 if (strlen($feedback_onenotcorrect)) {
260 $xml->xmlElement(
'displayfeedback', array(
'feedbacktype' =>
'Response',
'linkrefid' =>
'response_onenotcorrect'));
261 }
262
263 $xml->xmlEndTag(
'respcondition');
264
265 $xml->xmlEndTag(
'resprocessing');
266
267 foreach ($answers as $answer) {
268 $xml->xmlStartTag(
'itemfeedback', array(
'ident' =>
"response_{$answer->getPosition()}",
'view' =>
'All'));
269 $xml->xmlStartTag(
'flow_mat');
270
271 $this->
object->addQTIMaterial(
$xml, $this->
object->feedbackOBJ->getSpecificAnswerFeedbackExportPresentation(
272 $this->object->getId(),
273 0,
274 $answer->getPosition()
275 ));
276
277 $xml->xmlEndTag(
'flow_mat');
278 $xml->xmlEndTag(
'itemfeedback');
279 }
280 if (strlen($feedback_allcorrect)) {
281 $xml->xmlStartTag(
'itemfeedback', array(
'ident' =>
'response_allcorrect',
'view' =>
'All'));
282 $xml->xmlStartTag(
'flow_mat');
283
284 $this->
object->addQTIMaterial(
$xml, $feedback_allcorrect);
285
286 $xml->xmlEndTag(
'flow_mat');
287 $xml->xmlEndTag(
'itemfeedback');
288 }
289 if (strlen($feedback_onenotcorrect)) {
290 $xml->xmlStartTag(
'itemfeedback', array(
'ident' =>
'response_onenotcorrect',
'view' =>
'All'));
291 $xml->xmlStartTag(
'flow_mat');
292
293 $this->
object->addQTIMaterial(
$xml, $feedback_onenotcorrect);
294
295 $xml->xmlEndTag(
'flow_mat');
296 $xml->xmlEndTag(
'itemfeedback');
297 }
298
300
301 $xml->xmlEndTag(
"item");
302 $xml->xmlEndTag(
"questestinterop");
303
305 if (!$a_include_header) {
306 $pos = strpos(
$xml,
"?>");
308 }
310 }
addGeneralMetadata(ilXmlWriter $xmlwriter)
addSolutionHints(ilXmlWriter $writer)
addAdditionalContentEditingModeInformation(ilXmlWriter $a_xml_writer)
adds a qti meta data field for ilias specific information of "additional content editing mode" (xml w...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
const KPRIM_CHOICE_QUESTION_IDENTIFIER