From 1692b7a69dcf62a9dc9ce1fe04ca794644220a8c Mon Sep 17 00:00:00 2001 From: "timo.klinge" Date: Thu, 30 Oct 2025 10:03:29 +0100 Subject: [PATCH 1/2] [TASK] compatibility with b13/container version 3 --- composer.json | 2 +- ext_emconf.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index cc478d1..81eeecd 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,7 @@ "license": "GPL-2.0-or-later", "require": { "typo3/cms-core": "^11.5 || ^12.4", - "b13/container": "^2.3.1" + "b13/container": "^2.3 || ^3.1" }, "suggest": { "georgringer/news": "Most usefull application of this extension." diff --git a/ext_emconf.php b/ext_emconf.php index bf9390d..bf9902c 100644 --- a/ext_emconf.php +++ b/ext_emconf.php @@ -20,7 +20,7 @@ 'constraints' => [ 'depends' => [ 'typo3' => '11.0.0-12.9.99', - 'container' => '2.3.1-2.9.99', + 'container' => '2.3.1-3.9.99', ], 'conflicts' => [ ], From 45977c466985da244801cb44ce63f126fddb4744 Mon Sep 17 00:00:00 2001 From: "timo.klinge" Date: Thu, 30 Oct 2025 10:05:05 +0100 Subject: [PATCH 2/2] [BUGFIX] display inline elements in correct language - hide translated inline elements in original language - show inline elements in correct language - fixes #19 --- ...drenLanguageCorrectionFormDataProvider.php | 64 +++++++++++++++++++ Classes/Hooks/DataHandler.php | 40 ++++++++++++ ext_emconf.php | 2 +- ext_localconf.php | 9 ++- 4 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 Classes/Backend/FormDataProvider/ContainerChildrenLanguageCorrectionFormDataProvider.php diff --git a/Classes/Backend/FormDataProvider/ContainerChildrenLanguageCorrectionFormDataProvider.php b/Classes/Backend/FormDataProvider/ContainerChildrenLanguageCorrectionFormDataProvider.php new file mode 100644 index 0000000..2449803 --- /dev/null +++ b/Classes/Backend/FormDataProvider/ContainerChildrenLanguageCorrectionFormDataProvider.php @@ -0,0 +1,64 @@ +getRegisteredCTypes(); + $cType = $result['databaseRow']['CType'][0] ?? ''; + if (!in_array($cType, $registeredCTypes, true)) { + return $result; + } + + $parentLanguageUid = (int)$result['databaseRow']['sys_language_uid'] ?? 0; + + $children =& $result['processedTca']['columns']['tx_t23inlinecontainer_elements']['children']; + $translationsExistFor = []; + + // store ids of original language elements that have a translation + foreach ($children as &$child) { + $lang = (int)$child['databaseRow']['sys_language_uid'] ?? 0; + $origUid = (int)($child['databaseRow']['l18n_parent'][0] ?? 0); + if ($parentLanguageUid === 0 && $lang > 0) { + continue; + } + if ($parentLanguageUid > 0 && $lang === $parentLanguageUid && $origUid > 0) { + $translationsExistFor[] = $origUid; + } + // if child language differs from parents language, grey out child in backend + $child['isInlineDefaultLanguageRecordInLocalizedParentContext'] = ($lang !== $parentLanguageUid); + } + + $filteredChildren = []; + + foreach ($children as $i => &$child) { + $lang = (int)$child['databaseRow']['sys_language_uid'] ?? 0; + //$child['defaultLanguageDiffRow'] = null; + + // hide translated elements from default language view + if ($parentLanguageUid === 0 && $lang > 0) { + continue; + } + + // hide original language children when they have a translated element + $childUid = (int)($child['databaseRow']['uid'] ?? 0); + if (in_array($childUid, $translationsExistFor, true)) { + continue; + } + + $filteredChildren[] = $child; + } + $children = array_values($filteredChildren); + + return $result; + } +} diff --git a/Classes/Hooks/DataHandler.php b/Classes/Hooks/DataHandler.php index a5743a9..f021eca 100644 --- a/Classes/Hooks/DataHandler.php +++ b/Classes/Hooks/DataHandler.php @@ -41,6 +41,46 @@ public function processDatamap_beforeStart(\TYPO3\CMS\Core\DataHandling\DataHand } } + /** + * @param array $incomingFieldArray + * @param string $table + * @param int|string $id + * @param \TYPO3\CMS\Core\DataHandling\DataHandler $dataHandler + * @return void + */ + public function processDatamap_preProcessFieldArray( + array &$incomingFieldArray, + string $table, + $id, + \TYPO3\CMS\Core\DataHandling\DataHandler $dataHandler + ): void { + // Only handle content elements + if ($table !== 'tt_content') { + return; + } + + // Only relevant if this is a translated record + $languageUid = (int)($incomingFieldArray['sys_language_uid'] ?? 0); + if ($languageUid <= 0) { + return; + } + + // If this record has a container parent, check if it's a localized one + $txContainerParent = (int)($incomingFieldArray['tx_container_parent'] ?? 0); + if ($txContainerParent > 0) { + // Fetch the parent record + $parentRecord = \TYPO3\CMS\Backend\Utility\BackendUtility::getRecord('tt_content', $txContainerParent); + + // If parent exists and is a localized record, resolve its default language UID + if (!empty($parentRecord['l18n_parent'])) { + $defaultParentUid = (int)$parentRecord['l18n_parent']; + + // Rewrite to the default-language container + $incomingFieldArray['tx_container_parent'] = $defaultParentUid; + } + } + } + public function processCmdmap_preProcess($command, $table, $id, $value, $pObj, $pasteUpdate) { if (in_array($command, ['copy', 'localize']) && $table === 'tt_content') { diff --git a/ext_emconf.php b/ext_emconf.php index bf9902c..8e0e5de 100644 --- a/ext_emconf.php +++ b/ext_emconf.php @@ -16,7 +16,7 @@ 'author_company' => 'TEAM23', 'state' => 'beta', 'clearCacheOnLoad' => true, - 'version' => '0.0.13', + 'version' => '0.0.14', 'constraints' => [ 'depends' => [ 'typo3' => '11.0.0-12.9.99', diff --git a/ext_localconf.php b/ext_localconf.php index bc439a5..6e0ff66 100644 --- a/ext_localconf.php +++ b/ext_localconf.php @@ -9,7 +9,7 @@ * LICENSE.txt file that was distributed with this source code. */ -$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processCmdmapClass']['tx-t23inlinecontainer'] = 'Team23\T23InlineContainer\Hooks\DataHandler'; +$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processCmdmapClass']['tx-t23inlinecontainer'] = 'Team23\T23InlineContainer\Hooks\DataHandler'; $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['tx-t23inlinecontainer'] = 'Team23\T23InlineContainer\Hooks\DataHandler'; $GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['formDataGroup']['tcaDatabaseRecord'][\Team23\T23InlineContainer\Backend\FormDataProvider\ContainerChildrenFormDataProvider::class] = [ @@ -19,4 +19,9 @@ 'before' => [ \TYPO3\CMS\Backend\Form\FormDataProvider\InlineOverrideChildTca::class, ] -]; \ No newline at end of file +]; +$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['formDataGroup']['tcaDatabaseRecord'][\Team23\T23InlineContainer\Backend\FormDataProvider\ContainerChildrenLanguageCorrectionFormDataProvider::class] = [ + 'depends' => [ + \TYPO3\CMS\Backend\Form\FormDataProvider\TcaInlineData::class, + ], +];