Skip to content
Snippets Groups Projects
Commit 8ff68765 authored by Oliver Bartsch's avatar Oliver Bartsch Committed by Benni Mack
Browse files

[BUGFIX] Set default value defined in columnsOverrides

The TcaColumnsOverrides provider now handles overwriting
of a fields default value for a specific record type.

This is done by setting the value from `columnsOverrides`
as the field value of the new `databaseRow` by respecting
TSconfig `TCAdefaults`.

Resolves: #86876
Releases: master, 9.5
Change-Id: If03871f262ed89011dbeda3f268f0b61c20036be
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/64081


Tested-by: default avatarTYPO3com <noreply@typo3.com>
Tested-by: default avataraslam idrisov <aslambek.idrisov1@swisscom.com>
Tested-by: default avatarBenni Mack <benni@typo3.org>
Reviewed-by: default avataraslam idrisov <aslambek.idrisov1@swisscom.com>
Reviewed-by: default avatarBenni Mack <benni@typo3.org>
parent b2538a07
No related merge requests found
......@@ -38,6 +38,19 @@ class TcaColumnsOverrides implements FormDataProviderInterface
$result['processedTca']['columns'],
$result['processedTca']['types'][$type]['columnsOverrides']
);
if ($result['command'] === 'new') {
$tableNameWithDot = $result['tableName'] . '.';
foreach ($result['processedTca']['types'][$type]['columnsOverrides'] as $field => $columnsOverrideConfig) {
$overridenDefault = $columnsOverrideConfig['config']['default'] ?? '';
if ($overridenDefault !== ''
&& !isset($result['userTsConfig']['TCAdefaults.'][$tableNameWithDot][$field])
&& !isset($result['pageTsConfig']['TCAdefaults.'][$tableNameWithDot][$field])
&& ($result['databaseRow'][$field] ?? '') !== $overridenDefault
) {
$result['databaseRow'][$field] = $overridenDefault;
}
}
}
unset($result['processedTca']['types'][$type]['columnsOverrides']);
}
return $result;
......
......@@ -40,6 +40,8 @@ class TcaColumnsOverridesTest extends UnitTestCase
public function addDataRemovesGivenColumnsOverrides()
{
$input = [
'command' => 'new',
'tableName' => 'aTable',
'recordTypeValue' => 'foo',
'processedTca' => [
'columns' => [],
......@@ -64,6 +66,8 @@ class TcaColumnsOverridesTest extends UnitTestCase
public function addDataMergesColumnsOverridesIntoColumns()
{
$input = [
'command' => 'new',
'tableName' => 'aTable',
'recordTypeValue' => 'foo',
'processedTca' => [
'columns' => [
......@@ -91,4 +95,46 @@ class TcaColumnsOverridesTest extends UnitTestCase
self::assertEquals($expected, $this->subject->addData($input));
}
/**
* @test
*/
public function addDataMergesColumnsOverridesDefaultValueIntoDatabaseRow()
{
$input = [
'command' => 'new',
'tableName' => 'aTable',
'vanillaUid' => 12,
'databaseRow' => [
'uid' => 42,
],
'recordTypeValue' => 'foo',
'processedTca' => [
'columns' => [
'aField' => [
'aConfig' => 'aValue'
],
],
'types' => [
'foo' => [
'showitem' => [],
'columnsOverrides' => [
'aField' => [
'config' => [
'default' => 'aDefault'
]
],
],
],
],
],
];
$expected = $input;
$expected['databaseRow']['aField'] = 'aDefault';
$expected['processedTca']['columns']['aField']['config']['default'] = 'aDefault';
unset($expected['processedTca']['types']['foo']['columnsOverrides']);
self::assertEquals($expected, $this->subject->addData($input));
}
}
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