ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
class.ilFileInputGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4include_once 'Services/UIComponent/Toolbar/interfaces/interface.ilToolbarItem.php';
5include_once("./Services/Form/classes/class.ilSubEnabledFormPropertyGUI.php");
6
15{
16 private $filename;
18 protected $size = 40;
19 protected $pending;
20 protected $allow_deletion;
21
22 static protected $check_wsp_quota;
23
27 protected $forbidden_suffixes = array();
28
35 function __construct($a_title = "", $a_postvar = "")
36 {
37 global $lng;
38
39 parent::__construct($a_title, $a_postvar);
40 $this->setType("file");
41 $this->setHiddenTitle("(".$lng->txt("form_file_input").")");
42 }
43
49 function setValueByArray($a_values)
50 {
51 if (!is_array($a_values[$this->getPostVar()]))
52 {
53 $this->setValue($a_values[$this->getPostVar()]);
54 }
55 $this->setFilename($a_values[$this->getFileNamePostVar()]);
56 }
57
63 function setValue($a_value)
64 {
65 $this->value = $a_value;
66 }
67
73 function getValue()
74 {
75 return $this->value;
76 }
77
83 function setSize($a_size)
84 {
85 $this->size = $a_size;
86 }
87
93 function getSize()
94 {
95 return $this->size;
96 }
97
103 public function setFilename($a_val)
104 {
105 $this->filename = $a_val;
106 }
107
113 function getFilename()
114 {
115 return $this->filename;
116 }
117
118
119
125 function setSuffixes($a_suffixes)
126 {
127 $this->suffixes = $a_suffixes;
128 }
129
135 function getSuffixes()
136 {
137 return $this->suffixes;
138 }
139
145 function setForbiddenSuffixes($a_suffixes)
146 {
147 $this->forbidden_suffixes = $a_suffixes;
148 }
149
156 {
158 }
159
165 public function setPending($a_val)
166 {
167 $this->pending = $a_val;
168 }
169
175 function getPending()
176 {
177 return $this->pending;
178 }
179
187 public function enableFileNameSelection($a_post_var)
188 {
189 $this->filename_selection = true;
190 $this->filename_post = $a_post_var;
191 }
192
200 {
201 return $this->filename_selection ? true : false;
202 }
203
211 public function getFileNamePostVar()
212 {
214 }
215
221 function setALlowDeletion($a_val)
222 {
223 $this->allow_deletion = $a_val;
224 }
225
232 {
234 }
235
241 function checkInput()
242 {
243 global $lng;
244
245 $_FILES[$this->getPostVar()]["name"] = ilUtil::stripSlashes($_FILES[$this->getPostVar()]["name"]);
246
247 $_FILES[$this->getPostVar()]["name"] = rtrim($_FILES[$this->getPostVar()]["name"], "/");
248
249 $filename = $_FILES[$this->getPostVar()]["name"];
250 $filename_arr = pathinfo($_FILES[$this->getPostVar()]["name"]);
251 $suffix = $filename_arr["extension"];
252 $mimetype = $_FILES[$this->getPostVar()]["type"];
253 $size_bytes = $_FILES[$this->getPostVar()]["size"];
254 $temp_name = $_FILES[$this->getPostVar()]["tmp_name"];
255 $error = $_FILES[$this->getPostVar()]["error"];
256 $_POST[$this->getPostVar()] = $_FILES[$this->getPostVar()];
257
258 // if no information is received, something went wrong
259 // this is e.g. the case, if the post_max_size has been exceeded
260 if (!is_array($_FILES[$this->getPostVar()]))
261 {
262 $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
263 return false;
264 }
265
266 // error handling
267 if ($error > 0)
268 {
269 switch ($error)
270 {
271 case UPLOAD_ERR_INI_SIZE:
272 $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
273 return false;
274 break;
275
276 case UPLOAD_ERR_FORM_SIZE:
277 $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
278 return false;
279 break;
280
281 case UPLOAD_ERR_PARTIAL:
282 $this->setAlert($lng->txt("form_msg_file_partially_uploaded"));
283 return false;
284 break;
285
286 case UPLOAD_ERR_NO_FILE:
287 if ($this->getRequired())
288 {
289 if (!strlen($this->getValue()))
290 {
291 $this->setAlert($lng->txt("form_msg_file_no_upload"));
292 return false;
293 }
294 }
295 break;
296
297 case UPLOAD_ERR_NO_TMP_DIR:
298 $this->setAlert($lng->txt("form_msg_file_missing_tmp_dir"));
299 return false;
300 break;
301
302 case UPLOAD_ERR_CANT_WRITE:
303 $this->setAlert($lng->txt("form_msg_file_cannot_write_to_disk"));
304 return false;
305 break;
306
307 case UPLOAD_ERR_EXTENSION:
308 $this->setAlert($lng->txt("form_msg_file_upload_stopped_ext"));
309 return false;
310 break;
311 }
312 }
313
314 // check suffixes
315 if ($_FILES[$this->getPostVar()]["tmp_name"] != "")
316 {
317 if (is_array($this->forbidden_suffixes) && in_array(strtolower($suffix), $this->forbidden_suffixes))
318 {
319 $this->setAlert($lng->txt("form_msg_file_type_is_not_allowed")." (".$suffix.")");
320 return false;
321 }
322 if (is_array($this->getSuffixes()) && count($this->getSuffixes()) > 0)
323 {
324 if (!in_array(strtolower($suffix), $this->getSuffixes()))
325 {
326 $this->setAlert($lng->txt("form_msg_file_wrong_file_type"));
327 return false;
328 }
329 }
330 }
331
332 // virus handling
333 if ($_FILES[$this->getPostVar()]["tmp_name"] != "")
334 {
335 $vir = ilUtil::virusHandling($temp_name, $filename);
336 if ($vir[0] == false)
337 {
338 $this->setAlert($lng->txt("form_msg_file_virus_found")."<br />".$vir[1]);
339 return false;
340 }
341 }
342
343 return true;
344 }
345
349 function render($a_mode = "")
350 {
351 global $lng;
352
353 $quota_exceeded = $quota_legend = false;
354 if(self::$check_wsp_quota)
355 {
356 include_once "Services/DiskQuota/classes/class.ilDiskQuotaHandler.php";
358 {
359 $lng->loadLanguageModule("file");
360 $quota_exceeded = $lng->txt("personal_workspace_quota_exceeded_warning");
361 }
362 else
363 {
364 $quota_legend = ilDiskQuotaHandler::getStatusLegend();
365 }
366 }
367
368 $f_tpl = new ilTemplate("tpl.prop_file.html", true, true, "Services/Form");
369
370
371 // show filename selection if enabled
372 if($this->isFileNameSelectionEnabled())
373 {
374 $f_tpl->setCurrentBlock('filename');
375 $f_tpl->setVariable('POST_FILENAME',$this->getFileNamePostVar());
376 $f_tpl->setVariable('VAL_FILENAME',$this->getFilename());
377 $f_tpl->setVariable('FILENAME_ID',$this->getFieldId());
378 $f_tpl->setVAriable('TXT_FILENAME_HINT',$lng->txt('if_no_title_then_filename'));
379 $f_tpl->parseCurrentBlock();
380 }
381 else
382 {
383 if (trim($this->getValue() != ""))
384 {
385 if (!$this->getDisabled() && $this->getALlowDeletion())
386 {
387 $f_tpl->setCurrentBlock("delete_bl");
388 $f_tpl->setVariable("POST_VAR_D", $this->getPostVar());
389 $f_tpl->setVariable("TXT_DELETE_EXISTING",
390 $lng->txt("delete_existing_file"));
391 $f_tpl->parseCurrentBlock();
392 }
393
394 $f_tpl->setCurrentBlock('prop_file_propval');
395 $f_tpl->setVariable('FILE_VAL', $this->getValue());
396 $f_tpl->parseCurrentBlock();
397 }
398 }
399
400 if ($a_mode != "toolbar")
401 {
402 if(!$quota_exceeded)
403 {
404 $this->outputSuffixes($f_tpl);
405
406 $f_tpl->setCurrentBlock("max_size");
407 $f_tpl->setVariable("TXT_MAX_SIZE", $lng->txt("file_notice")." ".
408 $this->getMaxFileSizeString());
409 $f_tpl->parseCurrentBlock();
410
411 if($quota_legend)
412 {
413 $f_tpl->setVariable("TXT_MAX_SIZE", $quota_legend);
414 $f_tpl->parseCurrentBlock();
415 }
416 }
417 else
418 {
419 $f_tpl->setCurrentBlock("max_size");
420 $f_tpl->setVariable("TXT_MAX_SIZE", $quota_exceeded);
421 $f_tpl->parseCurrentBlock();
422 }
423 }
424 else if($quota_exceeded)
425 {
426 return $quota_exceeded;
427 }
428
429 $pending = $this->getPending();
430 if($pending)
431 {
432 $f_tpl->setCurrentBlock("pending");
433 $f_tpl->setVariable("TXT_PENDING", $lng->txt("file_upload_pending").
434 ": ".$pending);
435 $f_tpl->parseCurrentBlock();
436 }
437
438 if ($this->getDisabled() || $quota_exceeded)
439 {
440 $f_tpl->setVariable("DISABLED",
441 " disabled=\"disabled\"");
442 }
443
444 $f_tpl->setVariable("POST_VAR", $this->getPostVar());
445 $f_tpl->setVariable("ID", $this->getFieldId());
446 $f_tpl->setVariable("SIZE", $this->getSize());
447
448 return $f_tpl->get();
449 }
450
456 function insert(&$a_tpl)
457 {
458 $html = $this->render();
459
460 $a_tpl->setCurrentBlock("prop_generic");
461 $a_tpl->setVariable("PROP_GENERIC", $html);
462 $a_tpl->parseCurrentBlock();
463 }
464
465
466 protected function outputSuffixes($a_tpl, $a_block = "allowed_suffixes")
467 {
468 global $lng;
469
470 if (is_array($this->getSuffixes()) && count($this->getSuffixes()) > 0)
471 {
472 $suff_str = $delim = "";
473 foreach($this->getSuffixes() as $suffix)
474 {
475 $suff_str.= $delim.".".$suffix;
476 $delim = ", ";
477 }
478 $a_tpl->setCurrentBlock($a_block);
479 $a_tpl->setVariable("TXT_ALLOWED_SUFFIXES",
480 $lng->txt("file_allowed_suffixes")." ".$suff_str);
481 $a_tpl->parseCurrentBlock();
482 }
483 }
484
485 protected function getMaxFileSizeString()
486 {
487 // get the value for the maximal uploadable filesize from the php.ini (if available)
488 $umf = ini_get("upload_max_filesize");
489 // get the value for the maximal post data from the php.ini (if available)
490 $pms = ini_get("post_max_size");
491
492 //convert from short-string representation to "real" bytes
493 $multiplier_a=array("K"=>1024, "M"=>1024*1024, "G"=>1024*1024*1024);
494
495 $umf_parts=preg_split("/(\d+)([K|G|M])/", $umf, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
496 $pms_parts=preg_split("/(\d+)([K|G|M])/", $pms, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
497
498 if (count($umf_parts) == 2) { $umf = $umf_parts[0]*$multiplier_a[$umf_parts[1]]; }
499 if (count($pms_parts) == 2) { $pms = $pms_parts[0]*$multiplier_a[$pms_parts[1]]; }
500
501 // use the smaller one as limit
502 $max_filesize = min($umf, $pms);
503
504 if (!$max_filesize) $max_filesize=max($umf, $pms);
505
506 //format for display in mega-bytes
507 $max_filesize = sprintf("%.1f MB",$max_filesize/1024/1024);
508
509 return $max_filesize;
510 }
511
516 {
517 if ($_POST[$this->getPostVar()."_delete"])
518 {
519 return true;
520 }
521 return false;
522 }
523
527 function getToolbarHTML()
528 {
529 $html = $this->render("toolbar");
530 return $html;
531 }
532
534 {
535 if((bool)$a_value)
536 {
537 include_once "Services/WebDAV/classes/class.ilDiskQuotaActivationChecker.php";
539 {
540 self::$check_wsp_quota = true;
541 return;
542 }
543 }
544 self::$check_wsp_quota = false;
545 }
546}
static isUploadPossible($a_additional_size=null)
This class represents a file property in a property form.
getForbiddenSuffixes()
Get Accepted Suffixes.
setValueByArray($a_values)
Set value by array.
enableFileNameSelection($a_post_var)
If enabled, users get the possibility to enter a filename for the uploaded file.
insert(&$a_tpl)
Insert property html.
setValue($a_value)
Set Value.
outputSuffixes($a_tpl, $a_block="allowed_suffixes")
setFilename($a_val)
Set filename value (if filename selection is enabled)
setPending($a_val)
Set pending filename value.
__construct($a_title="", $a_postvar="")
Constructor.
getSuffixes()
Get Accepted Suffixes.
getDeletionFlag()
Get deletion flag.
setForbiddenSuffixes($a_suffixes)
Set forbidden Suffixes.
setPersonalWorkspaceQuotaCheck($a_value)
setSuffixes($a_suffixes)
Set Accepted Suffixes.
isFileNameSelectionEnabled()
Check if filename selection is enabled.
setSize($a_size)
Set Size.
getFileNamePostVar()
Get file name post var.
render($a_mode="")
Render html.
getToolbarHTML()
Get HTML for toolbar.
setALlowDeletion($a_val)
Set allow deletion.
getPending()
Get pending filename.
getALlowDeletion()
Get allow deletion.
checkInput()
Check input, strip slashes etc.
setType($a_type)
Set Type.
getPostVar()
Get Post Variable.
setAlert($a_alert)
Set Alert Text.
getFieldId()
Get Post Variable.
setHiddenTitle($a_val)
Set hidden title (for screenreaders)
This class represents a property that may include a sub form.
special template class to simplify handling of ITX/PEAR
static virusHandling($a_file, $a_orig_name="", $a_clean=true)
scan file for viruses and clean files if possible
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
$_POST['username']
Definition: cron.php:12
Interface for property form input GUI classes that can be used in ilToolbarGUI.
global $lng
Definition: privfeed.php:40
echo;exit;}function LogoutNotification($SessionID){ global $ilDB;$q="SELECT session_id, data FROM usr_session WHERE expires > (\w+)\|/" PREG_SPLIT_NO_EMPTY PREG_SPLIT_DELIM_CAPTURE