ILIAS  Release_5_0_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 require_once 'Services/UIComponent/Glyph/classes/class.ilGlyphGUI.php';
6 
18 {
19  protected $text_name = '';
20  protected $image_name = '';
21  protected $values = array();
22  protected $allowMove = false;
23  protected $qstObject = null;
24  protected $suffixes = array();
25  protected $hideImages = false;
26 
35  function __construct($a_title = "", $a_postvar = "")
36  {
37  global $lng;
38 
39  parent::__construct($a_title, $a_postvar);
40  $this->setSuffixes(array("jpg", "jpeg", "png", "gif"));
41  $this->setSize('50');
42  $this->text_name = $lng->txt('answer_text');
43  $this->image_name = $lng->txt('answer_image');
44  }
45 
51  function setSuffixes($a_suffixes)
52  {
53  $this->suffixes = $a_suffixes;
54  }
55 
61  function getSuffixes()
62  {
63  return $this->suffixes;
64  }
65 
71  function setHideImages($a_hide)
72  {
73  $this->hideImages = $a_hide;
74  }
75 
81  function setValues($a_values)
82  {
83  $this->values = $a_values;
84  }
85 
91  function getValues()
92  {
93  return $this->values;
94  }
95 
96  function setTextName($a_value)
97  {
98  $this->text_name = $a_value;
99  }
100 
101  function setImageName($a_value)
102  {
103  $this->image_name = $a_value;
104  }
105 
111  function setQuestionObject($a_value)
112  {
113  $this->qstObject =& $a_value;
114  }
115 
121  function getQuestionObject()
122  {
123  return $this->qstObject;
124  }
125 
131  function setAllowMove($a_allow_move)
132  {
133  $this->allowMove = $a_allow_move;
134  }
135 
141  function getAllowMove()
142  {
143  return $this->allowMove;
144  }
145 
151  function setValue($a_value)
152  {
153  $this->values = array();
154  if (is_array($a_value))
155  {
156  if (is_array($a_value['answer']))
157  {
158  foreach ($a_value['answer'] as $index => $value)
159  {
160  include_once "./Modules/TestQuestionPool/classes/class.assAnswerMatchingTerm.php";
161  $answer = new assAnswerMatchingTerm($value, $a_value['imagename'][$index], $a_value['identifier'][$index]);
162  array_push($this->values, $answer);
163  }
164  }
165  }
166  }
167 
173  function checkInput()
174  {
175  global $lng;
176  include_once "./Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php";
177  if (is_array($_POST[$this->getPostVar()]))
178  {
180  }
181  $foundvalues = $_POST[$this->getPostVar()];
182  if (is_array($foundvalues))
183  {
184  // check answers
185  if (is_array($foundvalues['answer']))
186  {
187  foreach ($foundvalues['answer'] as $aidx => $answervalue)
188  {
189  if (((strlen($answervalue)) == 0) && (strlen($foundvalues['imagename'][$aidx]) == 0))
190  {
191  $this->setAlert($lng->txt("msg_input_is_required"));
192  return FALSE;
193  }
194  }
195  }
196  if (!$this->hideImages)
197  {
198  if (is_array($_FILES[$this->getPostVar()]['error']['image']))
199  {
200  foreach ($_FILES[$this->getPostVar()]['error']['image'] as $index => $error)
201  {
202  // error handling
203  if ($error > 0)
204  {
205  switch ($error)
206  {
207  case UPLOAD_ERR_INI_SIZE:
208  $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
209  return false;
210  break;
211 
212  case UPLOAD_ERR_FORM_SIZE:
213  $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
214  return false;
215  break;
216 
217  case UPLOAD_ERR_PARTIAL:
218  $this->setAlert($lng->txt("form_msg_file_partially_uploaded"));
219  return false;
220  break;
221 
222  case UPLOAD_ERR_NO_FILE:
223  if ($this->getRequired())
224  {
225  if ((!strlen($foundvalues['imagename'][$index])) && (!strlen($foundvalues['answer'][$index])))
226  {
227  $this->setAlert($lng->txt("form_msg_file_no_upload"));
228  return false;
229  }
230  }
231  break;
232 
233  case UPLOAD_ERR_NO_TMP_DIR:
234  $this->setAlert($lng->txt("form_msg_file_missing_tmp_dir"));
235  return false;
236  break;
237 
238  case UPLOAD_ERR_CANT_WRITE:
239  $this->setAlert($lng->txt("form_msg_file_cannot_write_to_disk"));
240  return false;
241  break;
242 
243  case UPLOAD_ERR_EXTENSION:
244  $this->setAlert($lng->txt("form_msg_file_upload_stopped_ext"));
245  return false;
246  break;
247  }
248  }
249  }
250  }
251 
252  if (is_array($_FILES[$this->getPostVar()]['tmp_name']['image']))
253  {
254  foreach ($_FILES[$this->getPostVar()]['tmp_name']['image'] as $index => $tmpname)
255  {
256  $filename = $_FILES[$this->getPostVar()]['name']['image'][$index];
257  $filename_arr = pathinfo($filename);
258  $suffix = $filename_arr["extension"];
259 
260  // check suffixes
261  if (strlen($tmpname) && is_array($this->getSuffixes()))
262  {
263  $vir = ilUtil::virusHandling($tmpname, $filename);
264  if ($vir[0] == false)
265  {
266  $this->setAlert($lng->txt("form_msg_file_virus_found")."<br />".$vir[1]);
267  return false;
268  }
269 
270  if (!in_array(strtolower($suffix), $this->getSuffixes()))
271  {
272  $this->setAlert($lng->txt("form_msg_file_wrong_file_type"));
273  return false;
274  }
275  }
276  }
277  }
278  }
279  }
280  return $this->checkSubItemsInput();
281  }
282 
288  function insert(&$a_tpl)
289  {
290  global $lng;
291 
292  $tpl = new ilTemplate("tpl.prop_matchingwizardinput.html", true, true, "Modules/TestQuestionPool");
293  $i = 0;
294  foreach ($this->values as $value)
295  {
296  if (!$this->hideImages)
297  {
298  if (strlen($value->picture))
299  {
300  $imagename = $this->qstObject->getImagePathWeb() . $value->picture;
301  if ($this->qstObject->getThumbSize())
302  {
303  if (@file_exists($this->qstObject->getImagePath() . $this->qstObject->getThumbPrefix() . $value->picture))
304  {
305  $imagename = $this->qstObject->getImagePathWeb() . $this->qstObject->getThumbPrefix() . $value->picture;
306  }
307  }
308  $tpl->setCurrentBlock('image');
309  $tpl->setVariable('SRC_IMAGE', $imagename);
310  $tpl->setVariable('IMAGE_NAME', $value->picture);
311  $tpl->setVariable('ALT_IMAGE', ilUtil::prepareFormOutput($value->text));
312  $tpl->setVariable("TXT_DELETE_EXISTING", $lng->txt("delete_existing_file"));
313  $tpl->setVariable("IMAGE_ROW_NUMBER", $i);
314  $tpl->setVariable("IMAGE_POST_VAR", $this->getPostVar());
315  $tpl->parseCurrentBlock();
316  }
317  $tpl->setCurrentBlock('addimage');
318  $tpl->setVariable("IMAGE_ID", $this->getPostVar() . "[image][$i]");
319  $tpl->setVariable("IMAGE_SUBMIT", $lng->txt("upload"));
320  $tpl->setVariable("IMAGE_ROW_NUMBER", $i);
321  $tpl->setVariable("IMAGE_POST_VAR", $this->getPostVar());
322  $tpl->parseCurrentBlock();
323  }
324 
325  if (is_object($value))
326  {
327  $tpl->setCurrentBlock("prop_text_propval");
328  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->text));
329  $tpl->parseCurrentBlock();
330  }
331  // this block does not exist in the template
332 // $tpl->setCurrentBlock('singleline');
333  $tpl->setVariable("SIZE", $this->getSize());
334  $tpl->setVariable("SINGLELINE_ID", $this->getPostVar() . "[answer][$i]");
335  $tpl->setVariable("SINGLELINE_ROW_NUMBER", $i);
336  $tpl->setVariable("SINGLELINE_POST_VAR", $this->getPostVar());
337  $tpl->setVariable("MAXLENGTH", $this->getMaxLength());
338  if ($this->getDisabled())
339  {
340  $tpl->setVariable("DISABLED_SINGLELINE", " disabled=\"disabled\"");
341  }
342  $tpl->parseCurrentBlock();
343  if ($this->getAllowMove())
344  {
345  $tpl->setCurrentBlock("move");
346  $tpl->setVariable("CMD_UP", "cmd[up" . $this->getFieldId() . "][$i]");
347  $tpl->setVariable("CMD_DOWN", "cmd[down" . $this->getFieldId() . "][$i]");
348  $tpl->setVariable("ID", $this->getPostVar() . "[$i]");
349  $tpl->setVariable("UP_BUTTON", ilGlyphGUI::get(ilGlyphGUI::UP));
350  $tpl->setVariable("DOWN_BUTTON", ilGlyphGUI::get(ilGlyphGUI::DOWN));
351  $tpl->parseCurrentBlock();
352  }
353  $tpl->setCurrentBlock("row");
354  $tpl->setVariable("POST_VAR", $this->getPostVar());
355  $tpl->setVariable("ROW_NUMBER", $i+1);
356  $tpl->setVariable("ROW_IDENTIFIER", $value->identifier);
357  $tpl->setVariable("ID", $this->getPostVar() . "[answer][$i]");
358  $tpl->setVariable("CMD_ADD", "cmd[add" . $this->getFieldId() . "][$i]");
359  $tpl->setVariable("CMD_REMOVE", "cmd[remove" . $this->getFieldId() . "][$i]");
360  $tpl->setVariable("ADD_BUTTON", ilGlyphGUI::get(ilGlyphGUI::ADD));
361  $tpl->setVariable("REMOVE_BUTTON", ilGlyphGUI::get(ilGlyphGUI::REMOVE));
362  $tpl->parseCurrentBlock();
363  $i++;
364  }
365 
366  if (!$this->hideImages)
367  {
368  if (is_array($this->getSuffixes()))
369  {
370  $suff_str = $delim = "";
371  foreach($this->getSuffixes() as $suffix)
372  {
373  $suff_str.= $delim.".".$suffix;
374  $delim = ", ";
375  }
376  $tpl->setCurrentBlock('allowed_image_suffixes');
377  $tpl->setVariable("TXT_ALLOWED_SUFFIXES", $lng->txt("file_allowed_suffixes")." ".$suff_str);
378  $tpl->parseCurrentBlock();
379  }
380  $tpl->setCurrentBlock("image_heading");
381  $tpl->setVariable("ANSWER_IMAGE", $this->image_name);
382  $tpl->setVariable("TXT_MAX_SIZE", ilUtil::getFileSizeInfo());
383  $tpl->parseCurrentBlock();
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", $this->text_name);
392  $tpl->setVariable("NUMBER_TEXT", $lng->txt('row'));
393  $tpl->setVariable("COMMANDS_TEXT", $lng->txt('actions'));
394 
395  $a_tpl->setCurrentBlock("prop_generic");
396  $a_tpl->setVariable("PROP_GENERIC", $tpl->get());
397  $a_tpl->parseCurrentBlock();
398  }
399 }