ILIAS  Release_4_4_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilMultipleChoiceWizardInputGUI.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 include_once "./Modules/TestQuestionPool/classes/class.ilSingleChoiceWizardInputGUI.php";
5 
14 {
20  function setValue($a_value)
21  {
22  $this->values = array();
23  if (is_array($a_value))
24  {
25  if (is_array($a_value['answer']))
26  {
27  foreach ($a_value['answer'] as $index => $value)
28  {
29  include_once "./Modules/TestQuestionPool/classes/class.assAnswerMultipleResponseImage.php";
30  $answer = new ASS_AnswerMultipleResponseImage($value, $a_value['points'][$index], $index, $a_value['points_unchecked'][$index], $a_value['imagename'][$index]);
31  array_push($this->values, $answer);
32  }
33  }
34  }
35  }
36 
42  function checkInput()
43  {
44  global $lng;
45 
46  include_once "./Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php";
47  if (is_array($_POST[$this->getPostVar()])) $_POST[$this->getPostVar()] = ilUtil::stripSlashesRecursive($_POST[$this->getPostVar()], false, ilObjAdvancedEditing::_getUsedHTMLTagsAsString("assessment"));
48  $foundvalues = $_POST[$this->getPostVar()];
49  if (is_array($foundvalues))
50  {
51  // check answers
52  if (is_array($foundvalues['answer']))
53  {
54  foreach ($foundvalues['answer'] as $aidx => $answervalue)
55  {
56  if (((strlen($answervalue)) == 0) && (strlen($foundvalues['imagename'][$aidx]) == 0))
57  {
58  $this->setAlert($lng->txt("msg_input_is_required"));
59  return FALSE;
60  }
61  }
62  }
63  // check points
64  $max = 0;
65  if (is_array($foundvalues['points']))
66  {
67  foreach ($foundvalues['points'] as $points)
68  {
69  if ($points > $max) $max = $points;
70  if (((strlen($points)) == 0) || (!is_numeric($points)))
71  {
72  $this->setAlert($lng->txt("form_msg_numeric_value_required"));
73  return FALSE;
74  }
75  }
76  foreach ($foundvalues['points_unchecked'] as $points)
77  {
78  if ($points > $max) $max = $points;
79  if (((strlen($points)) == 0) || (!is_numeric($points)))
80  {
81  $this->setAlert($lng->txt("form_msg_numeric_value_required"));
82  return FALSE;
83  }
84  }
85  }
86  if ($max == 0)
87  {
88  $this->setAlert($lng->txt("enter_enough_positive_points"));
89  return false;
90  }
91 
92  if (is_array($_FILES) && count($_FILES) && $this->getSingleline())
93  {
94  if (!$this->hideImages)
95  {
96  if (is_array($_FILES[$this->getPostVar()]['error']['image']))
97  {
98  foreach ($_FILES[$this->getPostVar()]['error']['image'] as $index => $error)
99  {
100  // error handling
101  if ($error > 0)
102  {
103  switch ($error)
104  {
105  case UPLOAD_ERR_INI_SIZE:
106  $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
107  return false;
108  break;
109 
110  case UPLOAD_ERR_FORM_SIZE:
111  $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
112  return false;
113  break;
114 
115  case UPLOAD_ERR_PARTIAL:
116  $this->setAlert($lng->txt("form_msg_file_partially_uploaded"));
117  return false;
118  break;
119 
120  case UPLOAD_ERR_NO_FILE:
121  if ($this->getRequired())
122  {
123  if ((!strlen($foundvalues['imagename'][$index])) && (!strlen($foundvalues['answer'][$index])))
124  {
125  $this->setAlert($lng->txt("form_msg_file_no_upload"));
126  return false;
127  }
128  }
129  break;
130 
131  case UPLOAD_ERR_NO_TMP_DIR:
132  $this->setAlert($lng->txt("form_msg_file_missing_tmp_dir"));
133  return false;
134  break;
135 
136  case UPLOAD_ERR_CANT_WRITE:
137  $this->setAlert($lng->txt("form_msg_file_cannot_write_to_disk"));
138  return false;
139  break;
140 
141  case UPLOAD_ERR_EXTENSION:
142  $this->setAlert($lng->txt("form_msg_file_upload_stopped_ext"));
143  return false;
144  break;
145  }
146  }
147  }
148  }
149  else
150  {
151  if ($this->getRequired())
152  {
153  $this->setAlert($lng->txt("form_msg_file_no_upload"));
154  return false;
155  }
156  }
157 
158  if (is_array($_FILES[$this->getPostVar()]['tmp_name']['image']))
159  {
160  foreach ($_FILES[$this->getPostVar()]['tmp_name']['image'] as $index => $tmpname)
161  {
162  $filename = $_FILES[$this->getPostVar()]['name']['image'][$index];
163  $filename_arr = pathinfo($filename);
164  $suffix = $filename_arr["extension"];
165  $mimetype = $_FILES[$this->getPostVar()]['type']['image'][$index];
166  $size_bytes = $_FILES[$this->getPostVar()]['size']['image'][$index];
167  // check suffixes
168  if (strlen($tmpname) && is_array($this->getSuffixes()))
169  {
170  if (!in_array(strtolower($suffix), $this->getSuffixes()))
171  {
172  $this->setAlert($lng->txt("form_msg_file_wrong_file_type"));
173  return false;
174  }
175  }
176  }
177  }
178 
179  if (is_array($_FILES[$this->getPostVar()]['tmp_name']['image']))
180  {
181  foreach ($_FILES[$this->getPostVar()]['tmp_name']['image'] as $index => $tmpname)
182  {
183  $filename = $_FILES[$this->getPostVar()]['name']['image'][$index];
184  $filename_arr = pathinfo($filename);
185  $suffix = $filename_arr["extension"];
186  $mimetype = $_FILES[$this->getPostVar()]['type']['image'][$index];
187  $size_bytes = $_FILES[$this->getPostVar()]['size']['image'][$index];
188  // virus handling
189  if (strlen($tmpname))
190  {
191  $vir = ilUtil::virusHandling($tmpname, $filename);
192  if ($vir[0] == false)
193  {
194  $this->setAlert($lng->txt("form_msg_file_virus_found")."<br />".$vir[1]);
195  return false;
196  }
197  }
198  }
199  }
200  }
201  }
202  }
203  else
204  {
205  $this->setAlert($lng->txt("msg_input_is_required"));
206  return FALSE;
207  }
208 
209  return $this->checkSubItemsInput();
210  }
211 
217  function insert(&$a_tpl)
218  {
219  global $lng;
220 
221  $tpl = new ilTemplate("tpl.prop_multiplechoicewizardinput.html", true, true, "Modules/TestQuestionPool");
222  $i = 0;
223  foreach ($this->values as $value)
224  {
225  if ($this->getSingleline())
226  {
227  if (!$this->hideImages)
228  {
229  if (strlen($value->getImage()))
230  {
231  $imagename = $this->qstObject->getImagePathWeb() . $value->getImage();
232  if (($this->getSingleline()) && ($this->qstObject->getThumbSize()))
233  {
234  if (@file_exists($this->qstObject->getImagePath() . $this->qstObject->getThumbPrefix() . $value->getImage()))
235  {
236  $imagename = $this->qstObject->getImagePathWeb() . $this->qstObject->getThumbPrefix() . $value->getImage();
237  }
238  }
239  $tpl->setCurrentBlock('image');
240  $tpl->setVariable('SRC_IMAGE', $imagename);
241  $tpl->setVariable('IMAGE_NAME', $value->getImage());
242  $tpl->setVariable('ALT_IMAGE', ilUtil::prepareFormOutput($value->getAnswertext()));
243  $tpl->setVariable("TXT_DELETE_EXISTING", $lng->txt("delete_existing_file"));
244  $tpl->setVariable("IMAGE_ROW_NUMBER", $i);
245  $tpl->setVariable("IMAGE_POST_VAR", $this->getPostVar());
246  if($this->disable_upload)
247  {
248  $tpl->setVariable('DISABLED_UPLOAD', 'type="hidden" disabled="disabled"');
249  }
250  $tpl->parseCurrentBlock();
251  }
252  $tpl->setCurrentBlock('addimage');
253  $tpl->setVariable("IMAGE_ID", $this->getPostVar() . "[image][$i]");
254  $tpl->setVariable("IMAGE_SUBMIT", $lng->txt("upload"));
255  $tpl->setVariable("IMAGE_ROW_NUMBER", $i);
256  $tpl->setVariable("IMAGE_POST_VAR", $this->getPostVar());
257  if($this->disable_upload)
258  {
259  $tpl->setVariable('DISABLED_UPLOAD', 'type="hidden" disabled="disabled"');
260  }
261  $tpl->parseCurrentBlock();
262  }
263 
264  if (is_object($value))
265  {
266  $tpl->setCurrentBlock("prop_text_propval");
267  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getAnswertext()));
268  $tpl->parseCurrentBlock();
269  $tpl->setCurrentBlock("prop_points_propval");
270  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getPointsChecked()));
271  $tpl->parseCurrentBlock();
272  $tpl->setCurrentBlock("prop_points_unchecked_propval");
273  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getPointsUnchecked()));
274  $tpl->parseCurrentBlock();
275  }
276  $tpl->setCurrentBlock('singleline');
277  if($this->disable_text)
278  {
279  $tpl->setVariable("DISABLED_SINGLELINE", 'readonly="readonly"');
280  $tpl->setVariable("DISABLED_SINGLELINE_BTN", 'readonly="readonly"');
281  }
282  $tpl->setVariable("SIZE", $this->getSize());
283  $tpl->setVariable("SINGLELINE_ID", $this->getPostVar() . "[answer][$i]");
284  $tpl->setVariable("SINGLELINE_ROW_NUMBER", $i);
285  $tpl->setVariable("SINGLELINE_POST_VAR", $this->getPostVar());
286  $tpl->setVariable("MAXLENGTH", $this->getMaxLength());
287  if ($this->getDisabled())
288  {
289  $tpl->setVariable("DISABLED_SINGLELINE", " disabled=\"disabled\"");
290  }
291  $tpl->parseCurrentBlock();
292  }
293  else if (!$this->getSingleline())
294  {
295  if (is_object($value))
296  {
297  $tpl->setCurrentBlock("prop_points_propval");
298  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getPoints()));
299  $tpl->parseCurrentBlock();
300  $tpl->setCurrentBlock("prop_points_unchecked_propval");
301  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getPointsUnchecked()));
302  $tpl->parseCurrentBlock();
303  }
304  $tpl->setCurrentBlock('multiline');
305  if($this->disable_text)
306  {
307  $tpl->setVariable("DISABLED_MULTILINE", 'readonly="readonly"');
308  }
309 
310  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getAnswertext()));
311  $tpl->setVariable("MULTILINE_ID", $this->getPostVar() . "[answer][$i]");
312  $tpl->setVariable("MULTILINE_ROW_NUMBER", $i);
313  $tpl->setVariable("MULTILINE_POST_VAR", $this->getPostVar());
314  if ($this->getDisabled())
315  {
316  $tpl->setVariable("DISABLED_MULTILINE", " disabled=\"disabled\"");
317  }
318  $tpl->parseCurrentBlock();
319  }
320  if ($this->getAllowMove())
321  {
322  $tpl->setCurrentBlock("move");
323  $tpl->setVariable("CMD_UP", "cmd[up" . $this->getFieldId() . "][$i]");
324  $tpl->setVariable("CMD_DOWN", "cmd[down" . $this->getFieldId() . "][$i]");
325  $tpl->setVariable("MOVE_ID", $this->getPostVar() . "[$i]");
326  $tpl->setVariable("UP_BUTTON", ilUtil::getImagePath('a_up.png'));
327  $tpl->setVariable("DOWN_BUTTON", ilUtil::getImagePath('a_down.png'));
328  $tpl->parseCurrentBlock();
329  }
330  $tpl->setCurrentBlock("row");
331  $class = ($i % 2 == 0) ? "even" : "odd";
332  if ($i == 0) $class .= " first";
333  if ($i == count($this->values)-1) $class .= " last";
334  $tpl->setVariable("ROW_CLASS", $class);
335  $tpl->setVariable("POST_VAR", $this->getPostVar());
336  $tpl->setVariable("ROW_NUMBER", $i);
337  $tpl->setVariable("POINTS_ID", $this->getPostVar() . "[points][$i]");
338  $tpl->setVariable("POINTS_UNCHECKED_ID", $this->getPostVar() . "[points_unchecked][$i]");
339  if(!$this->disable_actions)
340  {
341  $tpl->setVariable( "CMD_ADD", "cmd[add" . $this->getFieldId() . "][$i]" );
342  $tpl->setVariable("CMD_REMOVE", "cmd[remove" . $this->getFieldId() . "][$i]");
343  $tpl->setVariable("ID", $this->getPostVar() . "[answer][$i]");
344  }
345  if ($this->getDisabled())
346  {
347  $tpl->setVariable("DISABLED_POINTS", " disabled=\"disabled\"");
348  }
349  if($this->disable_actions)
350  {
351  //$tpl->setVariable( 'DISABLE_ACTIONS', 'disabled="disabled"' );
352  }
353  else
354  {
355  $tpl->setVariable("ADD_BUTTON", ilUtil::getImagePath('edit_add.png'));
356  $tpl->setVariable("REMOVE_BUTTON", ilUtil::getImagePath('edit_remove.png'));
357  }
358  $tpl->parseCurrentBlock();
359  $i++;
360  }
361 
362  if ($this->getSingleline())
363  {
364  if (!$this->hideImages)
365  {
366  if (is_array($this->getSuffixes()))
367  {
368  $suff_str = $delim = "";
369  foreach($this->getSuffixes() as $suffix)
370  {
371  $suff_str.= $delim.".".$suffix;
372  $delim = ", ";
373  }
374  $tpl->setCurrentBlock('allowed_image_suffixes');
375  $tpl->setVariable("TXT_ALLOWED_SUFFIXES", $lng->txt("file_allowed_suffixes")." ".$suff_str);
376  $tpl->parseCurrentBlock();
377  }
378 
379  $tpl->setCurrentBlock("image_heading");
380  $tpl->setVariable("ANSWER_IMAGE", $lng->txt('answer_image'));
381  $tpl->setVariable("TXT_MAX_SIZE", ilUtil::getFileSizeInfo());
382  $tpl->parseCurrentBlock();
383  }
384  }
385 
386  $tpl->setVariable("ELEMENT_ID", $this->getPostVar());
387  $tpl->setVariable("TEXT_YES", $lng->txt('yes'));
388  $tpl->setVariable("TEXT_NO", $lng->txt('no'));
389  $tpl->setVariable("DELETE_IMAGE_HEADER", $lng->txt('delete_image_header'));
390  $tpl->setVariable("DELETE_IMAGE_QUESTION", $lng->txt('delete_image_question'));
391  $tpl->setVariable("ANSWER_TEXT", $lng->txt('answer_text'));
392  $tpl->setVariable("POINTS_TEXT", $lng->txt('points'));
393  if(!$this->disable_actions)
394  {
395  $tpl->setVariable("COMMANDS_TEXT", $lng->txt('actions'));
396  }
397  $tpl->setVariable("POINTS_CHECKED_TEXT", $lng->txt('checkbox_checked'));
398  $tpl->setVariable("POINTS_UNCHECKED_TEXT", $lng->txt('checkbox_unchecked'));
399 
400  $a_tpl->setCurrentBlock("prop_generic");
401  $a_tpl->setVariable("PROP_GENERIC", $tpl->get());
402  $a_tpl->parseCurrentBlock();
403 
404  global $tpl;
405  include_once "./Services/YUI/classes/class.ilYuiUtil.php";
407  $tpl->addJavascript("./Modules/TestQuestionPool/templates/default/multiplechoicewizard.js");
408  }
409 }