diff --git a/typo3/sysext/fluid/Tests/Functional/ViewHelpers/Transform/HtmlViewHelperTest.php b/typo3/sysext/fluid/Tests/Functional/ViewHelpers/Transform/HtmlViewHelperTest.php index 55ea6ec8d65bd55b37d62106995b4cc5f3c182b8..868baee3f0e887cf1119c84b9a7c080a343f11af 100644 --- a/typo3/sysext/fluid/Tests/Functional/ViewHelpers/Transform/HtmlViewHelperTest.php +++ b/typo3/sysext/fluid/Tests/Functional/ViewHelpers/Transform/HtmlViewHelperTest.php @@ -19,6 +19,7 @@ namespace TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Transform; use TYPO3\CMS\Core\Core\SystemEnvironmentBuilder; use TYPO3\CMS\Core\Http\ServerRequest; +use TYPO3\CMS\Core\Site\Entity\NullSite; use TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait; use TYPO3\CMS\Fluid\View\StandaloneView; use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase; @@ -43,8 +44,13 @@ class HtmlViewHelperTest extends FunctionalTestCase [$this->buildDefaultLanguageConfiguration('EN', '/')] ); - $GLOBALS['TYPO3_REQUEST'] = (new ServerRequest('https://typo3.localhost/', 'GET')) - ->withAttribute('applicationType', SystemEnvironmentBuilder::REQUESTTYPE_BE); + // A nullsite is used, so PageLinkBuilder does not "detect" the default site (from TSFE) as the same + // site making all links absolute for our tests + $rootPageSite = new NullSite(); + $GLOBALS['TYPO3_REQUEST'] = (new ServerRequest('https://typo3-2.localhost/', 'GET')) + ->withAttribute('applicationType', SystemEnvironmentBuilder::REQUESTTYPE_BE) + ->withAttribute('site', $rootPageSite) + ->withAttribute('language', $rootPageSite->getDefaultLanguage()); } public static function isTransformedDataProvider(): array diff --git a/typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php b/typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php index cbee092877aa3f50d6355432c7cb42ed8dd2ebac..defd173d257dd5e5ae750bc33bf41f1db5f842b9 100644 --- a/typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php +++ b/typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php @@ -6798,9 +6798,10 @@ class ContentObjectRenderer implements LoggerAwareInterface } /** - * @return \TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController + * @return TypoScriptFrontendController|null + * @internal this is set to public so extensions such as EXT:solr can use the method in tests. */ - protected function getTypoScriptFrontendController() + public function getTypoScriptFrontendController() { return $this->typoScriptFrontendController ?: $GLOBALS['TSFE'] ?? null; } diff --git a/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php b/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php index 436f1c655dd94538726d5fb74c8017485b15136d..657ec433c8f5d4994f6cdcf2b3d429085728e85b 100644 --- a/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php +++ b/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php @@ -3545,11 +3545,11 @@ class TypoScriptFrontendController implements LoggerAwareInterface /** * Returns the current BE user. * - * @return \TYPO3\CMS\Backend\FrontendBackendUserAuthentication + * @return FrontendBackendUserAuthentication|null */ protected function getBackendUser() { - return $GLOBALS['BE_USER']; + return $GLOBALS['BE_USER'] ?? null; } /** diff --git a/typo3/sysext/frontend/Classes/Typolink/PageLinkBuilder.php b/typo3/sysext/frontend/Classes/Typolink/PageLinkBuilder.php index cd95ac9ae507ab4351e359ba1408f0ce6374a765..a34ea386f8a50a4575a547d2c40592d599caed68 100644 --- a/typo3/sysext/frontend/Classes/Typolink/PageLinkBuilder.php +++ b/typo3/sysext/frontend/Classes/Typolink/PageLinkBuilder.php @@ -41,6 +41,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Utility\MathUtility; use TYPO3\CMS\Core\Utility\RootlineUtility; use TYPO3\CMS\Frontend\ContentObject\TypolinkModifyLinkConfigForPageLinksHookInterface; +use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController; /** * Builds a TypoLink to a certain page @@ -649,6 +650,9 @@ class PageLinkBuilder extends AbstractTypolinkBuilder */ protected function getCurrentSite(): ?SiteInterface { + if ($this->typoScriptFrontendController instanceof TypoScriptFrontendController) { + return $this->typoScriptFrontendController->getSite(); + } if (isset($GLOBALS['TYPO3_REQUEST']) && $GLOBALS['TYPO3_REQUEST'] instanceof ServerRequestInterface) { return $GLOBALS['TYPO3_REQUEST']->getAttribute('site', null); } @@ -672,6 +676,9 @@ class PageLinkBuilder extends AbstractTypolinkBuilder */ protected function getCurrentSiteLanguage(): ?SiteLanguage { + if ($this->typoScriptFrontendController instanceof TypoScriptFrontendController) { + return $this->typoScriptFrontendController->getLanguage(); + } if (isset($GLOBALS['TYPO3_REQUEST']) && $GLOBALS['TYPO3_REQUEST'] instanceof ServerRequestInterface) { return $GLOBALS['TYPO3_REQUEST']->getAttribute('language', null); }