[TASK] EXT:form - Optimize file upload/ handling of files
[Packages/TYPO3.CMS.git] / typo3 / sysext / form / Classes / Domain / Validator / FileAllowedTypesValidator.php
1 <?php
2 namespace TYPO3\CMS\Form\Domain\Validator;
3
4 /*
5 * This file is part of the TYPO3 CMS project.
6 *
7 * It is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License, either version 2
9 * of the License, or any later version.
10 *
11 * For the full copyright and license information, please read the
12 * LICENSE.txt file that was distributed with this source code.
13 *
14 * The TYPO3 project - inspiring people to share!
15 */
16
17 use TYPO3\CMS\Core\Utility\GeneralUtility;
18
19 class FileAllowedTypesValidator extends AbstractValidator {
20
21 /**
22 * @var array
23 */
24 protected $supportedOptions = array(
25 'element' => array('', 'The name of the element', 'string', TRUE),
26 'errorMessage' => array('', 'The error message', 'array', TRUE),
27 'types' => array('', 'The allowed file types', 'string', TRUE),
28 );
29
30 /**
31 * Constant for localisation
32 *
33 * @var string
34 */
35 const LOCALISATION_OBJECT_NAME = 'tx_form_system_validate_fileallowedtypes';
36
37 /**
38 * Check if the file mime type is allowed.
39 *
40 * The mime type is set in the propertymapper
41 * @see TYPO3\CMS\Form\Domain\Property\TypeConverter::convertFrom
42 *
43 * @param mixed $value
44 * @return void
45 */
46 public function isValid($value) {
47 $allowedTypes = strtolower($this->options['types']);
48 $allowedMimeTypes = GeneralUtility::trimExplode(', ', $allowedTypes);
49 $fileMimeType = strtolower($value['type']);
50 if (!in_array($fileMimeType, $allowedMimeTypes, TRUE)) {
51 $this->addError(
52 $this->renderMessage(
53 $this->options['errorMessage'][0],
54 $this->options['errorMessage'][1],
55 'error'
56 ),
57 1442006702
58 );
59 }
60 }
61
62 /**
63 * Substitute makers in the message text
64 * Overrides the abstract
65 *
66 * @param string $message Message text with markers
67 * @return string Message text with substituted markers
68 */
69 public function substituteMarkers($message) {
70 $message = str_replace('%allowedTypes', implode(',', $this->options['types']), $message);
71 return $message;
72 }
73 }