35 'renderType' =>
'tcaDescription',
45 'localizationStateSelector' => [
46 'renderType' =>
'localizationStateSelector',
48 'otherLanguageContent' => [
49 'renderType' =>
'otherLanguageContent',
51 'localizationStateSelector'
54 'defaultLanguageDifferences' => [
55 'renderType' =>
'defaultLanguageDifferences',
57 'otherLanguageContent',
72 $table = $this->data[
'tableName'];
73 $fieldName = $this->data[
'fieldName'];
74 $row = $this->data[
'databaseRow'];
75 $parameterArray = $this->data[
'parameterArray'];
77 $config = $parameterArray[
'fieldConf'][
'config'];
79 $itemValue = $parameterArray[
'itemFormElValue'];
81 $evalList = GeneralUtility::trimExplode(
',', $config[
'eval'],
true);
82 $nullControlNameEscaped = htmlspecialchars(
'control[active][' . $table .
'][' . $row[
'uid'] .
'][' . $fieldName .
']');
84 if (in_array(
'date', $evalList,
true)) {
87 } elseif (in_array(
'datetime', $evalList,
true)) {
90 } elseif (in_array(
'time', $evalList,
true)) {
92 } elseif (in_array(
'timesec', $evalList,
true)) {
95 throw new \RuntimeException(
96 'Field "' . $fieldName .
'" in table "' . $table .
'" with renderType "inputDataTime" needs'
97 .
'"eval" set to either "date", "datetime", "time" or "timesec"',
106 $fieldInformationHtml = $fieldInformationResult[
'html'];
110 if (isset($config[
'readOnly']) && $config[
'readOnly']) {
113 $itemValue = (new \DateTime($itemValue))->getTimestamp();
118 $html[] =
'<div class="formengine-field-item t3js-formengine-field-item">';
119 $html[] = $fieldInformationHtml;
120 $html[] =
'<div class="form-wizards-wrap">';
121 $html[] =
'<div class="form-wizards-element">';
122 $html[] =
'<div class="form-control-wrap" style="max-width: ' . $width .
'px">';
123 $html[] =
'<input class="form-control" value="' . htmlspecialchars($itemValue) .
'" type="text" disabled>';
128 $resultArray[
'html'] = implode(LF, $html);
135 'class' => implode(
' ', [
136 't3js-datetimepicker',
141 'data-date-type' => $format,
143 'data-formengine-input-params' => json_encode([
144 'field' => $parameterArray[
'itemFormElName'],
145 'evalList' => implode(
',', $evalList)
147 'data-formengine-input-name' => $parameterArray[
'itemFormElName'],
150 $maxLength = $config[
'max'] ?? 0;
151 if ((
int)$maxLength > 0) {
152 $attributes[
'maxlength'] = (int)$maxLength;
154 if (!empty($config[
'placeholder'])) {
155 $attributes[
'placeholder'] = trim($config[
'placeholder']);
158 if ($format ===
'datetime' || $format ===
'date') {
167 $adjustedValue = $itemValue + date(
'Z', (
int)$itemValue);
169 $itemValue = gmdate(
'c', $adjustedValue);
171 if (isset($config[
'range'][
'lower'])) {
172 $attributes[
'data-date-min-date'] = (int)$config[
'range'][
'lower'] * 1000;
174 if (isset($config[
'range'][
'upper'])) {
175 $attributes[
'data-date-max-date'] = (int)$config[
'range'][
'upper'] * 1000;
181 $itemValue = gmdate(
'c', (
int)$itemValue);
185 $fieldWizardHtml = $fieldWizardResult[
'html'];
189 $fieldControlHtml = $fieldControlResult[
'html'];
193 $expansionHtml[] =
'<div class="form-control-wrap" style="max-width: ' . $width .
'px">';
194 $expansionHtml[] =
'<div class="form-wizards-wrap">';
195 $expansionHtml[] =
'<div class="form-wizards-element">';
196 $expansionHtml[] =
'<div class="input-group">';
197 $expansionHtml[] =
'<input type="text" ' . GeneralUtility::implodeAttributes($attributes,
true) .
' />';
198 $expansionHtml[] =
'<input type="hidden" name="' . $parameterArray[
'itemFormElName'] .
'" value="' . htmlspecialchars($itemValue) .
'" />';
199 $expansionHtml[] =
'<span class="input-group-btn">';
200 $expansionHtml[] =
'<label class="btn btn-default" for="' . $attributes[
'id'] .
'">';
201 $expansionHtml[] = $this->iconFactory->getIcon(
'actions-edit-pick-date',
Icon::SIZE_SMALL)->render();
202 $expansionHtml[] =
'</label>';
203 $expansionHtml[] =
'</span>';
204 $expansionHtml[] =
'</div>';
205 $expansionHtml[] =
'</div>';
206 if (!empty($fieldControlHtml)) {
207 $expansionHtml[] =
'<div class="form-wizards-items-aside">';
208 $expansionHtml[] =
'<div class="btn-group">';
209 $expansionHtml[] = $fieldControlHtml;
210 $expansionHtml[] =
'</div>';
211 $expansionHtml[] =
'</div>';
213 if (!empty($fieldWizardHtml)) {
214 $expansionHtml[] =
'<div class="form-wizards-items-bottom">';
215 $expansionHtml[] = $fieldWizardHtml;
216 $expansionHtml[] =
'</div>';
218 $expansionHtml[] =
'</div>';
219 $expansionHtml[] =
'</div>';
220 $expansionHtml = implode(LF, $expansionHtml);
222 $fullElement = $expansionHtml;
224 $checked = $itemValue !==
null ?
' checked="checked"' :
'';
226 $fullElement[] =
'<div class="t3-form-field-disable"></div>';
227 $fullElement[] =
'<div class="checkbox t3-form-field-eval-null-checkbox">';
228 $fullElement[] =
'<label for="' . $nullControlNameEscaped .
'">';
229 $fullElement[] =
'<input type="hidden" name="' . $nullControlNameEscaped .
'" value="0" />';
230 $fullElement[] =
'<input type="checkbox" name="' . $nullControlNameEscaped .
'" id="' . $nullControlNameEscaped .
'" value="1"' . $checked .
' />';
231 $fullElement[] = $languageService->sL(
'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.nullCheckbox');
232 $fullElement[] =
'</label>';
233 $fullElement[] =
'</div>';
234 $fullElement[] = $expansionHtml;
235 $fullElement = implode(LF, $fullElement);
237 $checked = $itemValue !==
null ?
' checked="checked"' :
'';
238 $placeholder = $shortenedPlaceholder = $config[
'placeholder'] ??
'';
241 if (strlen($placeholder) > 0) {
242 $shortenedPlaceholder = GeneralUtility::fixed_lgd_cs($placeholder, 20);
243 if ($placeholder !== $shortenedPlaceholder) {
244 $overrideLabel = sprintf(
245 $languageService->sL(
'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.placeholder.override'),
246 '<span title="' . htmlspecialchars($placeholder) .
'">' . htmlspecialchars($shortenedPlaceholder) .
'</span>'
249 $overrideLabel = sprintf(
250 $languageService->sL(
'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.placeholder.override'),
251 htmlspecialchars($placeholder)
255 $overrideLabel = $languageService->sL(
256 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.placeholder.override_not_available'
260 $fullElement[] =
'<div class="checkbox t3js-form-field-eval-null-placeholder-checkbox">';
261 $fullElement[] =
'<label for="' . $nullControlNameEscaped .
'">';
262 $fullElement[] =
'<input type="hidden" name="' . $nullControlNameEscaped .
'" value="' . $fallbackValue .
'" />';
263 $fullElement[] =
'<input type="checkbox" name="' . $nullControlNameEscaped .
'" id="' . $nullControlNameEscaped .
'" value="1"' . $checked . $disabled .
' />';
264 $fullElement[] = $overrideLabel;
265 $fullElement[] =
'</label>';
266 $fullElement[] =
'</div>';
267 $fullElement[] =
'<div class="t3js-formengine-placeholder-placeholder">';
268 $fullElement[] =
'<div class="form-control-wrap" style="max-width:' . $width .
'px">';
269 $fullElement[] =
'<input type="text" class="form-control" disabled="disabled" value="' . htmlspecialchars($shortenedPlaceholder) .
'" />';
270 $fullElement[] =
'</div>';
271 $fullElement[] =
'</div>';
272 $fullElement[] =
'<div class="t3js-formengine-placeholder-formfield">';
273 $fullElement[] = $expansionHtml;
274 $fullElement[] =
'</div>';
275 $fullElement = implode(LF, $fullElement);
278 $resultArray[
'html'] =
'<div class="formengine-field-item t3js-formengine-field-item">' . $fieldInformationHtml . $fullElement .
'</div>';