diff --git a/Classes/Domain/DataProvider/LanguagesDataProvider.php b/Classes/Domain/DataProvider/LanguagesDataProvider.php index a7bf0f0f..aec13190 100644 --- a/Classes/Domain/DataProvider/LanguagesDataProvider.php +++ b/Classes/Domain/DataProvider/LanguagesDataProvider.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\DBALException; use Doctrine\DBAL\Driver\Exception as ExceptionDbalDriver; +use In2code\Lux\Domain\Repository\LanguageRepository; use In2code\Lux\Domain\Repository\PagevisitRepository; use In2code\Lux\Utility\LocalizationUtility; use TYPO3\CMS\Core\Utility\GeneralUtility; @@ -47,10 +48,11 @@ public function prepareData(): void protected function getLanguagesFromSystem(): array { $pagevisitRepository = GeneralUtility::makeInstance(PagevisitRepository::class); + $languageRepository = GeneralUtility::makeInstance(LanguageRepository::class); $rows = $pagevisitRepository->getAllLanguages($this->filter); foreach ($rows as &$row) { - $row['label'] = $row['title'] ?: 'Standard'; + $row['label'] = $languageRepository->getLabelToLanguageIdentifier($row['language']); $row['label'] = LocalizationUtility::translateByKey('dataprovider.languages.label', [$row['label']]); } return $rows; diff --git a/Classes/Domain/DataProvider/LanguagesNewsDataProvider.php b/Classes/Domain/DataProvider/LanguagesNewsDataProvider.php index b2328891..770f24aa 100644 --- a/Classes/Domain/DataProvider/LanguagesNewsDataProvider.php +++ b/Classes/Domain/DataProvider/LanguagesNewsDataProvider.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\DBALException; use Doctrine\DBAL\Driver\Exception as ExceptionDbalDriver; +use In2code\Lux\Domain\Repository\LanguageRepository; use In2code\Lux\Domain\Repository\NewsvisitRepository; use In2code\Lux\Utility\LocalizationUtility; use TYPO3\CMS\Core\Utility\GeneralUtility; @@ -47,10 +48,11 @@ public function prepareData(): void protected function getLanguagesFromSystem(): array { $newsvisitRepository = GeneralUtility::makeInstance(NewsvisitRepository::class); + $languageRepository = GeneralUtility::makeInstance(LanguageRepository::class); $rows = $newsvisitRepository->getAllLanguages($this->filter); foreach ($rows as &$row) { - $row['label'] = $row['title'] ?: 'Standard'; + $row['label'] = $languageRepository->getLabelToLanguageIdentifier($row['language']); $row['label'] = LocalizationUtility::translateByKey('dataprovider.languages.label', [$row['label']]); } return $rows; diff --git a/Classes/Domain/Repository/LanguageRepository.php b/Classes/Domain/Repository/LanguageRepository.php new file mode 100644 index 00000000..d7cbbe93 --- /dev/null +++ b/Classes/Domain/Repository/LanguageRepository.php @@ -0,0 +1,41 @@ + 'English', + * 1 => 'Deutsch', + * ] + * + * @var array + */ + protected array $languages = []; + + protected SiteService $siteService; + + public function __construct(SiteService $siteService) + { + $this->siteService = $siteService; + } + + public function getLabelToLanguageIdentifier(int $identifier): string + { + if (array_key_exists($identifier, $this->languages) === false) { + $languages = $this->siteService->getDefaultSite()->getLanguages(); + foreach ($languages as $language) { + if ($language->getLanguageId() === $identifier) { + $this->languages[$identifier] = $language->getTitle(); + } + } + } + return $this->languages[$identifier] ?? 'undefined'; + } +} diff --git a/Classes/Domain/Repository/NewsvisitRepository.php b/Classes/Domain/Repository/NewsvisitRepository.php index 78e84a88..3afee36c 100644 --- a/Classes/Domain/Repository/NewsvisitRepository.php +++ b/Classes/Domain/Repository/NewsvisitRepository.php @@ -178,9 +178,8 @@ public function getAllDomains(FilterDto $filter): array */ public function getAllLanguages(FilterDto $filter): array { - $connection = DatabaseUtility::getConnectionForTable('sys_language'); - $sql = 'SELECT count(distinct nv.uid) as count, nv.language, l.title FROM ' . Newsvisit::TABLE_NAME . ' nv' - . ' left join sys_language l on l.uid = nv.language' + $connection = DatabaseUtility::getConnectionForTable(Newsvisit::TABLE_NAME); + $sql = 'SELECT count(distinct nv.uid) as count, nv.language FROM ' . Newsvisit::TABLE_NAME . ' nv' . ' left join ' . Pagevisit::TABLE_NAME . ' pv on pv.uid = nv.pagevisit' . ' left join ' . Visitor::TABLE_NAME . ' v on v.uid = nv.visitor' . ' left join ' . Categoryscoring::TABLE_NAME . ' cs on v.uid = cs.visitor' @@ -189,7 +188,7 @@ public function getAllLanguages(FilterDto $filter): array . $this->extendWhereClauseWithFilterDomain($filter, 'pv') . $this->extendWhereClauseWithFilterScoring($filter, 'v') . $this->extendWhereClauseWithFilterCategoryScoring($filter, 'cs') - . ' group by nv.language, l.title order by count desc '; + . ' group by nv.language order by count desc'; return $connection->executeQuery($sql)->fetchAllAssociative(); } diff --git a/Classes/Domain/Repository/PagevisitRepository.php b/Classes/Domain/Repository/PagevisitRepository.php index b57b7690..a58683ae 100644 --- a/Classes/Domain/Repository/PagevisitRepository.php +++ b/Classes/Domain/Repository/PagevisitRepository.php @@ -426,16 +426,15 @@ public function getAllDomains(FilterDto $filter): array */ public function getAllLanguages(FilterDto $filter): array { - $connection = DatabaseUtility::getConnectionForTable('sys_language'); - $sql = 'SELECT count(*) as count, pv.language, l.title FROM ' . Pagevisit::TABLE_NAME . ' pv' - . ' left join sys_language l on l.uid = pv.language' + $connection = DatabaseUtility::getConnectionForTable(Pagevisit::TABLE_NAME); + $sql = 'SELECT count(*) as count, pv.language FROM ' . Pagevisit::TABLE_NAME . ' pv' . ' left join ' . Visitor::TABLE_NAME . ' v on v.uid = pv.visitor' . ' left join ' . Categoryscoring::TABLE_NAME . ' cs on v.uid = cs.visitor' . ' where ' . $this->extendWhereClauseWithFilterTime($filter, false, 'pv') . $this->extendWhereClauseWithFilterDomain($filter, 'pv') . $this->extendWhereClauseWithFilterScoring($filter, 'v') . $this->extendWhereClauseWithFilterCategoryScoring($filter, 'cs') - . ' group by pv.language, l.title order by count desc '; + . ' group by pv.language order by count desc '; return $connection->executeQuery($sql)->fetchAllAssociative(); } diff --git a/Classes/Domain/Service/SiteService.php b/Classes/Domain/Service/SiteService.php index 2d9a7ce7..03d982c6 100644 --- a/Classes/Domain/Service/SiteService.php +++ b/Classes/Domain/Service/SiteService.php @@ -31,6 +31,11 @@ public function getLanguageCodeFromLanguageAndDomain(int $languageId, string $do return ''; } + /** + * Return first Site as default site (ordered alphabetical) + * + * @return Site + */ public function getDefaultSite(): Site { $siteFinder = GeneralUtility::makeInstance(SiteFinder::class);