From ea0dffc700a4e9f6dfd471eac83a499a0761fa8d Mon Sep 17 00:00:00 2001 From: Kevin Ditscheid <kevin.ditscheid@sgalinski.de> Date: Thu, 15 Nov 2018 20:26:56 +0100 Subject: [PATCH] [TASK] Respect the sys_language_uid when fetching jobs --- Classes/SignalSlot/SitemapSignalSlot.php | 39 +++++++++++++++++++----- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/Classes/SignalSlot/SitemapSignalSlot.php b/Classes/SignalSlot/SitemapSignalSlot.php index a6ce4eb1..8b2cd4b3 100644 --- a/Classes/SignalSlot/SitemapSignalSlot.php +++ b/Classes/SignalSlot/SitemapSignalSlot.php @@ -48,9 +48,10 @@ class SitemapSignalSlot { * Before the sitemap is generated * * @param array $pageList + * @param int $sysLanguageUid * @throws \TYPO3\CMS\Core\Error\Http\ServiceUnavailableException */ - public function beforeSitemapGeneration(array &$pageList) { + public function beforeSitemapGeneration(array &$pageList, int $sysLanguageUid) { $objectManager = GeneralUtility::makeInstance(ObjectManager::class); $request = $objectManager->get(\TYPO3\CMS\Extbase\Mvc\Web\Request::class); $request->setRequestUri(GeneralUtility::getIndpEnv('TYPO3_REQUEST_URL')); @@ -65,13 +66,24 @@ class SitemapSignalSlot { $this->uriBuilder->injectConfigurationManager($configurationManager); // find sites where job detail plugin is added - $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages'); + $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class) + ->getQueryBuilderForTable('pages'); $databaseResource = $queryBuilder->select('pid', 'pages') ->from('tt_content') ->where( $queryBuilder->expr()->andX( $queryBuilder->expr()->eq('CType', $queryBuilder->createNamedParameter('list')), - $queryBuilder->expr()->eq('list_type', $queryBuilder->createNamedParameter(self::PLUGIN_NAME)) + $queryBuilder->expr()->eq( + 'list_type', + $queryBuilder->createNamedParameter(self::PLUGIN_NAME) + ), + $queryBuilder->expr()->orX( + $queryBuilder->expr()->eq('sys_language_uid', -1), + $queryBuilder->expr()->eq( + 'sys_language_uid', + $queryBuilder->createNamedParameter($sysLanguageUid, \PDO::PARAM_INT) + ) + ) ) ) ->execute(); @@ -79,7 +91,7 @@ class SitemapSignalSlot { $rows = $databaseResource->fetchAll(); foreach ($rows as $row) { - $jobs = $this->getJobsByPid($row['pages']); + $jobs = $this->getJobsByPid($row['pages'], $sysLanguageUid); foreach ($jobs as $job) { $url = $this->uriBuilder->reset()->setTargetPageUid($row['pid'])->setArguments( @@ -98,13 +110,26 @@ class SitemapSignalSlot { * Get all jobs stored on specific page ids * * @param string $pageList + * @param int $sysLanguageUid * @return array|null */ - private function getJobsByPid($pageList) { - $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages'); + private function getJobsByPid(string $pageList, int $sysLanguageUid) { + $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class) + ->getQueryBuilderForTable('pages'); $databaseResource = $queryBuilder->select('*') ->from('tx_sgjobs_domain_model_job') - ->where($queryBuilder->expr()->in('pid', $queryBuilder->createNamedParameter($pageList))) + ->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) + ) + ) + ) + ) ->execute(); return $databaseResource->fetchAll(); -- GitLab