Completed
Push — master ( ae5e03...0447ee )
by Jeroen
10:35 queued 04:37
created

MultiDomainBundle/Helper/DomainConfiguration.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Kunstmaan\MultiDomainBundle\Helper;
4
5
use Doctrine\ORM\EntityManagerInterface;
6
use Kunstmaan\AdminBundle\Helper\AdminRouteHelper;
7
use Kunstmaan\AdminBundle\Helper\DomainConfiguration as BaseDomainConfiguration;
8
use Kunstmaan\NodeBundle\Entity\Node;
9
use Symfony\Component\DependencyInjection\ContainerInterface;
10
11
class DomainConfiguration extends BaseDomainConfiguration
12
{
13
    const OVERRIDE_HOST = '_override_host';
14
    const SWITCH_HOST = '_switch_host';
15
16
    /**
17
     * @var Node
18
     */
19
    protected $rootNode;
20
21
    /**
22
     * @var array
23
     */
24
    protected $hosts;
25
26
    /**
27
     * @var array
28
     */
29
    protected $aliases = array();
30
31
    /**
32
     * @var AdminRouteHelper
33
     */
34
    protected $adminRouteHelper;
35
36
    /** @var EntityManagerInterface */
37
    private $em;
38
39
    /**
40
     * @param ContainerInterface|string $multilanguage
41
     */
42 32
    public function __construct(/*ContainerInterface|RequestStack*/ $requestStack, $multilanguage = null, $defaultLocale = null, $requiredLocales = null, AdminRouteHelper $adminRouteHelper = null, EntityManagerInterface $em = null, array $hosts = null)
43
    {
44 32
        parent::__construct($requestStack, $multilanguage, $defaultLocale, $requiredLocales);
45
46 32
        if ($requestStack instanceof ContainerInterface) {
47
            @trigger_error('Container injection and the usage of the container is deprecated in KunstmaanNodeBundle 5.1 and will be removed in KunstmaanNodeBundle 6.0.', E_USER_DEPRECATED);
48
49
            $this->container = $requestStack;
50
            $this->adminRouteHelper = $this->container->get('kunstmaan_admin.adminroute.helper');
51
            $this->hosts = $this->container->getParameter('kunstmaan_multi_domain.hosts');
52
            $this->em = $this->container->get('doctrine.orm.entity_manager');
53
        } else {
54 32
            $this->adminRouteHelper = $adminRouteHelper;
55 32
            $this->hosts = $hosts;
56 32
            $this->em = $em;
57
        }
58
59 32
        foreach ($this->hosts as $host => $hostInfo) {
60 32
            if (isset($hostInfo['aliases'])) {
61 32
                foreach ($hostInfo['aliases'] as $alias) {
62 32
                    $this->aliases[$alias] = $host;
63
                }
64
            }
65
        }
66 32
    }
67
68
    /**
69
     * @return string
70
     */
71 25
    public function getHost()
72
    {
73 25
        if ($this->hasHostOverride()) {
74 2
            return $this->getHostOverride();
75
        }
76
77 23
        $host = parent::getHost();
78 23
        if (isset($this->aliases[$host])) {
79 1
            $host = $this->aliases[$host];
80
        }
81
82 23
        return $host;
83
    }
84
85
    /**
86
     * @return array
87
     */
88 1
    public function getHosts()
89
    {
90 1
        return array_keys($this->hosts);
91
    }
92
93
    /**
94
     * @return string
95
     */
96 2 View Code Duplication
    public function getDefaultLocale()
97
    {
98 2
        $host = $this->getHost();
99 2
        if (isset($this->hosts[$host]['default_locale'])) {
100 1
            return $this->hosts[$host]['default_locale'];
101
        }
102
103 1
        return parent::getDefaultLocale();
104
    }
105
106
    /**
107
     * @param string|null $host
108
     *
109
     * @return bool
110
     */
111 3 View Code Duplication
    public function isMultiLanguage($host = null)
112
    {
113 3
        $host = $this->getRealHost($host);
114
115 3
        if (isset($this->hosts[$host])) {
116 2
            $hostInfo = $this->hosts[$host];
117
118 2
            return 'multi_lang' === $hostInfo['type'];
119
        }
120
121 1
        return parent::isMultiLanguage();
122
    }
123
124
    /**
125
     * @param string|null $host
126
     *
127
     * @return array
128
     */
129 3 View Code Duplication
    public function getFrontendLocales($host = null)
130
    {
131 3
        $host = $this->getRealHost($host);
132
133 3
        if (isset($this->hosts[$host]['locales'])) {
134 2
            return array_keys($this->hosts[$host]['locales']);
135
        }
136
137 1
        return parent::getBackendLocales();
138
    }
139
140
    /**
141
     * @param string|null $host
142
     *
143
     * @return array
144
     */
145 3 View Code Duplication
    public function getBackendLocales($host = null)
146
    {
147 3
        $host = $this->getRealHost($host);
148
149 3
        if (isset($this->hosts[$host]['locales'])) {
150 2
            return array_values($this->hosts[$host]['locales']);
151
        }
152
153 1
        return parent::getBackendLocales();
154
    }
155
156
    /**
157
     * @return bool
158
     */
159 5
    public function isMultiDomainHost()
160
    {
161 5
        $host = $this->getHost();
162
163 5
        return isset($this->hosts[$host]);
164
    }
165
166
    /**
167
     * Fetch the root node for the current host
168
     *
169
     * @param string|null $host
170
     *
171
     * @return Node|null
172
     */
173 2
    public function getRootNode($host = null)
174
    {
175 2
        if (!$this->isMultiDomainHost()) {
176 1
            return parent::getRootNode();
177
        }
178
179 1
        if (\is_null($this->rootNode)) {
180 1
            $host = $this->getRealHost($host);
181
182 1
            $internalName = $this->hosts[$host]['root'];
183 1
            $nodeRepo = $this->em->getRepository(Node::class);
184 1
            $this->rootNode = $nodeRepo->getNodeByInternalName($internalName);
185
        }
186
187 1
        return $this->rootNode;
188
    }
189
190
    /**
191
     * Return (optional) extra config settings for the current host
192
     */
193 2 View Code Duplication
    public function getExtraData()
194
    {
195 2
        $host = $this->getHost();
196
197 2
        if (!isset($this->hosts[$host]['extra'])) {
198 1
            return parent::getExtraData();
199
        }
200
201 1
        return $this->hosts[$host]['extra'];
202
    }
203
204
    /**
205
     * Return (optional) extra config settings for the locales for the current host
206
     */
207 1 View Code Duplication
    public function getLocalesExtraData()
208
    {
209 1
        $host = $this->getHost();
210
211 1
        if (!isset($this->hosts[$host]['locales_extra'])) {
212 1
            return parent::getLocalesExtraData();
213
        }
214
215 1
        return $this->hosts[$host]['locales_extra'];
216
    }
217
218
    /**
219
     * @return bool
220
     */
221 25 View Code Duplication
    protected function hasHostOverride()
222
    {
223 25
        $request = $this->getMasterRequest();
224
225 25
        return !\is_null($request) &&
226 25
        $this->adminRouteHelper->isAdminRoute($request->getRequestUri()) &&
227 25
        $request->hasPreviousSession() &&
228 25
        $request->getSession()->has(self::OVERRIDE_HOST);
229
    }
230
231
    /**
232
     * @return bool
233
     */
234 2 View Code Duplication
    public function hasHostSwitched()
235
    {
236 2
        $request = $this->getMasterRequest();
237
238 2
        return !\is_null($request) &&
239 2
        $this->adminRouteHelper->isAdminRoute($request->getRequestUri()) &&
240 2
        $request->hasPreviousSession() &&
241 2
        $request->getSession()->has(self::SWITCH_HOST);
242
    }
243
244
    /**
245
     * @return string|null
246
     */
247 3
    protected function getHostOverride()
248
    {
249 3
        if (null !== ($request = $this->getMasterRequest()) && $request->hasPreviousSession()) {
250 2
            return $request->getSession()->get(self::OVERRIDE_HOST);
251
        }
252
253 1
        return null;
254
    }
255
256
    /**
257
     * @return array
258
     */
259 1
    public function getHostSwitched()
260
    {
261 1
        $request = $this->getMasterRequest();
262
263 1
        $host = $this->getHost();
264
265 1
        if ($this->hasHostSwitched()) {
266 1
            $host = $request->getSession()->get(self::SWITCH_HOST);
267
        }
268
269 1
        return $this->hosts[$host];
270
    }
271
272
    /**
273
     * @return array
274
     */
275 1
    public function getFullHostConfig()
276
    {
277 1
        return $this->hosts;
278
    }
279
280
    /**
281
     * @param string|null $host
282
     *
283
     * @return array
284
     */
285 2
    public function getFullHost($host = null)
286
    {
287 2
        $host = $this->getRealHost($host);
288
289 2
        if ($host && isset($this->hosts[$host])) {
0 ignored issues
show
Bug Best Practice introduced by Ruud Denivel
The expression $host of type string|null is loosely compared to true; this is ambiguous if the string can be empty. You might want to explicitly use !== null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For string values, the empty string '' is a special case, in particular the following results might be unexpected:

''   == false // true
''   == null  // true
'ab' == false // false
'ab' == null  // false

// It is often better to use strict comparison
'' === false // false
'' === null  // false
Loading history...
290 1
            return $this->hosts[$host];
291
        }
292
293 1
        return null;
294
    }
295
296
    /**
297
     * @param string|int $id
298
     *
299
     * @return array
300
     */
301 1
    public function getFullHostById($id)
302
    {
303 1
        foreach ($this->hosts as $host => $parameters) {
304 1
            if (!isset($parameters['id']) || $parameters['id'] !== $id) {
305 1
                continue;
306
            }
307
308 1
            return $parameters;
309
        }
310
311 1
        return null;
312
    }
313
314
    /**
315
     * @param string|null $host
316
     *
317
     * @return string
318
     */
319 1
    public function getHostBaseUrl($host = null)
320
    {
321 1
        $config = $this->getFullHost($host);
322
323 1
        return sprintf('%s://%s', $config['protocol'], $config['host']);
324
    }
325
326
    /**
327
     * @param string|null $host
328
     *
329
     * @return string|null
330
     */
331 12
    private function getRealHost($host = null)
332
    {
333 12
        if (!$host) {
334 10
            $host = $this->getHost();
335
        }
336
337 12
        return $host;
338
    }
339
}
340