diff --git a/typo3/sysext/backend/Classes/Form/FormDataProvider/TcaSelectItems.php b/typo3/sysext/backend/Classes/Form/FormDataProvider/TcaSelectItems.php index 91569d7fd916b63d5f375d7ac94b271c8793a397..53bce81b34d05213158627532b45bf2f3163eb30 100644 --- a/typo3/sysext/backend/Classes/Form/FormDataProvider/TcaSelectItems.php +++ b/typo3/sysext/backend/Classes/Form/FormDataProvider/TcaSelectItems.php @@ -78,8 +78,14 @@ class TcaSelectItems extends AbstractItemProvider implements FormDataProviderInt $removedItems = array_diff_key($removedItems, $fieldConfig['config']['items']); - // needed to determine the items for invalid values $currentDatabaseValuesArray = $this->processDatabaseFieldValue($result['databaseRow'], $fieldName); + // Check if it's a new record to respect TCAdefaults + if (!empty($fieldConfig['config']['MM']) && $result['command'] !== 'new') { + // Getting the current database value on a mm relation doesn't make sense since the amount of selected + // relations is stored in the field and not the uids of the items + $currentDatabaseValuesArray = []; + } + $result['databaseRow'][$fieldName] = $currentDatabaseValuesArray; // add item values as keys to determine which items are stored in the database and should be preselected diff --git a/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaSelectItemsTest.php b/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaSelectItemsTest.php index 5a14d7ac6e8ba1a21d0a872e760ea6d860ea0c2c..e82d0040af2c95f035e7f10032f6608871785664 100644 --- a/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaSelectItemsTest.php +++ b/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaSelectItemsTest.php @@ -3441,7 +3441,7 @@ class TcaSelectItemsTest extends UnitTestCase 24 ]; - $relationHandlerProphecy->start(2, 'foreignTable', 'aTable_foreignTable_mm', 42, 'aTable', $fieldConfig)->shouldBeCalled(); + $relationHandlerProphecy->start('', 'foreignTable', 'aTable_foreignTable_mm', 42, 'aTable', $fieldConfig)->shouldBeCalled(); $relationHandlerProphecy->getValueArray()->shouldBeCalled()->willReturn($relationHandlerUids); $expected = $input; @@ -3877,8 +3877,8 @@ class TcaSelectItemsTest extends UnitTestCase 'command' => 'edit', 'effectivePid' => 42, 'databaseRow' => [ - 'uid' => 'NEW1234', - 'aField' => '24,35', + 'uid' => 42, + 'aField' => '2', ], 'processedTca' => [ 'columns' => [ @@ -3895,7 +3895,9 @@ class TcaSelectItemsTest extends UnitTestCase ], ], ], - [], + [ + 'relationHandlerStartItemList' => '', + ], [] ], 'Relation with MM table and maxitems = 1 processes field value (item count)' => [ @@ -3923,7 +3925,9 @@ class TcaSelectItemsTest extends UnitTestCase ], ], ], - [], + [ + 'relationHandlerStartItemList' => '', + ], [ 24 ] @@ -3953,7 +3957,9 @@ class TcaSelectItemsTest extends UnitTestCase ], ], ], - [], + [ + 'relationHandlerStartItemList' => '', + ], [] ] ]; @@ -3969,7 +3975,7 @@ class TcaSelectItemsTest extends UnitTestCase */ public function processSelectFieldSetsCorrectValuesForMmRelations(array $input, array $overrideRelationHandlerSettings, array $relationHandlerUids): void { - $field = $input['databaseRow']['aField']; + $field = $overrideRelationHandlerSettings['relationHandlerStartItemList'] ?? $input['databaseRow']['aField']; $foreignTable = $overrideRelationHandlerSettings['foreign_table'] ?? $input['processedTca']['columns']['aField']['config']['foreign_table']; $mmTable = $overrideRelationHandlerSettings['MM'] ?? $input['processedTca']['columns']['aField']['config']['MM']; $uid = $input['databaseRow']['uid'];