From 837dd07c8068eab49f381bcd15c8d7e854522909 Mon Sep 17 00:00:00 2001 From: Stefan Galinski <stefan@sgalinski.de> Date: Tue, 29 Oct 2019 21:37:42 +0100 Subject: [PATCH] [BUGFIX] Language Visibility not respected inside the sitemap generation --- Classes/SignalSlot/SitemapSignalSlot.php | 43 +++++++++++++++++++----- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/Classes/SignalSlot/SitemapSignalSlot.php b/Classes/SignalSlot/SitemapSignalSlot.php index 6b259c50..fcb7185d 100644 --- a/Classes/SignalSlot/SitemapSignalSlot.php +++ b/Classes/SignalSlot/SitemapSignalSlot.php @@ -27,7 +27,10 @@ namespace SGalinski\SgJobs\SignalSlot; ***************************************************************/ use TYPO3\CMS\Core\Database\ConnectionPool; +use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Frontend\Page\PageRepository; +use TYPO3\Languagevisibility\Service\FrontendServices; /** * Signal functions regarding sg_seo sitemap generation @@ -40,6 +43,7 @@ class SitemapSignalSlot { * * @param array $pageList * @param int $sysLanguageUid + * @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException */ public function beforeSitemapGeneration(array &$pageList, int $sysLanguageUid): void { // find sites where job detail plugin is added @@ -95,26 +99,47 @@ class SitemapSignalSlot { * @param string $pageList * @param int $sysLanguageUid * @return array|null + * @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException + * @throws \Exception */ private function getJobsByPid(string $pageList, int $sysLanguageUid): ?array { $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class) - ->getQueryBuilderForTable('pages'); + ->getQueryBuilderForTable('tx_sgjobs_domain_model_job'); $databaseResource = $queryBuilder->select('*') ->from('tx_sgjobs_domain_model_job') ->where( $queryBuilder->expr()->andX( $queryBuilder->expr()->in('pid', $queryBuilder->createNamedParameter($pageList)), - $queryBuilder->expr()->orX( - $queryBuilder->expr()->eq('sys_language_uid', -1), - $queryBuilder->expr()->eq( - 'sys_language_uid', - $queryBuilder->createNamedParameter($sysLanguageUid, \PDO::PARAM_INT) - ) - ) + $queryBuilder->expr()->in('sys_language_uid', '-1,0') ) ) ->execute(); - return $databaseResource->fetchAll(); + $visibleRows = []; + $rows = $databaseResource->fetchAll(); + $pageRepository = GeneralUtility::makeInstance(PageRepository::class); + $isLanguageVisibilityLoaded = ExtensionManagementUtility::isLoaded('languagevisibility'); + foreach ($rows as $row) { + $table = 'tx_sgjobs_domain_model_job'; + + // get languagevisibility uid that is available (check for the correct uid to fall back to) + if ($isLanguageVisibilityLoaded) { + $element = FrontendServices::getElement($row['uid'], $table); + $languageId = FrontendServices::getOverlayLanguageIdForElement($element, $sysLanguageUid); + if ($languageId === FALSE) { + continue; + } + } else { + $languageId = $sysLanguageUid; + } + + if ($languageId > 0) { + $row = $pageRepository->getRecordOverlay($table, $row, $languageId); + } + + $visibleRows[] = $row; + } + + return $visibleRows; } } -- GitLab