support default time on date-time-picker (#4579)
This commit is contained in:
@@ -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';
|
||||||
|
|||||||
Reference in New Issue
Block a user