ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilQuestionExporter.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4
5require_once("./Modules/TestQuestionPool/classes/class.assQuestionGUI.php");
6
17{
18 static $exported = array(); //json data for all exported questions (class variable)
19 static $mobs = array(); //json data for all mobs (class variable)
20 static $media_files = array(); //json data for all files (class variable)
21
22 var $db; // database object
23 var $ilias; // ilias object
24 var $ref_id; // reference ID
25 var $inst_id; // installation id
26 var $q_gui; // Question GUI object
27 var $tpl; // question template
28 var $json; // json object for current question
29 var $json_decoded; // json object (decoded) for current question
30 var $preview_mode; // preview mode activated yes/no
31
36 public function ilQuestionExporter($a_preview_mode = false)
37 {
38 global $ilDB, $ilias, $lng;
39
40 $this->ref_id =& $a_ref_id;
41
42 $this->db =& $ilDB;
43 $this->lng = $lng;
44
45 $this->inst_id = IL_INST_ID;
46
47 $this->preview_mode = $a_preview_mode;
48
49 $this->tpl = new ilTemplate("tpl.question_export.html", true, true, "Modules/Scorm2004");
50
51 // fix for bug 5386, alex 29.10.2009
52 if (!$a_preview_mode)
53 {
54 $this->tpl->setVariable("FORM_BEGIN", "<form onsubmit='return false;'>");
55 $this->tpl->setVariable("FORM_END", "</form>");
56 }
57
58 }
59
60
61 public function exportQuestion($a_ref_id, $a_image_path = null, $a_output_mode = "presentation") {
62
63 if ($a_ref_id != "")
64 {
66 if (!($inst_id > 0))
67 {
69 }
70 }
71
72 $this->q_gui = assQuestionGUI::_getQuestionGUI("", $q_id);
73
74 if (!is_object($this->q_gui->object))
75 {
76 return "Error: Question not found.";
77 }
78
79 $type = $this->q_gui->object->getQuestionType();
80 if (method_exists($this,$type))
81 {
82 $this->q_gui->object->setExportImagePath($a_image_path);
83 $this->q_gui->object->feedbackOBJ->setPageObjectOutputMode($a_output_mode);
84 $this->json = $this->q_gui->object->toJSON();
85 $this->json_decoded = json_decode($this->json);
86 self::$exported[$this->json_decoded->id] = $this->json;
87 self::$mobs[$this->json_decoded->id] = $this->json_decoded->mobs;
88 return $this->$type();
89 } else {
90 return "Error: Question Type not implemented/Question editing not finished";
91 }
92 }
93
94 static public function indicateNewSco() {
95 self::$exported = array();
96 self::$mobs = array();
97 self::$media_files = array();
98 }
99
100 static public function getMobs() {
101 $allmobs = array();
102 foreach (self::$mobs as $key => $value) {
103 for ($i=0;$i<count($mobs[$key]);$i++) {
104 array_push($allmobs,$mobs[$key][$i]);
105 }
106 }
107 return $allmobs;
108 }
109
110 static public function getFiles() {
111 return self::$media_files;
112 }
113
114 static public function questionsJS(array $a_qids = null) {
115 $exportstring = '';
116 if(!is_array($a_qids)) {
117 $exportstring ='var questions = new Array();';
118 }
119 foreach (self::$exported as $key => $value) {
120 if(!is_array($a_qids) || in_array($key, $a_qids)) {
121 $exportstring .= "questions[$key]= $value;";
122 }
123 }
124 return $exportstring;
125 }
126
127 private function setHeaderFooter()
128 {
129 $this->tpl->setCurrentBlock("common");
130 $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
131 $this->tpl->setVariable("VAL_TYPE", $this->json_decoded->type);
132 $this->tpl->parseCurrentBlock();
133 }
134
135 private function assSingleChoice()
136 {
137 $this->tpl->setCurrentBlock("singlechoice");
138 $this->tpl->setVariable("TXT_SUBMIT_ANSWERS", $this->lng->txt("cont_submit_answers"));
139 $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
140 if ($this->preview_mode) {
141 $this->tpl->setVariable("VAL_NO_DISPLAY", "style=\"display:none\"");
142 }
143 if($this->json_decoded->path)
144 {
145 $this->tpl->setVariable("HANDLE_IMAGES",
146 "ilias.questions.handleMCImages(".$this->json_decoded->id.");");
147 }
148 $this->tpl->parseCurrentBlock();
149 foreach ($this->json_decoded->answers as $answer) {
150 if ($answer->image!="") {
151 array_push(self::$media_files,$this->q_gui->object->getImagePath().$answer->image);
152 if (is_file($this->q_gui->object->getImagePath()."thumb.".$answer->image))
153 {
154 array_push(self::$media_files,$this->q_gui->object->getImagePath()."thumb.".$answer->image);
155 }
156 }
157 }
158// $this->setHeaderFooter();
159 return $this->tpl->get();
160 }
161
162 private function assMultipleChoice() {
163 $this->tpl->setCurrentBlock("multiplechoice");
164 $this->tpl->setVariable("TXT_SUBMIT_ANSWERS", $this->lng->txt("cont_submit_answers"));
165 $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
166 if ($this->preview_mode) {
167 $this->tpl->setVariable("VAL_NO_DISPLAY", "style=\"display:none\"");
168 }
169 if($this->json_decoded->path)
170 {
171 $this->tpl->setVariable("HANDLE_IMAGES",
172 "ilias.questions.handleMCImages(".$this->json_decoded->id.");");
173 }
174 $this->tpl->parseCurrentBlock();
175 foreach ($this->json_decoded->answers as $answer) {
176 if ($answer->image!="") {
177 array_push(self::$media_files,$this->q_gui->object->getImagePath().$answer->image);
178 array_push(self::$media_files,$this->q_gui->object->getImagePath()."thumb.".$answer->image);
179 }
180 }
181// $this->setHeaderFooter();
182 return $this->tpl->get();
183 }
184
185
186 private function assKprimChoice()
187 {
188 global $tpl;
189 $tpl->addCss('Modules/Test/templates/default/ta.css');
190
191 $this->tpl->setCurrentBlock("kprimchoice");
192
193 $this->tpl->setVariable("TXT_SUBMIT_ANSWERS", $this->lng->txt("cont_submit_answers"));
194 $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
195
196 if( $this->preview_mode )
197 {
198 $this->tpl->setVariable("VAL_NO_DISPLAY", "style=\"display:none\"");
199 }
200
201 if( $this->json_decoded->path )
202 {
203 $this->tpl->setVariable("HANDLE_IMAGES",
204 "ilias.questions.handleMCImages(".$this->json_decoded->id.");");
205 }
206
207 $this->tpl->setVariable('OPTION_LABEL_TRUE', $this->json_decoded->trueOptionLabel);
208 $this->tpl->setVariable('OPTION_LABEL_FALSE', $this->json_decoded->falseOptionLabel);
209
210 $this->tpl->setVariable('VALUE_TRUE', 1);
211 $this->tpl->setVariable('VALUE_FALSE', 0);
212
213 $this->tpl->parseCurrentBlock();
214
215 foreach( $this->json_decoded->answers as $answer )
216 {
217 if( $answer->image != "" )
218 {
219 self::$media_files[] = $answer->getImageFsPath();
220 self::$media_files[] = $answer->getThumbFsPath();
221 }
222 }
223
224 // $this->setHeaderFooter();
225
226 return $this->tpl->get();
227 }
228
229 private function assTextQuestion() {
230 $maxlength = $this->json_decoded->maxlength == 0 ? 4096 : $this->json_decoded->maxlength;
231 $this->tpl->setCurrentBlock("textquestion");
232 $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
233 $this->tpl->setVariable("TXT_SUBMIT_ANSWERS", $this->lng->txt("cont_submit_answers"));
234 $this->tpl->setVariable("VAL_MAXLENGTH", $maxlength);
235 if ($this->preview_mode) {
236 $this->tpl->setVariable("VAL_NO_DISPLAY", "style=\"display:none\"");
237 }
238 $this->tpl->parseCurrentBlock();
239// $this->setHeaderFooter();
240 return $this->tpl->get();
241 }
242
243 private function assClozeTest() {
244 $this->tpl->setCurrentBlock("clozequestion");
245 $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
246 $this->tpl->setVariable("TXT_SUBMIT_ANSWERS", $this->lng->txt("cont_submit_answers"));
247 if ($this->preview_mode) {
248 $this->tpl->setVariable("VAL_NO_DISPLAY", "style=\"display:none\"");
249 }
250 $this->tpl->parseCurrentBlock();
251// $this->setHeaderFooter();
252 return $this->tpl->get();
253 }
254
255 private function assLongMenu() {
256 $this->tpl->setCurrentBlock("longmenu");
257 $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
258 $this->tpl->setVariable("TXT_SUBMIT_ANSWERS", $this->lng->txt("cont_submit_answers"));
259 if ($this->preview_mode) {
260 $this->tpl->setVariable("VAL_NO_DISPLAY", "style=\"display:none\"");
261 }
262 $this->tpl->parseCurrentBlock();
263// $this->setHeaderFooter();
264 return $this->tpl->get();
265 }
266
267 private function assOrderingQuestion() {
268 $this->tpl->setCurrentBlock("orderingquestion");
269 $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
270 $this->tpl->setVariable("TXT_SUBMIT_ANSWERS", $this->lng->txt("cont_submit_answers"));
271 if ($this->preview_mode) {
272 $this->tpl->setVariable("VAL_NO_DISPLAY", "style=\"display:none\"");
273 }
274 if($this->q_gui->object->getOrderingType() == OQ_PICTURES)
275 {
276 $this->tpl->setVariable("VAL_SUBTYPE", "_images");
277 $this->tpl->setVariable("HANDLE_IMAGES",
278 "ilias.questions.handleOrderingImages(".$this->json_decoded->id.");");
279
280 foreach ($this->json_decoded->answers as $answer) {
281 if ($answer->answertext!="") {
282 array_push(self::$media_files,$this->q_gui->object->getImagePath().$answer->answertext);
283 array_push(self::$media_files,$this->q_gui->object->getImagePath()."thumb.".$answer->answertext);
284 }
285 }
286 }
287 else
288 {
289 $this->tpl->setVariable("VAL_SUBTYPE", "_terms");
290 }
291 $this->tpl->parseCurrentBlock();
292// $this->setHeaderFooter();
293 return $this->tpl->get();
294 }
295
296 private function assMatchingQuestion() {
297 global $tpl;
298 $tpl->addJavaScript('Modules/TestQuestionPool/js/ilMatchingQuestion.js');
299 $tpl->addCss('Modules/TestQuestionPool/templates/default/test_javascript.css');
300 $this->tpl->setCurrentBlock("matchingquestion");
301 $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
302 $this->tpl->setVariable("BTN_LABEL_RESET", $this->lng->txt("reset_terms"));
303 $this->tpl->setVariable("TXT_SUBMIT_ANSWERS", $this->lng->txt("cont_submit_answers"));
304 if ($this->preview_mode) {
305 $this->tpl->setVariable("VAL_NO_DISPLAY", "style=\"display:none\"");
306 }
307 $this->tpl->parseCurrentBlock();
308// $this->setHeaderFooter();
309 return $this->tpl->get();
310 }
311
312 private function assImagemapQuestion() {
313 $this->tpl->setVariable("TXT_SUBMIT_ANSWERS", $this->lng->txt("cont_submit_answers"));
314 array_push(self::$media_files,$this->q_gui->object->getImagePath().$this->q_gui->object->getImageFilename());
315 $this->tpl->setCurrentBlock("mapareas");
316 $areas = $this->json_decoded->answers;
317 //set areas in PHP cause of inteference between pure and highlighter
318 foreach ($areas as $area) {
319 $this->tpl->setVariable("VAL_TOOLTIP", htmlspecialchars($area->answertext));
320 $this->tpl->setVariable("VAL_COORDS", $area->coords);
321 $this->tpl->setVariable("VAL_ORDER", $area->order);
322 $this->tpl->setVariable("VAL_AREA", $area->area);
323 $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
324 $this->tpl->parseCurrentBlock();
325 }
326 $this->tpl->setCurrentBlock("imagemapquestion");
327 $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
328 if ($this->preview_mode) {
329 $this->tpl->setVariable("VAL_NO_DISPLAY", "style=\"display:none\"");
330 }
331 $this->tpl->parseCurrentBlock();
332// $this->setHeaderFooter();
333 return $this->tpl->get();
334 }
335
336 private function assTextSubset() {
337 $this->tpl->setCurrentBlock("textsubset");
338 $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
339 $this->tpl->setVariable("TXT_SUBMIT_ANSWERS", $this->lng->txt("cont_submit_answers"));
340 $this->tpl->setVariable("VAL_MAXLENGTH", $maxlength);
341 if ($this->preview_mode) {
342 $this->tpl->setVariable("VAL_NO_DISPLAY", "style=\"display:none\"");
343 }
344 $this->tpl->parseCurrentBlock();
345// $this->setHeaderFooter();
346 return $this->tpl->get();
347 }
348
349 private function assOrderingHorizontal() {
350 $this->tpl->setCurrentBlock("orderinghorizontal");
351 $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
352 $this->tpl->setVariable("TXT_SUBMIT_ANSWERS", $this->lng->txt("cont_submit_answers"));
353 if ($this->preview_mode) {
354 $this->tpl->setVariable("VAL_NO_DISPLAY", "style=\"display:none\"");
355 }
356 $this->tpl->parseCurrentBlock();
357// $this->setHeaderFooter();
358 return $this->tpl->get();
359 }
360
361 private function assErrorText() {
362 $this->tpl->setCurrentBlock("errortext");
363 $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
364 $this->tpl->setVariable("TXT_SUBMIT_ANSWERS", $this->lng->txt("cont_submit_answers"));
365 if ($this->preview_mode) {
366 $this->tpl->setVariable("VAL_NO_DISPLAY", "style=\"display:none\"");
367 }
368 $this->tpl->parseCurrentBlock();
369// $this->setHeaderFooter();
370 return $this->tpl->get();
371 }
372}
373
374?>
& _getQuestionGUI($question_type, $question_id=-1)
Creates a question gui representation and returns the alias to the question gui note: please do not u...
Scorm 2004 Question Exporter.
exportQuestion($a_ref_id, $a_image_path=null, $a_output_mode="presentation")
static questionsJS(array $a_qids=null)
ilQuestionExporter($a_preview_mode=false)
Constructor @access public.
special template class to simplify handling of ITX/PEAR
const OQ_PICTURES
Ordering question constants.
global $lng
Definition: privfeed.php:40
global $ilDB
$mobs