-
Notifications
You must be signed in to change notification settings - Fork 34
/
DomainResourceRepository.php
107 lines (92 loc) · 3.61 KB
/
DomainResourceRepository.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php
declare(strict_types=1);
namespace IchHabRecht\Filefill\Repository;
/*
* This file is part of the TYPO3 extension filefill.
*
* (c) Nicole Cordes <typo3@cordes.co>
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE file that was distributed with this source code.
*/
use IchHabRecht\Filefill\Resource\Domain\DomainResource;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Database\Query\QueryHelper;
use TYPO3\CMS\Core\Site\SiteFinder;
use TYPO3\CMS\Core\Utility\GeneralUtility;
class DomainResourceRepository
{
/**
* @return DomainResource[]
*/
public function findAll()
{
$sites = [];
if (class_exists('TYPO3\\CMS\\Core\\Site\\SiteFinder')) {
$sites = GeneralUtility::makeInstance(SiteFinder::class)->getAllSites();
}
if (empty($sites)) {
return $this->findAllBySysDomainRecords();
}
return $this->findAllBySiteConfiguration($sites);
}
protected function findAllBySysDomainRecords(): array
{
$domainResources = [];
$orderBy = [];
if (!empty($GLOBALS['TCA']['sys_domain']['ctrl']['sortby'])) {
$orderBy = [[$GLOBALS['TCA']['sys_domain']['ctrl']['sortby'], 'ASC']];
} elseif (!empty($GLOBALS['TCA']['sys_domain']['ctrl']['default_sortby'])) {
$orderBy = QueryHelper::parseOrderBy($GLOBALS['TCA']['sys_domain']['ctrl']['default_sortby']);
}
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_domain');
$expressionBuilder = $queryBuilder->expr();
$queryBuilder->select('domainName')
->from('sys_domain')
->where(
$expressionBuilder->neq(
'domainName',
$queryBuilder->createNamedParameter(GeneralUtility::getIndpEnv('TYPO3_HOST_ONLY'), \PDO::PARAM_STR)
)
);
if (version_compare(TYPO3_version, '9', '<')) {
$queryBuilder->andWhere(
$expressionBuilder->eq(
'redirectTo',
$queryBuilder->createNamedParameter('', \PDO::PARAM_STR)
)
);
}
foreach ($orderBy as $orderByAndDirection) {
$queryBuilder->addOrderBy(...$orderByAndDirection);
}
$result = $queryBuilder->execute();
while ($row = $result->fetch(\PDO::FETCH_ASSOC)) {
if (!isset($domainResources[$row['domainName']])) {
$domainResources[$row['domainName']] = GeneralUtility::makeInstance(DomainResource::class, $row['domainName']);
}
}
return $domainResources;
}
protected function findAllBySiteConfiguration(array $sites): array
{
$domainResources = [];
foreach ($sites as $site) {
$siteConfiguration = $site->getConfiguration();
$url = $siteConfiguration['base'];
if (!isset($domainResources[$url])) {
$domainResources[$url] = GeneralUtility::makeInstance(DomainResource::class, $url);
}
foreach ($siteConfiguration['baseVariants'] ?? [] as $variant) {
if (!isset($domainResources[$variant['base']])) {
$domainResources[$variant['base']] = GeneralUtility::makeInstance(DomainResource::class, $variant['base']);
}
}
}
return $domainResources;
}
}