From 83c3be60dd72095b90ddd696964ed1dcedc13871 Mon Sep 17 00:00:00 2001 From: Francois Suter <sutfra@gmail.com> Date: Fri, 17 Jan 2020 11:21:03 +0100 Subject: [PATCH] [BUGFIX] Respect cross-site error content source In a multi-site setup, it should be possible to refer to a page from site A as an error page from site B. Resolves: #90135 Releases: master, 9.5 Change-Id: Ic3e4669e6279f58fe4953f8253d6329f1d137cd3 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/62955 Tested-by: Susanne Moog <look@susi.dev> Tested-by: TYPO3com <noreply@typo3.com> Tested-by: Benni Mack <benni@typo3.org> Reviewed-by: Susanne Moog <look@susi.dev> Reviewed-by: Oliver Bartsch <bo@cedev.de> Reviewed-by: Benni Mack <benni@typo3.org> --- .../PageContentErrorHandler.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/typo3/sysext/core/Classes/Error/PageErrorHandler/PageContentErrorHandler.php b/typo3/sysext/core/Classes/Error/PageErrorHandler/PageContentErrorHandler.php index 7935b5905472..3bf2e8739dbd 100644 --- a/typo3/sysext/core/Classes/Error/PageErrorHandler/PageContentErrorHandler.php +++ b/typo3/sysext/core/Classes/Error/PageErrorHandler/PageContentErrorHandler.php @@ -105,12 +105,22 @@ class PageContentErrorHandler implements PageErrorHandlerInterface return $urlParams['url']; } - $site = $request->getAttribute('site', null); + // Get the site related to the configured error page + $site = GeneralUtility::makeInstance(SiteFinder::class)->getSiteByPageId((int)$urlParams['pageuid']); + // Fall back to current request for the site if (!$site instanceof Site) { - $site = GeneralUtility::makeInstance(SiteFinder::class)->getSiteByPageId((int)$urlParams['pageuid']); + $site = $request->getAttribute('site', null); } - $language = $request->getAttribute('language', null); - if (!$language instanceof SiteLanguage || !$language->isEnabled()) { + /** @var SiteLanguage $requestLanguage */ + $requestLanguage = $request->getAttribute('language', null); + // Try to get the current request language from the site that was found above + if ($requestLanguage instanceof SiteLanguage) { + try { + $language = $site->getLanguageById($requestLanguage->getLanguageId()); + } catch (\InvalidArgumentException $e) { + $language = $site->getDefaultLanguage(); + } + } else { $language = $site->getDefaultLanguage(); } -- GitLab