support default time on date-time-picker (#4579)

This commit is contained in:
Kevin Papst
2024-01-21 01:59:30 +01:00
committed by GitHub
parent a5b4a92086
commit 12ef19df28

View File

@@ -48,6 +48,17 @@ class DateTimePickerType extends AbstractType
'view_timezone', 'view_timezone',
])); ]));
$defaultTime = ['hour' => '', 'minute' => ''];
if (\array_key_exists('force_time', $options)) {
$tmp = $options['force_time'];
if (\is_string($tmp)) {
$defaultTime = $this->parseTime($tmp);
unset($options['force_time']);
$timeOptions['required'] = false;
}
}
if (false === $options['label']) { if (false === $options['label']) {
$dateOptions['label'] = false; $dateOptions['label'] = false;
$timeOptions['label'] = false; $timeOptions['label'] = false;
@@ -79,7 +90,7 @@ class DateTimePickerType extends AbstractType
function ($transform) { function ($transform) {
return $transform; return $transform;
}, },
function ($reverseTransform) { function ($reverseTransform) use ($defaultTime) {
if (\array_key_exists('date', $reverseTransform) && $reverseTransform['date'] === null) { if (\array_key_exists('date', $reverseTransform) && $reverseTransform['date'] === null) {
$reverseTransform['time'] = [ $reverseTransform['time'] = [
'year' => '', 'year' => '',
@@ -89,10 +100,7 @@ class DateTimePickerType extends AbstractType
} }
// happened in DateTimePickerType - made it impossible to create an empty DateTime // happened in DateTimePickerType - made it impossible to create an empty DateTime
if (\array_key_exists('time', $reverseTransform) && $reverseTransform['time'] === null) { if (\array_key_exists('time', $reverseTransform) && $reverseTransform['time'] === null) {
$reverseTransform['time'] = [ $reverseTransform['time'] = $defaultTime;
'hour' => '',
'minute' => '',
];
} }
return $reverseTransform; return $reverseTransform;
@@ -132,6 +140,7 @@ class DateTimePickerType extends AbstractType
return $options['compound'] ? [] : ''; return $options['compound'] ? [] : '';
}, },
'invalid_message' => 'Please enter a valid date and time.', 'invalid_message' => 'Please enter a valid date and time.',
'force_time' => null, // one of: string (start, end) or a string to as argument for DateTime->modify() or null
]); ]);
// Don't add some defaults in order to preserve the defaults // Don't add some defaults in order to preserve the defaults
@@ -147,6 +156,27 @@ class DateTimePickerType extends AbstractType
]); ]);
} }
/**
* @return array{'hour': string, 'minute': string}
*/
private function parseTime(?string $time): array
{
$values = [
'hour' => '',
'minute' => ''
];
if (\is_string($time)) {
$times = explode(':', $time);
if (\count($times) > 1) {
$values['hour'] = $times[0];
$values['minute'] = $times[1];
}
}
return $values;
}
public function getBlockPrefix(): string public function getBlockPrefix(): string
{ {
return 'date_time'; return 'date_time';