diff --git a/typo3/sysext/frontend/Classes/Page/PageRepository.php b/typo3/sysext/frontend/Classes/Page/PageRepository.php index 5c82755afadb9633176f8b016071bb4d2213d57e..2a62d44ec1863cc94185a446a3f252a0286756b8 100644 --- a/typo3/sysext/frontend/Classes/Page/PageRepository.php +++ b/typo3/sysext/frontend/Classes/Page/PageRepository.php @@ -235,7 +235,7 @@ class PageRepository implements LoggerAwareInterface * The page record is either served from a first-level cache or loaded from the * database. If no page can be found, an empty array is returned. * - * Language overlay and versioning overlay are applied. Mount Point + * Language overlay and version overlay are applied. Mount Point * handling is not done, an overlaid Mount Point is not replaced. * * The result is conditioned by the public properties where_groupAccess @@ -297,9 +297,16 @@ class PageRepository implements LoggerAwareInterface $row = $queryBuilder->execute()->fetch(); if ($row) { - $this->versionOL('pages', $row); - if (is_array($row)) { - $result = $this->getPageOverlay($row); + $tsfe = $this->getTypoScriptFrontendController(); + if ($tsfe->sys_language_uid > 0 || !GeneralUtility::hideIfDefaultLanguage($row['l18n_cfg'])) { + $this->versionOL('pages', $row); + if (is_array($row)) { + $row = $this->getPageOverlay($row); + + if ($tsfe->sys_language_uid === 0 || isset($row['_PAGES_OVERLAY']) || !GeneralUtility::hideIfNotTranslated($row['l18n_cfg'])) { + $result = $row; + } + } } } $this->cache_getPage[$uid][$cacheKey] = $result; @@ -727,6 +734,10 @@ class PageRepository implements LoggerAwareInterface $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages'); $queryBuilder->getRestrictions()->removeAll(); + // Always ensure fetching l18n_cfg for further processing + if ($fields !== '*' && !GeneralUtility::inList($fields, 'l18n_cfg')) { + $fields .= ',l18n_cfg'; + } $res = $queryBuilder->select(...GeneralUtility::trimExplode(',', $fields, true)) ->from('pages') ->where( @@ -757,9 +768,9 @@ class PageRepository implements LoggerAwareInterface // Versioning Preview Overlay $this->versionOL('pages', $page, true); - // Skip if page got disabled due to version overlay - // (might be delete or move placeholder) - if (empty($page)) { + // Skip if page got disabled due to version overlay or default language should be hidden + // (might be deleted or move placeholder) + if (empty($page) || GeneralUtility::hideIfDefaultLanguage($page['l18n_cfg'])) { continue; } diff --git a/typo3/sysext/frontend/Tests/Functional/Fixtures/pages.xml b/typo3/sysext/frontend/Tests/Functional/Fixtures/pages.xml index abb60ee80448ac1724e71a849e096857a3edb935..40e7612bacfab89e7e446edc65033bb8afa40bd8 100644 --- a/typo3/sysext/frontend/Tests/Functional/Fixtures/pages.xml +++ b/typo3/sysext/frontend/Tests/Functional/Fixtures/pages.xml @@ -95,6 +95,23 @@ <perms_everybody>15</perms_everybody> </pages> + <pages> + <uid>501</uid> + <pid>1</pid> + <title>Localization 1-501</title> + <deleted>0</deleted> + <l18n_cfg>1</l18n_cfg> + </pages> + <pages> + <uid>502</uid> + <pid>1</pid> + <title>Ãœbersetzung 1-501</title> + <deleted>0</deleted> + <l10n_parent>501</l10n_parent> + <l18n_cfg>1</l18n_cfg> + <sys_language_uid>1</sys_language_uid> + </pages> + <pages> <uid>901</uid> <pid>0</pid> diff --git a/typo3/sysext/frontend/Tests/Functional/Page/PageRepositoryTest.php b/typo3/sysext/frontend/Tests/Functional/Page/PageRepositoryTest.php index b24b527a6a5e1607c150a7e96702ad83a3428536..c99603ac033bbb7b6c3900bd44827e1f08c13d73 100644 --- a/typo3/sysext/frontend/Tests/Functional/Page/PageRepositoryTest.php +++ b/typo3/sysext/frontend/Tests/Functional/Page/PageRepositoryTest.php @@ -95,6 +95,15 @@ class PageRepositoryTest extends \TYPO3\TestingFramework\Core\Functional\Functio $this->assertCount(5, $rows); } + /** + * @test + */ + public function getPageReturnsEmptyArrayWithHideIfDefaultLanguage() + { + $row = $this->pageRepo->getPage(501); + $this->assertSame([], $row); + } + /** * @test */