ILIAS  Release_4_4_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilImagemapFileInputGUI.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
11 include_once "./Services/Form/classes/class.ilImageFileInputGUI.php";
12 
14 {
15  protected $areas = array();
16  protected $image_path = "";
17  protected $image_path_web = "";
18  protected $line_color = "";
19 
20  protected $pointsUncheckedFieldEnabled = false;
21 
28  function __construct($a_title = "", $a_postvar = "")
29  {
30  global $lng;
31 
32  parent::__construct($a_title, $a_postvar);
33  }
34 
36  {
37  $this->pointsUncheckedFieldEnabled = (bool)$pointsUncheckedFieldEnabled;
38  }
39 
41  {
43  }
44 
45  public function setAreas($a_areas)
46  {
47  $this->areas = $a_areas;
48  }
49 
50  public function getLineColor()
51  {
52  return $this->line_color;
53  }
54 
55  public function setLineColor($a_color)
56  {
57  $this->line_color = $a_color;
58  }
59 
60  public function getImagePath()
61  {
62  return $this->image_path;
63  }
64 
65  public function setImagePath($a_path)
66  {
67  $this->image_path = $a_path;
68  }
69 
70  public function getImagePathWeb()
71  {
72  return $this->image_path_web;
73  }
74 
75  public function setImagePathWeb($a_path_web)
76  {
77  $this->image_path_web = $a_path_web;
78  }
79 
80  public function setAreasByArray($a_areas)
81  {
82  if (is_array($a_areas['name']))
83  {
84  $this->areas = array();
85  include_once "./Modules/TestQuestionPool/classes/class.assAnswerImagemap.php";
86  foreach ($a_areas['name'] as $idx => $name)
87  {
88  if( $this->getPointsUncheckedFieldEnabled() && isset($a_areas['points_unchecked']) )
89  {
90  $pointsUnchecked = $a_areas['points_unchecked'][$idx];
91  }
92  else
93  {
94  $pointsUnchecked = 0.0;
95  }
96 
97  array_push($this->areas, new ASS_AnswerImagemap(
98  $name,
99  $a_areas['points'][$idx],
100  $idx,
101  $a_areas['coords'][$idx], $a_areas['shape'][$idx],
102  -1,
103  $pointsUnchecked
104  ));
105  }
106  }
107  }
108 
109  public function getAreas()
110  {
111  return $this->areas;
112  }
113 
119  function setValueByArray($a_values)
120  {
121  $this->setValue($a_values[$this->getPostVar() . '_name']);
122  $this->setAreasByArray($a_values[$this->getPostVar()]['coords']);
123  }
124 
125  public function setValue($a_value)
126  {
127  parent::setValue($a_value);
128  }
129 
135  function checkInput()
136  {
137  global $lng;
138 
139  if (is_array($_POST[$this->getPostVar()])) $_POST[$this->getPostVar()] = ilUtil::stripSlashesRecursive($_POST[$this->getPostVar()]);
140  // remove trailing '/'
141  while (substr($_FILES[$this->getPostVar()]["name"],-1) == '/')
142  {
143  $_FILES[$this->getPostVar()]["name"] = substr($_FILES[$this->getPostVar()]["name"],0,-1);
144  }
145 
146  $filename = $_FILES[$this->getPostVar()]["name"];
147  $filename_arr = pathinfo($_FILES[$this->getPostVar()]["name"]);
148  $suffix = $filename_arr["extension"];
149  $mimetype = $_FILES[$this->getPostVar()]["type"];
150  $size_bytes = $_FILES[$this->getPostVar()]["size"];
151  $temp_name = $_FILES[$this->getPostVar()]["tmp_name"];
152  $error = $_FILES[$this->getPostVar()]["error"];
153 
154  // error handling
155  if ($error > 0)
156  {
157  switch ($error)
158  {
159  case UPLOAD_ERR_INI_SIZE:
160  $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
161  return false;
162  break;
163 
164  case UPLOAD_ERR_FORM_SIZE:
165  $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
166  return false;
167  break;
168 
169  case UPLOAD_ERR_PARTIAL:
170  $this->setAlert($lng->txt("form_msg_file_partially_uploaded"));
171  return false;
172  break;
173 
174  case UPLOAD_ERR_NO_FILE:
175  if ($this->getRequired())
176  {
177  if (!strlen($this->getValue()))
178  {
179  $this->setAlert($lng->txt("form_msg_file_no_upload"));
180  return false;
181  }
182  }
183  break;
184 
185  case UPLOAD_ERR_NO_TMP_DIR:
186  $this->setAlert($lng->txt("form_msg_file_missing_tmp_dir"));
187  return false;
188  break;
189 
190  case UPLOAD_ERR_CANT_WRITE:
191  $this->setAlert($lng->txt("form_msg_file_cannot_write_to_disk"));
192  return false;
193  break;
194 
195  case UPLOAD_ERR_EXTENSION:
196  $this->setAlert($lng->txt("form_msg_file_upload_stopped_ext"));
197  return false;
198  break;
199  }
200  }
201 
202  // check suffixes
203  if ($_FILES[$this->getPostVar()]["tmp_name"] != "" &&
204  is_array($this->getSuffixes()))
205  {
206  if (!in_array(strtolower($suffix), $this->getSuffixes()))
207  {
208  $this->setAlert($lng->txt("form_msg_file_wrong_file_type"));
209  return false;
210  }
211  }
212 
213  // virus handling
214  if ($_FILES[$this->getPostVar()]["tmp_name"] != "")
215  {
216  $vir = ilUtil::virusHandling($temp_name, $filename);
217  if ($vir[0] == false)
218  {
219  $this->setAlert($lng->txt("form_msg_file_virus_found")."<br />".$vir[1]);
220  return false;
221  }
222  }
223 
224  $max = 0;
225  if (is_array($_POST[$this->getPostVar()]['coords']['name']))
226  {
227  foreach ($_POST[$this->getPostVar()]['coords']['name'] as $idx => $name)
228  {
229  if ((!strlen($_POST[$this->getPostVar()]['coords']['points'][$idx])) && ($this->getRequired))
230  {
231  $this->setAlert($lng->txt('form_msg_area_missing_points'));
232  return false;
233  }
234  if ((!is_numeric($_POST[$this->getPostVar()]['coords']['points'][$idx])))
235  {
236  $this->setAlert($lng->txt('form_msg_numeric_value_required'));
237  return false;
238  }
239  if ($_POST[$this->getPostVar()]['coords']['points'][$idx] > 0) $max = $_POST[$this->getPostVar()]['coords']['points'][$idx];
240  }
241  }
242 
243  if ($max == 0 && (!$filename))
244  {
245  $this->setAlert($lng->txt("enter_enough_positive_points"));
246  return false;
247  }
248  return true;
249  }
250 
254  function insert(&$a_tpl)
255  {
256  global $lng;
257 
258  $template = new ilTemplate("tpl.prop_imagemap_file.html", true, true, "Modules/TestQuestionPool");
259 
260  $this->outputSuffixes($template, "allowed_image_suffixes");
261 
262  if ($this->getImage() != "")
263  {
264  if (strlen($this->getValue()))
265  {
266  $template->setCurrentBlock("has_value");
267  $template->setVariable("TEXT_IMAGE_NAME", $this->getValue());
268  $template->setVariable("POST_VAR_D", $this->getPostVar());
269  $template->parseCurrentBlock();
270  }
271  $template->setCurrentBlock("image");
272  if (count($this->getAreas()))
273  {
274  include_once "./Modules/TestQuestionPool/classes/class.ilImagemapPreview.php";
275  $preview = new ilImagemapPreview($this->getImagePath().$this->getValue());
276  foreach ($this->getAreas() as $index => $area)
277  {
278  $preview->addArea($index, $area->getArea(), $area->getCoords(), $area->getAnswertext(), "", "", true, $this->getLineColor());
279  }
280  $preview->createPreview();
281  $imagepath = $this->getImagePathWeb() . $preview->getPreviewFilename($this->getImagePath(), $this->getValue()) . "?img=" . time();
282  $template->setVariable("SRC_IMAGE", $imagepath);
283  }
284  else
285  {
286  $template->setVariable("SRC_IMAGE", $this->getImage());
287  }
288  $template->setVariable("ALT_IMAGE", $this->getAlt());
289  $template->setVariable("POST_VAR_D", $this->getPostVar());
290  $template->setVariable("TXT_DELETE_EXISTING",
291  $lng->txt("delete_existing_file"));
292  $template->setVariable("TEXT_ADD_RECT", $lng->txt('add_rect'));
293  $template->setVariable("TEXT_ADD_CIRCLE", $lng->txt('add_circle'));
294  $template->setVariable("TEXT_ADD_POLY", $lng->txt('add_poly'));
295  $template->parseCurrentBlock();
296  }
297 
298  if(is_array($this->getAreas()) && $this->getAreas())
299  {
300  $counter = 0;
301  foreach ($this->getAreas() as $area)
302  {
303  if (strlen($area->getPoints()))
304  {
305  $template->setCurrentBlock('area_points_value');
306  $template->setVariable('VALUE_POINTS', $area->getPoints());
307  $template->parseCurrentBlock();
308  }
309  if( $this->getPointsUncheckedFieldEnabled() )
310  {
311  if (strlen($area->getPointsUnchecked()))
312  {
313  $template->setCurrentBlock('area_points_unchecked_value');
314  $template->setVariable('VALUE_POINTS_UNCHECKED', $area->getPointsUnchecked());
315  $template->parseCurrentBlock();
316  }
317 
318  $template->setCurrentBlock('area_points_unchecked_field');
319  $template->parseCurrentBlock();
320  }
321  if (strlen($area->getAnswertext()))
322  {
323  $template->setCurrentBlock('area_name_value');
324  $template->setVariable('VALUE_NAME', $area->getAnswertext());
325  $template->parseCurrentBlock();
326  }
327  $template->setCurrentBlock('row');
328  $class = ($counter % 2 == 0) ? "tblrow1" : "tblrow2";
329  if ($counter == 0) $class .= " first";
330  if ($counter == count($this->getAreas())-1) $class .= " last";
331  $template->setVariable("ROW_CLASS", $class);
332  $template->setVariable('POST_VAR_R', $this->getPostVar());
333  $template->setVariable('TEXT_SHAPE', strtoupper($area->getArea()));
334  $template->setVariable('VALUE_SHAPE', $area->getArea());
335  $coords = preg_replace("/(\d+,\d+,)/", "\$1 ", $area->getCoords());
336  $template->setVariable('VALUE_COORDINATES', $area->getCoords());
337  $template->setVariable('TEXT_COORDINATES', $coords);
338  $template->setVariable('COUNTER', $counter);
339  $template->setVariable("REMOVE_BUTTON", ilUtil::getImagePath('edit_remove.png'));
340  $template->parseCurrentBlock();
341  $counter++;
342  }
343  $template->setCurrentBlock("areas");
344  $template->setVariable("TEXT_NAME", $lng->txt("hint"));
345  if( $this->getPointsUncheckedFieldEnabled() )
346  {
347  $template->setVariable("TEXT_POINTS", $lng->txt("points_checked"));
348 
349  $template->setCurrentBlock('area_points_unchecked_head');
350  $template->setVariable("TEXT_POINTS_UNCHECKED", $lng->txt("points_unchecked"));
351  $template->parseCurrentBlock();
352  }
353  else
354  {
355  $template->setVariable("TEXT_POINTS", $lng->txt("points"));
356  }
357  $template->setVariable("TEXT_SHAPE", $lng->txt("shape"));
358  $template->setVariable("TEXT_COORDINATES", $lng->txt("coordinates"));
359  $template->setVariable("TEXT_COMMANDS", $lng->txt("actions"));
360  $template->parseCurrentBlock();
361  }
362 
363  $template->setVariable("POST_VAR", $this->getPostVar());
364  $template->setVariable("ID", $this->getFieldId());
365  $template->setVariable("TXT_MAX_SIZE", $lng->txt("file_notice")." ".
366  $this->getMaxFileSizeString());
367 
368  $a_tpl->setCurrentBlock("prop_generic");
369  $a_tpl->setVariable("PROP_GENERIC", $template->get());
370  $a_tpl->parseCurrentBlock();
371 
372  global $tpl;
373  include_once "./Services/YUI/classes/class.ilYuiUtil.php";
375  $tpl->addJavascript("./Modules/TestQuestionPool/templates/default/imagemap.js");
376  }
377 
378 }