[BUGFIX] Do not link l18n_cfg restricted pages 76/57276/2
authorNicole Cordes <typo3@cordes.co>
Wed, 20 Jun 2018 20:48:16 +0000 (22:48 +0200)
committerStefan Neufeind <typo3.neufeind@speedpartner.de>
Sun, 24 Jun 2018 21:54:16 +0000 (23:54 +0200)
Prevent linking a page that is either restricted for the default
language or where any fallback is forbidden.

Resolves: #85063
Releases: master, 8.7
Change-Id: I9dd1f7b5b357c60114f72898ddffa9ecf7305bf2
Reviewed-on: https://review.typo3.org/57276
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Mathias Brodala <mbrodala@pagemachine.de>
Reviewed-by: Stefan Neufeind <typo3.neufeind@speedpartner.de>
Tested-by: Stefan Neufeind <typo3.neufeind@speedpartner.de>
typo3/sysext/frontend/Classes/Typolink/PageLinkBuilder.php

index 193fa14..85a713d 100644 (file)
@@ -59,6 +59,13 @@ class PageLinkBuilder extends AbstractTypolinkBuilder
         if (empty($page)) {
             throw new UnableToLinkException('Page id "' . $linkDetails['typoLinkParameter'] . '" was not found, so "' . $linkText . '" was not linked.', 1490987336, null, $linkText);
         }
+        $language = $page[$GLOBALS['TCA']['pages']['ctrl']['languageField']];
+        if ($language === 0 && GeneralUtility::hideIfDefaultLanguage($page['l18n_cfg'])) {
+            throw new UnableToLinkException('Default language of page  "' . $linkDetails['typoLinkParameter'] . '" is hidden, so "' . $linkText . '" was not linked.', 1529527301, null, $linkText);
+        }
+        if ($language > 0 && !isset($page['_PAGES_OVERLAY']) && GeneralUtility::hideIfNotTranslated($page['l18n_cfg'])) {
+            throw new UnableToLinkException('Fallback to default language of page "' . $linkDetails['typoLinkParameter'] . '" is disabled, so "' . $linkText . '" was not linked.', 1529527488, null, $linkText);
+        }
 
         foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typolinkProcessing']['typolinkModifyParameterForPageLinks'] ?? [] as $classData) {
             $hookObject = GeneralUtility::makeInstance($classData);