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