ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
All Data Structures Namespaces Files Functions Variables Modules Pages
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 assOrderingQuestion() {
256  $this->tpl->setCurrentBlock("orderingquestion");
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  if($this->q_gui->object->getOrderingType() == OQ_PICTURES)
263  {
264  $this->tpl->setVariable("VAL_SUBTYPE", "_images");
265  $this->tpl->setVariable("HANDLE_IMAGES",
266  "ilias.questions.handleOrderingImages(".$this->json_decoded->id.");");
267 
268  foreach ($this->json_decoded->answers as $answer) {
269  if ($answer->answertext!="") {
270  array_push(self::$media_files,$this->q_gui->object->getImagePath().$answer->answertext);
271  array_push(self::$media_files,$this->q_gui->object->getImagePath()."thumb.".$answer->answertext);
272  }
273  }
274  }
275  else
276  {
277  $this->tpl->setVariable("VAL_SUBTYPE", "_terms");
278  }
279  $this->tpl->parseCurrentBlock();
280 // $this->setHeaderFooter();
281  return $this->tpl->get();
282  }
283 
284  private function assMatchingQuestion() {
285  global $tpl;
286  $tpl->addJavaScript('Modules/TestQuestionPool/js/ilMatchingQuestion.js');
287  $tpl->addCss('Modules/TestQuestionPool/templates/default/test_javascript.css');
288  $this->tpl->setCurrentBlock("matchingquestion");
289  $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
290  $this->tpl->setVariable("BTN_LABEL_RESET", $this->lng->txt("reset_terms"));
291  $this->tpl->setVariable("TXT_SUBMIT_ANSWERS", $this->lng->txt("cont_submit_answers"));
292  if ($this->preview_mode) {
293  $this->tpl->setVariable("VAL_NO_DISPLAY", "style=\"display:none\"");
294  }
295  $this->tpl->parseCurrentBlock();
296 // $this->setHeaderFooter();
297  return $this->tpl->get();
298  }
299 
300  private function assImagemapQuestion() {
301  $this->tpl->setVariable("TXT_SUBMIT_ANSWERS", $this->lng->txt("cont_submit_answers"));
302  array_push(self::$media_files,$this->q_gui->object->getImagePath().$this->q_gui->object->getImageFilename());
303  $this->tpl->setCurrentBlock("mapareas");
304  $areas = $this->json_decoded->answers;
305  //set areas in PHP cause of inteference between pure and highlighter
306  foreach ($areas as $area) {
307  $this->tpl->setVariable("VAL_TOOLTIP", htmlspecialchars($area->answertext));
308  $this->tpl->setVariable("VAL_COORDS", $area->coords);
309  $this->tpl->setVariable("VAL_ORDER", $area->order);
310  $this->tpl->setVariable("VAL_AREA", $area->area);
311  $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
312  $this->tpl->parseCurrentBlock();
313  }
314  $this->tpl->setCurrentBlock("imagemapquestion");
315  $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
316  if ($this->preview_mode) {
317  $this->tpl->setVariable("VAL_NO_DISPLAY", "style=\"display:none\"");
318  }
319  $this->tpl->parseCurrentBlock();
320 // $this->setHeaderFooter();
321  return $this->tpl->get();
322  }
323 
324  private function assTextSubset() {
325  $this->tpl->setCurrentBlock("textsubset");
326  $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
327  $this->tpl->setVariable("TXT_SUBMIT_ANSWERS", $this->lng->txt("cont_submit_answers"));
328  $this->tpl->setVariable("VAL_MAXLENGTH", $maxlength);
329  if ($this->preview_mode) {
330  $this->tpl->setVariable("VAL_NO_DISPLAY", "style=\"display:none\"");
331  }
332  $this->tpl->parseCurrentBlock();
333 // $this->setHeaderFooter();
334  return $this->tpl->get();
335  }
336 
337  private function assOrderingHorizontal() {
338  $this->tpl->setCurrentBlock("orderinghorizontal");
339  $this->tpl->setVariable("VAL_ID", $this->json_decoded->id);
340  $this->tpl->setVariable("TXT_SUBMIT_ANSWERS", $this->lng->txt("cont_submit_answers"));
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 assErrorText() {
350  $this->tpl->setCurrentBlock("errortext");
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 
362 ?>
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)