‪TYPO3CMS  ‪main
DateRangeValidator.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
22 
29 {
33  protected ‪$supportedOptions = [
34  'minimum' => ['', 'The minimum date formatted as Y-m-d', 'string'],
35  'maximum' => ['', 'The maximum date formatted as Y-m-d', 'string'],
36  'format' => ['Y-m-d', 'The format of the minimum and maximum option', 'string'],
37  ];
38 
42  public function ‪isValid(mixed $value): void
43  {
44  $this->‪validateOptions();
45 
46  if (!($value instanceof \DateTime)) {
47  $this->‪addError(
49  'validation.error.1521293685',
50  'form',
51  [gettype($value)]
52  ),
53  1521293685
54  );
55  return;
56  }
57 
58  $minimum = $this->options['minimum'];
59  $maximum = $this->options['maximum'];
60  $format = $this->options['format'];
61  $value->modify('midnight');
62 
63  if ($minimum instanceof \DateTime && $value < $minimum) {
64  $this->‪addError(
66  'validation.error.1521293686',
67  'form',
68  [$minimum->format($format)]
69  ),
70  1521293686,
71  [$minimum->format($format)]
72  );
73  }
74 
75  if ($maximum instanceof \DateTime && $value > $maximum) {
76  $this->‪addError(
78  'validation.error.1521293687',
79  'form',
80  [$maximum->format($format)]
81  ),
82  1521293687,
83  [$maximum->format($format)]
84  );
85  }
86  }
87 
93  protected function ‪validateOptions(): void
94  {
95  if (!empty($this->options['minimum'])) {
96  $minimum = \DateTime::createFromFormat($this->options['format'], $this->options['minimum']);
97  if (!($minimum instanceof \DateTime)) {
98  $message = sprintf('The option "minimum" (%s) could not be converted to \DateTime from format "%s".', $this->options['minimum'], $this->options['format']);
99  throw new ‪InvalidValidationOptionsException($message, 1521293813);
100  }
101  $minimum->modify('midnight');
102  $this->options['minimum'] = $minimum;
103  }
104 
105  if (!empty($this->options['maximum'])) {
106  $maximum = \DateTime::createFromFormat($this->options['format'], $this->options['maximum']);
107  if (!($maximum instanceof \DateTime)) {
108  $message = sprintf('The option "maximum" (%s) could not be converted to \DateTime from format "%s".', $this->options['maximum'], $this->options['format']);
109  throw new ‪InvalidValidationOptionsException($message, 1521293814);
110  }
111  $maximum->modify('midnight');
112  $this->options['maximum'] = $maximum;
113  }
114  }
115 }
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator
Definition: AbstractValidator.php:29
‪TYPO3\CMS\Form\Mvc\Validation\Exception\InvalidValidationOptionsException
Definition: InvalidValidationOptionsException.php:22
‪TYPO3\CMS\Form\Mvc\Validation\DateRangeValidator\$supportedOptions
‪array $supportedOptions
Definition: DateRangeValidator.php:32
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator\addError
‪addError(string $message, int $code, array $arguments=[], string $title='')
Definition: AbstractValidator.php:82
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator\translateErrorMessage
‪translateErrorMessage(string $translateKey, string $extensionName, array $arguments=[])
Definition: AbstractValidator.php:122
‪TYPO3\CMS\Form\Mvc\Validation\DateRangeValidator\isValid
‪isValid(mixed $value)
Definition: DateRangeValidator.php:41
‪TYPO3\CMS\Form\Mvc\Validation\DateRangeValidator\validateOptions
‪validateOptions()
Definition: DateRangeValidator.php:92
‪TYPO3\CMS\Form\Mvc\Validation
Definition: CountValidator.php:22
‪TYPO3\CMS\Form\Mvc\Validation\DateRangeValidator
Definition: DateRangeValidator.php:29