‪TYPO3CMS  ‪main
TimePickerViewHelper.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 
18 /*
19  * Inspired by and partially taken from the Neos.Form package (www.neos.io)
20  */
21 
23 
28 
35 {
39  protected ‪$tagName = 'select';
40 
42 
44  {
45  $this->propertyMapper = ‪$propertyMapper;
46  }
47 
48  public function ‪initializeArguments(): void
49  {
50  parent::initializeArguments();
51  $this->registerTagAttribute('size', 'int', 'The size of the select field');
52  $this->registerTagAttribute('placeholder', 'string', 'Specifies a short hint that describes the expected value of an input element');
53  $this->registerTagAttribute('disabled', 'string', 'Specifies that the select element should be disabled when the page loads');
54  $this->registerArgument('errorClass', 'string', 'CSS class to set if there are errors for this ViewHelper', false, 'f3-form-error');
55  $this->registerArgument('initialDate', 'string', 'Initial time (@see http://www.php.net/manual/en/datetime.formats.php for supported formats)');
56  $this->registerArgument('timeType', 'string', '"hour" or "minute"');
57  $this->registerUniversalTagAttributes();
58  }
59 
63  public function ‪render(): string
64  {
65  $name = $this->‪getName();
67  $this->tag->addAttribute('name', $name . '[hour]');
68 
69  $date = $this->‪getSelectedDate();
71 
72  $content = '';
73  if ($this->arguments['timeType'] === 'hour') {
74  $content .= $this->‪buildHourSelector($date);
75  } else {
76  $content .= $this->‪buildMinuteSelector($date);
77  }
78 
79  return $content;
80  }
81 
82  protected function ‪getSelectedDate(): ?\DateTime
83  {
85  $formRuntime = $this->renderingContext
86  ->getViewHelperVariableContainer()
87  ->get(RenderRenderableViewHelper::class, 'formRuntime');
88 
89  $date = $formRuntime[$this->arguments['property']];
90  if ($date instanceof \DateTime) {
91  return $date;
92  }
93  if ($date !== null) {
94  $date = $this->propertyMapper->convert($date, \DateTime::class);
95  if (!$date instanceof \DateTime) {
96  return null;
97  }
98  return $date;
99  }
100  if ($this->hasArgument('initialDate')) {
101  return new \DateTime($this->arguments['initialDate']);
102  }
103 
104  return null;
105  }
106 
107  protected function ‪buildHourSelector(\DateTime $date = null): string
108  {
109  $value = $date !== null ? $date->format('H') : null;
110  $hourSelector = clone $this->tag;
111  $hourSelector->addAttribute('name', sprintf('%s[hour]', $this->‪getName()));
112  $options = '';
113  foreach (range(0, 23) as $hour) {
114  $hour = str_pad((string)$hour, 2, '0', STR_PAD_LEFT);
115  $selected = $hour === $value ? ' selected="selected"' : '';
116  $options .= '<option value="' . htmlspecialchars($hour) . '" ' . $selected . '>' . htmlspecialchars($hour) . '</option>';
117  }
118  $hourSelector->setContent($options);
119  return $hourSelector->render();
120  }
121 
122  protected function ‪buildMinuteSelector(\DateTime $date = null): string
123  {
124  $value = $date !== null ? $date->format('i') : null;
125  $minuteSelector = clone $this->tag;
126  if ($this->hasArgument('id')) {
127  $minuteSelector->addAttribute('id', $this->arguments['id'] . '-minute');
128  }
129  $minuteSelector->addAttribute('name', sprintf('%s[minute]', $this->‪getName()));
130  $options = '';
131  foreach (range(0, 59) as $minute) {
132  $minute = str_pad((string)$minute, 2, '0', STR_PAD_LEFT);
133  $selected = $minute === $value ? ' selected="selected"' : '';
134  $options .= '<option value="' . htmlspecialchars($minute) . '"' . $selected . '>' . htmlspecialchars($minute) . '</option>';
135  }
136  $minuteSelector->setContent($options);
137  return $minuteSelector->render();
138  }
139 }
‪TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormFieldViewHelper\setErrorClassAttribute
‪setErrorClassAttribute()
Definition: AbstractFormFieldViewHelper.php:331
‪TYPO3\CMS\Form\ViewHelpers\Form\TimePickerViewHelper\buildHourSelector
‪buildHourSelector(\DateTime $date=null)
Definition: TimePickerViewHelper.php:106
‪TYPO3\CMS\Form\ViewHelpers\Form\TimePickerViewHelper\injectPropertyMapper
‪injectPropertyMapper(PropertyMapper $propertyMapper)
Definition: TimePickerViewHelper.php:42
‪TYPO3\CMS\Form\ViewHelpers\Form\TimePickerViewHelper\$propertyMapper
‪PropertyMapper $propertyMapper
Definition: TimePickerViewHelper.php:40
‪TYPO3\CMS\Form\ViewHelpers\Form\TimePickerViewHelper
Definition: TimePickerViewHelper.php:35
‪TYPO3\CMS\Form\ViewHelpers\Form\TimePickerViewHelper\buildMinuteSelector
‪buildMinuteSelector(\DateTime $date=null)
Definition: TimePickerViewHelper.php:121
‪TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormViewHelper\registerFieldNameForFormTokenGeneration
‪registerFieldNameForFormTokenGeneration(string $fieldName)
Definition: AbstractFormViewHelper.php:100
‪TYPO3\CMS\Form\ViewHelpers\Form\TimePickerViewHelper\render
‪render()
Definition: TimePickerViewHelper.php:62
‪TYPO3\CMS\Form\ViewHelpers\Form\TimePickerViewHelper\$tagName
‪string $tagName
Definition: TimePickerViewHelper.php:38
‪TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormFieldViewHelper\getName
‪getName()
Definition: AbstractFormFieldViewHelper.php:79
‪TYPO3\CMS\Form\ViewHelpers\Form\TimePickerViewHelper\initializeArguments
‪initializeArguments()
Definition: TimePickerViewHelper.php:47
‪TYPO3\CMS\Form\ViewHelpers\RenderRenderableViewHelper
Definition: RenderRenderableViewHelper.php:41
‪TYPO3\CMS\Extbase\Property\PropertyMapper
Definition: PropertyMapper.php:30
‪TYPO3\CMS\Form\ViewHelpers\Form
Definition: DatePickerViewHelper.php:22
‪TYPO3\CMS\Form\Domain\Runtime\FormRuntime
Definition: FormSession.php:18
‪TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormFieldViewHelper
Definition: AbstractFormFieldViewHelper.php:37
‪TYPO3\CMS\Form\ViewHelpers\Form\TimePickerViewHelper\getSelectedDate
‪getSelectedDate()
Definition: TimePickerViewHelper.php:81