From 92814010a8884ccf9bc66a5cc26a9679b5e700af Mon Sep 17 00:00:00 2001 From: Christian Kuhn <lolli@schwarzbu.ch> Date: Tue, 22 Sep 2015 18:29:59 +0200 Subject: [PATCH] [BUGFIX] Inline in flex Inline elements within flex forms do not differ from "normal" inline relations on DB side. For inline relation handling it looks like a direct table to table connection, even if the connect data is stored within xml. The resolve logic triggered by the inline process data provider thus needs table name and uid of the "parent" record to resolve inline elements correctly. Change-Id: I06a97221cadb9ac772494f8e8d9045c41a50d305 Resolves: #69867 Releases: master Reviewed-on: http://review.typo3.org/43482 Reviewed-by: Daniel Goerz <ervaude@gmail.com> Tested-by: Sebastian Michaelsen <michaelsen@t3seo.de> Reviewed-by: Morton Jonuschat <m.jonuschat@mojocode.de> Tested-by: Morton Jonuschat <m.jonuschat@mojocode.de> Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch> Tested-by: Christian Kuhn <lolli@schwarzbu.ch> --- .../Form/FormDataProvider/TcaFlexProcess.php | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/typo3/sysext/backend/Classes/Form/FormDataProvider/TcaFlexProcess.php b/typo3/sysext/backend/Classes/Form/FormDataProvider/TcaFlexProcess.php index bc5330437f74..c4874e119117 100644 --- a/typo3/sysext/backend/Classes/Form/FormDataProvider/TcaFlexProcess.php +++ b/typo3/sysext/backend/Classes/Form/FormDataProvider/TcaFlexProcess.php @@ -347,6 +347,7 @@ class TcaFlexProcess extends AbstractItemProvider implements FormDataProviderInt protected function modifyDataStructureAndDataValuesByFlexFormSegmentGroup(array $result, $fieldName, $pageTsConfig) { $dataStructure = $result['processedTca']['columns'][$fieldName]['config']['ds']; $dataValues = $result['databaseRow'][$fieldName]; + $tableName = $result['tableName']; $availableLanguageCodes = $result['processedTca']['columns'][$fieldName]['config']['ds']['meta']['availableLanguageCodes']; if ($dataStructure['meta']['langChildren']) { @@ -376,9 +377,9 @@ class TcaFlexProcess extends AbstractItemProvider implements FormDataProviderInt $dataStructureSheetElements = $dataStructureSheetDefinition['ROOT']['el']; // Prepare pageTsConfig of this sheet - $pageTsConfigMerged['TCEFORM.']['flexDummyTable.'] = []; + $pageTsConfigMerged['TCEFORM.'][$tableName . '.'] = []; if (isset($pageTsConfig[$dataStructureSheetName . '.']) && is_array($pageTsConfig[$dataStructureSheetName . '.'])) { - $pageTsConfigMerged['TCEFORM.']['flexDummyTable.'] = $pageTsConfig[$dataStructureSheetName . '.']; + $pageTsConfigMerged['TCEFORM.'][$tableName . '.'] = $pageTsConfig[$dataStructureSheetName . '.']; } foreach ($languagesOnSheetLevel as $isoSheetLevel) { @@ -415,14 +416,16 @@ class TcaFlexProcess extends AbstractItemProvider implements FormDataProviderInt } foreach ($languagesOnElementLevel as $isoElementLevel) { $langElementLevel = 'v' . $isoElementLevel; - $valueArray = []; + $valueArray = [ + 'uid' => $result['databaseRow']['uid'], + ]; $command = 'new'; if (array_key_exists($langElementLevel, $singleFieldValueArray)) { $command = 'edit'; $valueArray[$singleFieldName] = $singleFieldValueArray[$langElementLevel]; } $inputToFlexFormSegment = [ - 'tableName' => 'flexDummyTable', + 'tableName' => $result['tableName'], 'command' => $command, // It is currently not possible to have pageTsConfig for section container 'pageTsConfigMerged' => [], @@ -475,10 +478,12 @@ class TcaFlexProcess extends AbstractItemProvider implements FormDataProviderInt foreach ($languagesOnElementLevel as $isoElementLevel) { $langElementLevel = 'v' . $isoElementLevel; $inputToFlexFormSegment = [ - 'tableName' => 'flexDummyTable', + 'tableName' => $result['tableName'], 'command' => 'new', 'pageTsConfigMerged' => [], - 'databaseRow' => [], + 'databaseRow' => [ + 'uid' => $result['databaseRow']['uid'], + ], 'vanillaTableTca' => [ 'ctrl' => [], 'columns' => [ @@ -520,7 +525,10 @@ class TcaFlexProcess extends AbstractItemProvider implements FormDataProviderInt } else { foreach ($languagesOnElementLevel as $isoElementLevel) { $langElementLevel = 'v' . $isoElementLevel; - $valueArray = []; + $valueArray = [ + // uid of "parent" is given down for inline elements to resolve correctly + 'uid' => $result['databaseRow']['uid'], + ]; $command = 'new'; if (isset($dataValues['data'][$dataStructureSheetName][$langSheetLevel][$dataStructureSheetElementName]) && array_key_exists($langElementLevel, $dataValues['data'][$dataStructureSheetName][$langSheetLevel][$dataStructureSheetElementName]) @@ -529,7 +537,8 @@ class TcaFlexProcess extends AbstractItemProvider implements FormDataProviderInt $valueArray[$dataStructureSheetElementName] = $dataValues['data'][$dataStructureSheetName][$langSheetLevel][$dataStructureSheetElementName][$langElementLevel]; } $inputToFlexFormSegment = [ - 'tableName' => 'flexDummyTable', + // tablename of "parent" is given down for inline elements to resolve correctly + 'tableName' => $result['tableName'], 'command' => $command, 'pageTsConfigMerged' => $pageTsConfigMerged, 'databaseRow' => $valueArray, -- GitLab