Skip to content
Snippets Groups Projects
Commit 7765a23d authored by Oliver Hader's avatar Oliver Hader Committed by Oliver Bartsch
Browse files

[BUGFIX] Accept native TIME value '00:00:00' in backend forms

Native date/time types have a zero-value, which is '0000-00-00 00:00:00'
for DATETIME and '00:00:00' for TIME. For DATETIME values this position
in time is really special - however, for TIME values '00:00:00' it would
refer to midnight, which actually is common use case (and currently not
possible in backend forms).

Resolves: #97216
Releases: main, 11.5
Change-Id: Id77a3485e86008ff7c39319679120b2a73b0386c
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/73999


Tested-by: default avatarcore-ci <typo3@b13.com>
Tested-by: default avatarBenni Mack <benni@typo3.org>
Tested-by: default avatarOliver Bartsch <bo@cedev.de>
Reviewed-by: default avatarBenni Mack <benni@typo3.org>
Reviewed-by: default avatarOliver Bartsch <bo@cedev.de>
parent 2f0338a9
Branches
Tags
No related merge requests found
......@@ -39,15 +39,16 @@ class DatabaseRowDateTimeFields implements FormDataProviderInterface
continue;
}
if (in_array($columnConfig['config']['dbType'] ?? '', $dateTimeTypes, true)) {
$format = $dateTimeFormats[$columnConfig['config']['dbType']] ?? [];
if (!empty($result['databaseRow'][$column])
&& $result['databaseRow'][$column] !== $dateTimeFormats[$columnConfig['config']['dbType']]['empty']
&& $result['databaseRow'][$column] !== ($format['empty'] ?? null)
) {
// Create an ISO-8601 date from current field data; the database always contains UTC
// The field value is something like "2016-01-01" or "2016-01-01 10:11:12", so appending "UTC"
// makes date() treat it as a UTC date (which is what we store in the database).
$result['databaseRow'][$column] = date('c', (int)strtotime($result['databaseRow'][$column] . ' UTC'));
} else {
$result['databaseRow'][$column] = null;
$result['databaseRow'][$column] = $format['reset'] ?? null;
}
}
// its a UNIX timestamp! We do not modify this here, as it will only be treated as a datetime because
......
......@@ -18,6 +18,7 @@ declare(strict_types=1);
namespace TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider;
use TYPO3\CMS\Backend\Form\FormDataProvider\DatabaseRowDateTimeFields;
use TYPO3\CMS\Core\Database\Query\QueryHelper;
use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
/**
......@@ -180,4 +181,32 @@ class DatabaseRowDateTimeFieldsTest extends UnitTestCase
self::assertEquals($expected, (new DatabaseRowDateTimeFields())->addData($input));
date_default_timezone_set($oldTimezone);
}
/**
* @test
*/
public function addDataAppliesResetValueForEmptyValue(): void
{
foreach (QueryHelper::getDateTimeTypes() as $dbType) {
$input = [
'tableName' => 'aTable',
'processedTca' => [
'columns' => [
'aField' => [
'config' => [
'type' => 'datetime',
'dbType' => $dbType,
],
],
],
],
'databaseRow' => [
'aField' => QueryHelper::getDateTimeFormats()[$dbType]['empty'],
],
];
$expected = $input;
$expected['databaseRow']['aField'] = QueryHelper::getDateTimeFormats()[$dbType]['reset'];
self::assertSame($expected, (new DatabaseRowDateTimeFields())->addData($input));
}
}
}
......@@ -186,14 +186,17 @@ class QueryHelper
'date' => [
'empty' => '0000-00-00',
'format' => 'Y-m-d',
'reset' => null,
],
'datetime' => [
'empty' => '0000-00-00 00:00:00',
'format' => 'Y-m-d H:i:s',
'reset' => null,
],
'time' => [
'empty' => '00:00:00',
'format' => 'H:i:s',
'reset' => 0,
],
];
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment