ILIAS  Release_4_4_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilMatchingWizardInputGUI.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 require_once './Modules/TestQuestionPool/classes/class.ilSingleChoiceWizardInputGUI.php';
5 
17 {
18  protected $text_name = '';
19  protected $image_name = '';
20  protected $values = array();
21  protected $allowMove = false;
22  protected $qstObject = null;
23  protected $suffixes = array();
24  protected $hideImages = false;
25 
26  protected $disable_text = false;
27  protected $disable_upload = false;
28  protected $disable_actions = false;
29 
38  function __construct($a_title = "", $a_postvar = "")
39  {
40  global $lng;
41 
42  parent::__construct($a_title, $a_postvar);
43  $this->setSuffixes(array("jpg", "jpeg", "png", "gif"));
44  $this->setSize('50');
45  $this->text_name = $lng->txt('answer_text');
46  $this->image_name = $lng->txt('answer_image');
47  }
48 
53  {
54  $this->disable_upload = $disable_upload;
55  }
56 
61  {
62  $this->disable_actions = $disable_actions;
63  }
64 
68  public function setDisableText($disable_text)
69  {
70  $this->disable_text = $disable_text;
71  }
72 
78  function setSuffixes($a_suffixes)
79  {
80  $this->suffixes = $a_suffixes;
81  }
82 
88  function getSuffixes()
89  {
90  return $this->suffixes;
91  }
92 
98  function setHideImages($a_hide)
99  {
100  $this->hideImages = $a_hide;
101  }
102 
108  function setValues($a_values)
109  {
110  $this->values = $a_values;
111  }
112 
118  function getValues()
119  {
120  return $this->values;
121  }
122 
123  function setTextName($a_value)
124  {
125  $this->text_name = $a_value;
126  }
127 
128  function setImageName($a_value)
129  {
130  $this->image_name = $a_value;
131  }
132 
138  function setQuestionObject($a_value)
139  {
140  $this->qstObject =& $a_value;
141  }
142 
148  function getQuestionObject()
149  {
150  return $this->qstObject;
151  }
152 
158  function setAllowMove($a_allow_move)
159  {
160  $this->allowMove = $a_allow_move;
161  }
162 
168  function getAllowMove()
169  {
170  return $this->allowMove;
171  }
172 
178  function setValue($a_value)
179  {
180  $this->values = array();
181  if (is_array($a_value))
182  {
183  if (is_array($a_value['answer']))
184  {
185  foreach ($a_value['answer'] as $index => $value)
186  {
187  include_once "./Modules/TestQuestionPool/classes/class.assAnswerMatchingTerm.php";
188  $answer = new assAnswerMatchingTerm($value, $a_value['imagename'][$index], $a_value['identifier'][$index]);
189  array_push($this->values, $answer);
190  }
191  }
192  }
193  }
194 
200  function checkInput()
201  {
202  global $lng;
203  include_once "./Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php";
204  if (is_array($_POST[$this->getPostVar()]))
205  {
207  }
208  $foundvalues = $_POST[$this->getPostVar()];
209  if (is_array($foundvalues))
210  {
211  // check answers
212  if (is_array($foundvalues['answer']))
213  {
214  foreach ($foundvalues['answer'] as $aidx => $answervalue)
215  {
216  if (((strlen($answervalue)) == 0) && (strlen($foundvalues['imagename'][$aidx]) == 0))
217  {
218  $this->setAlert($lng->txt("msg_input_is_required"));
219  return FALSE;
220  }
221  }
222  }
223  if (!$this->hideImages)
224  {
225  if (is_array($_FILES[$this->getPostVar()]['error']['image']))
226  {
227  foreach ($_FILES[$this->getPostVar()]['error']['image'] as $index => $error)
228  {
229  // error handling
230  if ($error > 0)
231  {
232  switch ($error)
233  {
234  case UPLOAD_ERR_INI_SIZE:
235  $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
236  return false;
237  break;
238 
239  case UPLOAD_ERR_FORM_SIZE:
240  $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
241  return false;
242  break;
243 
244  case UPLOAD_ERR_PARTIAL:
245  $this->setAlert($lng->txt("form_msg_file_partially_uploaded"));
246  return false;
247  break;
248 
249  case UPLOAD_ERR_NO_FILE:
250  if ($this->getRequired())
251  {
252  if ((!strlen($foundvalues['imagename'][$index])) && (!strlen($foundvalues['answer'][$index])))
253  {
254  $this->setAlert($lng->txt("form_msg_file_no_upload"));
255  return false;
256  }
257  }
258  break;
259 
260  case UPLOAD_ERR_NO_TMP_DIR:
261  $this->setAlert($lng->txt("form_msg_file_missing_tmp_dir"));
262  return false;
263  break;
264 
265  case UPLOAD_ERR_CANT_WRITE:
266  $this->setAlert($lng->txt("form_msg_file_cannot_write_to_disk"));
267  return false;
268  break;
269 
270  case UPLOAD_ERR_EXTENSION:
271  $this->setAlert($lng->txt("form_msg_file_upload_stopped_ext"));
272  return false;
273  break;
274  }
275  }
276  }
277  }
278 
279  if (is_array($_FILES[$this->getPostVar()]['tmp_name']['image']))
280  {
281  foreach ($_FILES[$this->getPostVar()]['tmp_name']['image'] as $index => $tmpname)
282  {
283  $filename = $_FILES[$this->getPostVar()]['name']['image'][$index];
284  $filename_arr = pathinfo($filename);
285  $suffix = $filename_arr["extension"];
286 
287  // check suffixes
288  if (strlen($tmpname) && is_array($this->getSuffixes()))
289  {
290  $vir = ilUtil::virusHandling($tmpname, $filename);
291  if ($vir[0] == false)
292  {
293  $this->setAlert($lng->txt("form_msg_file_virus_found")."<br />".$vir[1]);
294  return false;
295  }
296 
297  if (!in_array(strtolower($suffix), $this->getSuffixes()))
298  {
299  $this->setAlert($lng->txt("form_msg_file_wrong_file_type"));
300  return false;
301  }
302  }
303  }
304  }
305  }
306  }
307  return $this->checkSubItemsInput();
308  }
309 
315  function insert(&$a_tpl)
316  {
317  global $lng;
318 
319  $tpl = new ilTemplate("tpl.prop_matchingwizardinput.html", true, true, "Modules/TestQuestionPool");
320  $i = 0;
321  foreach ($this->values as $value)
322  {
323  if (!$this->hideImages)
324  {
325  if (strlen($value->picture))
326  {
327  $imagename = $this->qstObject->getImagePathWeb() . $value->picture;
328  if ($this->qstObject->getThumbSize())
329  {
330  if (@file_exists($this->qstObject->getImagePath() . $this->qstObject->getThumbPrefix() . $value->picture))
331  {
332  $imagename = $this->qstObject->getImagePathWeb() . $this->qstObject->getThumbPrefix() . $value->picture;
333  }
334  }
335  $tpl->setCurrentBlock('image');
336  $tpl->setVariable('SRC_IMAGE', $imagename);
337  $tpl->setVariable('IMAGE_NAME', $value->picture);
338  $tpl->setVariable('ALT_IMAGE', ilUtil::prepareFormOutput($value->text));
339  $tpl->setVariable("TXT_DELETE_EXISTING", $lng->txt("delete_existing_file"));
340  $tpl->setVariable("IMAGE_ROW_NUMBER", $i);
341  $tpl->setVariable("IMAGE_POST_VAR", $this->getPostVar());
342  if($this->disable_upload)
343  {
344  $tpl->setVariable('DISABLED_UPLOAD', 'type="hidden" disabled="disabled"');
345  }
346  $tpl->parseCurrentBlock();
347  }
348  $tpl->setCurrentBlock('addimage');
349  $tpl->setVariable("IMAGE_ID", $this->getPostVar() . "[image][$i]");
350  $tpl->setVariable("IMAGE_SUBMIT", $lng->txt("upload"));
351  $tpl->setVariable("IMAGE_ROW_NUMBER", $i);
352  $tpl->setVariable("IMAGE_POST_VAR", $this->getPostVar());
353  if($this->disable_upload)
354  {
355  $tpl->setVariable('DISABLED_UPLOAD', 'type="hidden" disabled="disabled"');
356  }
357  $tpl->parseCurrentBlock();
358  }
359 
360  if (is_object($value))
361  {
362  $tpl->setCurrentBlock("prop_text_propval");
363  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->text));
364  $tpl->parseCurrentBlock();
365  }
366  // this block does not exist in the template
367 // $tpl->setCurrentBlock('singleline');
368  if($this->disable_text)
369  {
370  $tpl->setVariable("DISABLED_SINGLELINE", 'readonly="readonly"');
371  $tpl->setVariable("DISABLED_SINGLELINE_BTN", 'readonly="readonly"');
372  }
373  $tpl->setVariable("SIZE", $this->getSize());
374  $tpl->setVariable("SINGLELINE_ID", $this->getPostVar() . "[answer][$i]");
375  $tpl->setVariable("SINGLELINE_ROW_NUMBER", $i);
376  $tpl->setVariable("SINGLELINE_POST_VAR", $this->getPostVar());
377  $tpl->setVariable("MAXLENGTH", $this->getMaxLength());
378  if ($this->getDisabled())
379  {
380  $tpl->setVariable("DISABLED_SINGLELINE", " disabled=\"disabled\"");
381  }
382  $tpl->parseCurrentBlock();
383  if ($this->getAllowMove())
384  {
385  $tpl->setCurrentBlock("move");
386  $tpl->setVariable("CMD_UP", "cmd[up" . $this->getFieldId() . "][$i]");
387  $tpl->setVariable("CMD_DOWN", "cmd[down" . $this->getFieldId() . "][$i]");
388  $tpl->setVariable("MOVE_ID", $this->getPostVar() . "[$i]");
389  $tpl->setVariable("UP_BUTTON", ilUtil::getImagePath('a_up.png'));
390  $tpl->setVariable("DOWN_BUTTON", ilUtil::getImagePath('a_down.png'));
391  $tpl->parseCurrentBlock();
392  }
393  $tpl->setCurrentBlock("row");
394  $class = ($i % 2 == 0) ? "even" : "odd";
395  if ($i == 0) $class .= " first";
396  if ($i == count($this->values)-1) $class .= " last";
397  $tpl->setVariable("ROW_CLASS", $class);
398  $tpl->setVariable("POST_VAR", $this->getPostVar());
399  $tpl->setVariable("ROW_NUMBER", $i+1);
400  $tpl->setVariable("ROW_IDENTIFIER", $value->identifier);
401 
402 
403  if($this->disable_actions)
404  {
405  //$tpl->setVariable( 'DISABLE_ACTIONS', 'disabled="disabled"' );
406  }
407  else
408  {
409  $tpl->setVariable("ID", $this->getPostVar() . "[answer][$i]");
410  $tpl->setVariable("CMD_ADD", "cmd[add" . $this->getFieldId() . "][$i]");
411  $tpl->setVariable("CMD_REMOVE", "cmd[remove" . $this->getFieldId() . "][$i]");
412  $tpl->setVariable("ADD_BUTTON", ilUtil::getImagePath('edit_add.png'));
413  $tpl->setVariable("REMOVE_BUTTON", ilUtil::getImagePath('edit_remove.png'));
414  }
415  $tpl->parseCurrentBlock();
416  $i++;
417  }
418 
419  if (!$this->hideImages)
420  {
421  if (is_array($this->getSuffixes()))
422  {
423  $suff_str = $delim = "";
424  foreach($this->getSuffixes() as $suffix)
425  {
426  $suff_str.= $delim.".".$suffix;
427  $delim = ", ";
428  }
429  $tpl->setCurrentBlock('allowed_image_suffixes');
430  $tpl->setVariable("TXT_ALLOWED_SUFFIXES", $lng->txt("file_allowed_suffixes")." ".$suff_str);
431  $tpl->parseCurrentBlock();
432  }
433  $tpl->setCurrentBlock("image_heading");
434  $tpl->setVariable("ANSWER_IMAGE", $this->image_name);
435  $tpl->setVariable("TXT_MAX_SIZE", ilUtil::getFileSizeInfo());
436  $tpl->parseCurrentBlock();
437  }
438 
439  $tpl->setVariable("ELEMENT_ID", $this->getPostVar());
440  $tpl->setVariable("TEXT_YES", $lng->txt('yes'));
441  $tpl->setVariable("TEXT_NO", $lng->txt('no'));
442  $tpl->setVariable("DELETE_IMAGE_HEADER", $lng->txt('delete_image_header'));
443  $tpl->setVariable("DELETE_IMAGE_QUESTION", $lng->txt('delete_image_question'));
444  $tpl->setVariable("ANSWER_TEXT", $this->text_name);
445  $tpl->setVariable("NUMBER_TEXT", $lng->txt('row'));
446  if(!$this->disable_actions)
447  {
448  $tpl->setVariable("COMMANDS_TEXT", $lng->txt('actions'));
449  }
450 
451  $a_tpl->setCurrentBlock("prop_generic");
452  $a_tpl->setVariable("PROP_GENERIC", $tpl->get());
453  $a_tpl->parseCurrentBlock();
454  /*
455  global $tpl;
456  include_once "./Services/YUI/classes/class.ilYuiUtil.php";
457  ilYuiUtil::initDomEvent();
458  $tpl->addJavascript("./Modules/TestQuestionPool/templates/default/matchingwizard.js");*/
459  }
460 }