From 55b722720d973c350bf4bd3488135e1bccf7d8e3 Mon Sep 17 00:00:00 2001
From: Oliver Bartsch <bo@cedev.de>
Date: Mon, 23 Jan 2023 16:26:36 +0100
Subject: [PATCH] [BUGFIX] Handle disabled default language in
 PageContentErrorHandler

The SiteInterface provides the "getDefaultLanguage()"
method, which will always return the first configured
language - usually L=0. However, this language might
be disabled, which means, it should not be visible
in frontend context.

The PageContentErrorHandler therefore now tries
to fetch the first enabled language, in case the
requested language id does not exist in the current
site and the sites' default language is disabled.

Resolves: #99530
Releases: main, 11.5
Change-Id: Ib02cbd8f01a4fc1a69be46ad2015e8863553fae0
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/77440
Tested-by: core-ci <typo3@b13.com>
Tested-by: Oliver Bartsch <bo@cedev.de>
Reviewed-by: Oliver Bartsch <bo@cedev.de>
---
 .../PageErrorHandler/PageContentErrorHandler.php     | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/typo3/sysext/core/Classes/Error/PageErrorHandler/PageContentErrorHandler.php b/typo3/sysext/core/Classes/Error/PageErrorHandler/PageContentErrorHandler.php
index db82b31263f6..ae1ee2b73b4d 100644
--- a/typo3/sysext/core/Classes/Error/PageErrorHandler/PageContentErrorHandler.php
+++ b/typo3/sysext/core/Classes/Error/PageErrorHandler/PageContentErrorHandler.php
@@ -321,6 +321,18 @@ class PageContentErrorHandler implements PageErrorHandlerInterface
             $language = $site->getDefaultLanguage();
         }
 
+        // Requested language or default language is disabled in current site => Fetch first "enabled" language
+        if (!$language->isEnabled()) {
+            $enabledLanguages = $site->getLanguages();
+            if ($enabledLanguages === []) {
+                throw new \RuntimeException(
+                    'Site ' . $site->getIdentifier() . ' does not define any enabled language.',
+                    1674487171
+                );
+            }
+            $language = reset($enabledLanguages);
+        }
+
         // Build Url
         $uri = $site->getRouter()->generateUri(
             (int)$urlParams['pageuid'],
-- 
GitLab