Skip to content
Snippets Groups Projects
Commit 837dd07c authored by Stefan Galinski's avatar Stefan Galinski :video_game:
Browse files

[BUGFIX] Language Visibility not respected inside the sitemap generation

parent 77d004e4
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment