From 9b062f6fb1df26dc1b171748f994fa80d6dc71ff Mon Sep 17 00:00:00 2001 From: Helmut Hummel <typo3@helhum.io> Date: Thu, 15 Dec 2022 13:22:54 +0100 Subject: [PATCH] [BUGFIX] Prioritize form default values over TCA overrides When defining a default value in column overrides e.g. for tt_content TCA field sys_language_uid this value from TCA will override the value that will be set via the page module when adding a content element for a different language, because the change introduced in #86876 does not respect default values that are set via defVals (which are passed to form engine as defaultValues) A check if such values are set is now added, so that the fix for #86876 will still work, but default values set via editing forms are also respected Resolves: #99381 Releases: main, 11.5 Change-Id: Ib4270665b396bbe520afb21a7f145d0d549305ac Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/78893 Tested-by: core-ci <typo3@b13.com> Tested-by: Oliver Bartsch <bo@cedev.de> Reviewed-by: Oliver Bartsch <bo@cedev.de> --- .../FormDataProvider/TcaColumnsOverrides.php | 1 + .../TcaColumnsOverridesTest.php | 76 +++++++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/typo3/sysext/backend/Classes/Form/FormDataProvider/TcaColumnsOverrides.php b/typo3/sysext/backend/Classes/Form/FormDataProvider/TcaColumnsOverrides.php index 63d6a3833c41..0eae906fd1f8 100644 --- a/typo3/sysext/backend/Classes/Form/FormDataProvider/TcaColumnsOverrides.php +++ b/typo3/sysext/backend/Classes/Form/FormDataProvider/TcaColumnsOverrides.php @@ -45,6 +45,7 @@ class TcaColumnsOverrides implements FormDataProviderInterface if ($overridenDefault !== '' && !isset($result['userTsConfig']['TCAdefaults.'][$tableNameWithDot][$field]) && !isset($result['pageTsConfig']['TCAdefaults.'][$tableNameWithDot][$field]) + && !isset($result['defaultValues'][$result['tableName']][$field]) && ($result['databaseRow'][$field] ?? '') !== $overridenDefault ) { $result['databaseRow'][$field] = $overridenDefault; diff --git a/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaColumnsOverridesTest.php b/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaColumnsOverridesTest.php index b2b6c5811078..837cae8ad65d 100644 --- a/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaColumnsOverridesTest.php +++ b/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaColumnsOverridesTest.php @@ -136,4 +136,80 @@ class TcaColumnsOverridesTest extends UnitTestCase self::assertEquals($expected, $this->subject->addData($input)); } + + public static function addDataRespectsTSconfigDefaultValuesForNewRecordsDataProvider(): array + { + return [ + [ + [ + 'userTsConfig' => [ + 'TCAdefaults.' => [ + 'aTable.' => [ + 'aField' => 'userTsConfigValue', + ], + ], + ], + ], + ], + [ + [ + 'pageTsConfig' => [ + 'TCAdefaults.' => [ + 'aTable.' => [ + 'aField' => 'pageTsConfigValue', + ], + ], + ], + ], + ], + [ + + [ + 'defaultValues' => [ + 'aTable' => [ + 'aField' => 'defaultValuesValue', + ], + ], + ], + ], + ]; + } + + /** + * @test + * @dataProvider addDataRespectsTSconfigDefaultValuesForNewRecordsDataProvider + */ + public function addDataRespectsTSconfigDefaultValuesForNewRecords(array $result): void + { + $input = array_replace_recursive([ + 'command' => 'new', + 'tableName' => 'aTable', + 'vanillaUid' => 12, + 'databaseRow' => [ + 'uid' => 42, + ], + 'recordTypeValue' => 'foo', + 'processedTca' => [ + 'columns' => [ + 'aField' => [ + 'aConfig' => 'aValue', + ], + ], + 'types' => [ + 'foo' => [ + 'showitem' => [], + 'columnsOverrides' => [ + 'aField' => [ + 'config' => [ + 'default' => 'aDefault', + ], + ], + ], + ], + ], + ], + ], $result); + + self::assertNotTrue(isset($this->subject->addData($input)['databaseRow']['aField'])); + } } -- GitLab