From 8ff6876594e91d6800ff20e845ba4dbde6c7dd38 Mon Sep 17 00:00:00 2001 From: Oliver Bartsch <bo@cedev.de> Date: Sun, 5 Apr 2020 16:55:13 +0200 Subject: [PATCH] [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: TYPO3com <noreply@typo3.com> Tested-by: aslam idrisov <aslambek.idrisov1@swisscom.com> Tested-by: Benni Mack <benni@typo3.org> Reviewed-by: aslam idrisov <aslambek.idrisov1@swisscom.com> Reviewed-by: Benni Mack <benni@typo3.org> --- .../FormDataProvider/TcaColumnsOverrides.php | 13 ++++++ .../TcaColumnsOverridesTest.php | 46 +++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/typo3/sysext/backend/Classes/Form/FormDataProvider/TcaColumnsOverrides.php b/typo3/sysext/backend/Classes/Form/FormDataProvider/TcaColumnsOverrides.php index 6cc0a30e7720..63d6a3833c41 100644 --- a/typo3/sysext/backend/Classes/Form/FormDataProvider/TcaColumnsOverrides.php +++ b/typo3/sysext/backend/Classes/Form/FormDataProvider/TcaColumnsOverrides.php @@ -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; diff --git a/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaColumnsOverridesTest.php b/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaColumnsOverridesTest.php index 58383a641a0e..9b305cd24f4f 100644 --- a/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaColumnsOverridesTest.php +++ b/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaColumnsOverridesTest.php @@ -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)); + } } -- GitLab