ILIAS  Release_5_0_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  $tpl->parseCurrentBlock();
247  }
248  $tpl->setCurrentBlock('addimage');
249  $tpl->setVariable("IMAGE_ID", $this->getPostVar() . "[image][$i]");
250  $tpl->setVariable("IMAGE_SUBMIT", $lng->txt("upload"));
251  $tpl->setVariable("IMAGE_ROW_NUMBER", $i);
252  $tpl->setVariable("IMAGE_POST_VAR", $this->getPostVar());
253  $tpl->parseCurrentBlock();
254  }
255 
256  if (is_object($value))
257  {
258  $tpl->setCurrentBlock("prop_text_propval");
259  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getAnswertext()));
260  $tpl->parseCurrentBlock();
261  $tpl->setCurrentBlock("prop_points_propval");
262  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getPointsChecked()));
263  $tpl->parseCurrentBlock();
264  $tpl->setCurrentBlock("prop_points_unchecked_propval");
265  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getPointsUnchecked()));
266  $tpl->parseCurrentBlock();
267  }
268  $tpl->setCurrentBlock('singleline');
269  $tpl->setVariable("SIZE", $this->getSize());
270  $tpl->setVariable("SINGLELINE_ID", $this->getPostVar() . "[answer][$i]");
271  $tpl->setVariable("SINGLELINE_ROW_NUMBER", $i);
272  $tpl->setVariable("SINGLELINE_POST_VAR", $this->getPostVar());
273  $tpl->setVariable("MAXLENGTH", $this->getMaxLength());
274  if ($this->getDisabled())
275  {
276  $tpl->setVariable("DISABLED_SINGLELINE", " disabled=\"disabled\"");
277  }
278  $tpl->parseCurrentBlock();
279  }
280  else if (!$this->getSingleline())
281  {
282  if (is_object($value))
283  {
284  $tpl->setCurrentBlock("prop_points_propval");
285  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getPoints()));
286  $tpl->parseCurrentBlock();
287  $tpl->setCurrentBlock("prop_points_unchecked_propval");
288  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getPointsUnchecked()));
289  $tpl->parseCurrentBlock();
290  }
291  $tpl->setCurrentBlock('multiline');
292  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getAnswertext()));
293  $tpl->setVariable("MULTILINE_ID", $this->getPostVar() . "[answer][$i]");
294  $tpl->setVariable("MULTILINE_ROW_NUMBER", $i);
295  $tpl->setVariable("MULTILINE_POST_VAR", $this->getPostVar());
296  if ($this->getDisabled())
297  {
298  $tpl->setVariable("DISABLED_MULTILINE", " disabled=\"disabled\"");
299  }
300  $tpl->parseCurrentBlock();
301  }
302  if ($this->getAllowMove())
303  {
304  $tpl->setCurrentBlock("move");
305  $tpl->setVariable("CMD_UP", "cmd[up" . $this->getFieldId() . "][$i]");
306  $tpl->setVariable("CMD_DOWN", "cmd[down" . $this->getFieldId() . "][$i]");
307  $tpl->setVariable("ID", $this->getPostVar() . "[$i]");
308  $tpl->setVariable("UP_BUTTON", ilGlyphGUI::get(ilGlyphGUI::UP));
309  $tpl->setVariable("DOWN_BUTTON", ilGlyphGUI::get(ilGlyphGUI::DOWN));
310  $tpl->parseCurrentBlock();
311  }
312  $tpl->setCurrentBlock("row");
313  $tpl->setVariable("POST_VAR", $this->getPostVar());
314  $tpl->setVariable("ROW_NUMBER", $i);
315  $tpl->setVariable("ID", $this->getPostVar() . "[answer][$i]");
316  $tpl->setVariable("POINTS_ID", $this->getPostVar() . "[points][$i]");
317  $tpl->setVariable("POINTS_UNCHECKED_ID", $this->getPostVar() . "[points_unchecked][$i]");
318  $tpl->setVariable("CMD_ADD", "cmd[add" . $this->getFieldId() . "][$i]");
319  $tpl->setVariable("CMD_REMOVE", "cmd[remove" . $this->getFieldId() . "][$i]");
320  if ($this->getDisabled())
321  {
322  $tpl->setVariable("DISABLED_POINTS", " disabled=\"disabled\"");
323  }
324  $tpl->setVariable("ADD_BUTTON", ilGlyphGUI::get(ilGlyphGUI::ADD));
325  $tpl->setVariable("REMOVE_BUTTON", ilGlyphGUI::get(ilGlyphGUI::REMOVE));
326  $tpl->parseCurrentBlock();
327  $i++;
328  }
329 
330  if ($this->getSingleline())
331  {
332  if (!$this->hideImages)
333  {
334  if (is_array($this->getSuffixes()))
335  {
336  $suff_str = $delim = "";
337  foreach($this->getSuffixes() as $suffix)
338  {
339  $suff_str.= $delim.".".$suffix;
340  $delim = ", ";
341  }
342  $tpl->setCurrentBlock('allowed_image_suffixes');
343  $tpl->setVariable("TXT_ALLOWED_SUFFIXES", $lng->txt("file_allowed_suffixes")." ".$suff_str);
344  $tpl->parseCurrentBlock();
345  }
346 
347  $tpl->setCurrentBlock("image_heading");
348  $tpl->setVariable("ANSWER_IMAGE", $lng->txt('answer_image'));
349  $tpl->setVariable("TXT_MAX_SIZE", ilUtil::getFileSizeInfo());
350  $tpl->parseCurrentBlock();
351  }
352  }
353 
354  $tpl->setVariable("ELEMENT_ID", $this->getPostVar());
355  $tpl->setVariable("TEXT_YES", $lng->txt('yes'));
356  $tpl->setVariable("TEXT_NO", $lng->txt('no'));
357  $tpl->setVariable("DELETE_IMAGE_HEADER", $lng->txt('delete_image_header'));
358  $tpl->setVariable("DELETE_IMAGE_QUESTION", $lng->txt('delete_image_question'));
359  $tpl->setVariable("ANSWER_TEXT", $lng->txt('answer_text'));
360  $tpl->setVariable("POINTS_TEXT", $lng->txt('points'));
361  $tpl->setVariable("COMMANDS_TEXT", $lng->txt('actions'));
362  $tpl->setVariable("POINTS_CHECKED_TEXT", $lng->txt('checkbox_checked'));
363  $tpl->setVariable("POINTS_UNCHECKED_TEXT", $lng->txt('checkbox_unchecked'));
364 
365  $a_tpl->setCurrentBlock("prop_generic");
366  $a_tpl->setVariable("PROP_GENERIC", $tpl->get());
367  $a_tpl->parseCurrentBlock();
368 
369  global $tpl;
370  $tpl->addJavascript("./Services/Form/js/ServiceFormWizardInput.js");
371  $tpl->addJavascript("./Modules/TestQuestionPool/templates/default/multiplechoicewizard.js");
372  }
373 }