2 declare(strict_types = 1);
57 $this->cache = GeneralUtility::makeInstance(CacheManager::class)->getCache(
'cache_core');
64 protected function populate(
bool $allowCaching =
true)
66 $data = $this->cache->get($this->cacheIdentifier);
67 if (empty($data) || $allowCaching ===
false) {
69 $groupedDomains = GeneralUtility::makeInstance(LegacyDomainResolver::class)->getGroupedDomainsPerPage();
71 $this->cache->set($this->cacheIdentifier, json_encode([$allLanguages, $groupedDomains, $availablePages]));
74 $data = preg_replace(
'/^<\?php\s*|\s*#$/',
'', $data);
75 list($allLanguages, $groupedDomains, $availablePages) = json_decode($data,
true);
78 $this->pseudoSites = [];
79 foreach ($availablePages as $row) {
80 $rootPageId = (int)$row[
'uid'];
82 'domains' => $groupedDomains[$rootPageId] ?? [],
83 'languages' => $allLanguages
85 unset($groupedDomains[$rootPageId]);
86 $this->pseudoSites[$rootPageId] = $site;
90 foreach ($groupedDomains as $rootPageId => $domainRecords) {
92 'domains' => $domainRecords,
93 'languages' => $allLanguages
95 $this->pseudoSites[(int)$rootPageId] = $site;
99 $this->pseudoSites[0] =
new NullSite($allLanguages);
109 if (empty($this->pseudoSites)) {
135 'title' =>
'Default',
140 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable(
'sys_language');
141 $queryBuilder->getRestrictions()->removeByType(HiddenRestriction::class);
142 $statement = $queryBuilder
144 ->from(
'sys_language')
147 while ($row = $statement->fetch()) {
148 $uid = (int)$row[
'uid'];
149 $languageRecords[$uid] = [
150 'languageId' => $uid,
151 'title' => $row[
'title'],
152 'iso-639-1' => $row[
'language_isocode'] ??
'',
153 'flag' =>
'flags-' . $row[
'flag'],
154 'enabled' => !$row[
'hidden'],
158 return $languageRecords;
174 if (isset($this->pseudoSites[$pageId])) {
175 return $this->pseudoSites[$pageId];
177 if (!is_array($rootLine)) {
179 $rootLine = GeneralUtility::makeInstance(RootlineUtility::class, $pageId)->get();
184 foreach ($rootLine as $pageInRootLine) {
185 if (isset($this->pseudoSites[(
int)$pageInRootLine[
'uid']])) {
186 return $this->pseudoSites[(int)$pageInRootLine[
'uid']];
201 if (empty($this->pseudoSites)) {
204 if (isset($this->pseudoSites[$rootPageId])) {
205 return $this->pseudoSites[$rootPageId];
218 $finder = GeneralUtility::makeInstance(SiteFinder::class);
220 foreach ($sites as $site) {
221 $usedPageIds[] = $site->getRootPageId();
233 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable(
'pages');
234 $queryBuilder->getRestrictions()->removeAll()
235 ->add(GeneralUtility::makeInstance(DeletedRestriction::class))
236 ->add(GeneralUtility::makeInstance(FrontendWorkspaceRestriction::class, 0,
false));
241 $queryBuilder->expr()->eq(
'sys_language_uid', 0),
242 $queryBuilder->expr()->orX(
243 $queryBuilder->expr()->eq(
'pid', 0),
244 $queryBuilder->expr()->eq(
'is_siteroot', 1)
248 ->addOrderBy(
'sorting');
250 if (!empty($usedPageIds)) {
251 $queryBuilder->andWhere($queryBuilder->expr()->notIn(
'uid', $usedPageIds));
253 $availablePages = $queryBuilder->execute()->fetchAll();
254 return is_array($availablePages) ? $availablePages : [];