From e2161f9647d08530c4f69a86ae286c46ecada6cf Mon Sep 17 00:00:00 2001
From: David Hedden <davidj.hedden@gmail.com>
Date: Wed, 24 Apr 2024 15:52:41 +0200
Subject: [PATCH] [BUGFIX] Enable multi-level language fallback in extbase

Provide the current language fallback chain to new
instance of LanguageAspect. So it can be used in PageRepository
to let extbase records use the fallback chain.

Resolves: #91781
Releases: main, 12.4
Change-Id: I291c73c05772533919a7bf6beaa767d156bc9d74
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/84017
Reviewed-by: Simon Schaufelberger <simonschaufi+typo3@gmail.com>
Tested-by: Andreas Kienast <a.fernandez@scripting-base.de>
Reviewed-by: Andreas Kienast <a.fernandez@scripting-base.de>
Tested-by: Benni Mack <benni@typo3.org>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: core-ci <typo3@b13.com>
---
 .../Classes/Persistence/Generic/Storage/Typo3DbBackend.php   | 2 +-
 .../Functional/Persistence/TranslatedSiteContentTest.php     | 5 ++---
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php b/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php
index 4c335db64f35..753c5962ab40 100644
--- a/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php
+++ b/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php
@@ -537,7 +537,7 @@ class Typo3DbBackend implements BackendInterface, SingletonInterface
                 }
                 // Currently this needs to return the default record (OVERLAYS_MIXED) if no translation is found
                 //however this is a hack and should actually use the overlay functionality as given in the original LanguageAspect.
-                $customLanguageAspect = new LanguageAspect($languageUid, $languageUid, LanguageAspect::OVERLAYS_MIXED);
+                $customLanguageAspect = new LanguageAspect($languageUid, $languageUid, LanguageAspect::OVERLAYS_MIXED, $languageAspect->getFallbackChain());
                 $row = $pageRepository->getLanguageOverlay($tableName, $row, $customLanguageAspect);
             }
         } elseif (is_array($row)) {
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/TranslatedSiteContentTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/TranslatedSiteContentTest.php
index 9f9ed26fab4e..3f9184fd0d62 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/TranslatedSiteContentTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/TranslatedSiteContentTest.php
@@ -566,12 +566,11 @@ final class TranslatedSiteContentTest extends FunctionalTestCase
                 'visibleRecordHeaders' => ['[Translate to Polski:] Regular Element #1', 'Regular Element #2', 'Regular Element #3'],
             ],
             // Expected behaviour:
-            // Element #3 is not translated in PL and it is translated in DA. It's not shown as fallback chain is not related to single CE level
-            // but on page level - and this page is translated to Polish, so no fallback is happening
+            // Element #3 is shown from DA. Element #3 from PL is not translated, but a fallback to DA is defined
             [
                 'fallbackType' => 'fallback',
                 'fallbackChain' => ['DA', 'EN'],
-                'visibleRecordHeaders' => ['[Translate to Polski:] Regular Element #1', 'Regular Element #2', 'Regular Element #3'],
+                'visibleRecordHeaders' => ['[Translate to Polski:] Regular Element #1', 'Regular Element #2', '[Translate to Dansk:] Regular Element #3'],
             ],
             // Expected behaviour:
             // Non translated default language elements are not shown, because of strict mode
-- 
GitLab