ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5
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 
5 require_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  {
65  $inst_id = ilInternalLink::_extractInstOfTarget($a_ref_id);
66  if (!($inst_id > 0))
67  {
68  $q_id = ilInternalLink::_extractObjIdOfTarget($a_ref_id);
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 ?>
Scorm 2004 Question Exporter.
exportQuestion($a_ref_id, $a_image_path=null, $a_output_mode="presentation")
ilQuestionExporter($a_preview_mode=false)
Constructor public.
const OQ_PICTURES
Ordering question constants.
$mobs
special template class to simplify handling of ITX/PEAR
& _getQuestionGUI($question_type, $question_id=-1)
Creates a question gui representation and returns the alias to the question gui note: please do not u...
global $lng
Definition: privfeed.php:40
global $ilDB
static questionsJS(array $a_qids=null)