-
Notifications
You must be signed in to change notification settings - Fork 14
/
AutoMetaDataAttachListener.php
110 lines (92 loc) · 2.94 KB
/
AutoMetaDataAttachListener.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
108
109
110
<?php
namespace SeoBundle\EventListener;
use Pimcore\Http\RequestHelper;
use Pimcore\Http\Request\Resolver\DocumentResolver;
use Pimcore\Http\Request\Resolver\PimcoreContextResolver;
use Pimcore\Model\Document\Page;
use SeoBundle\MetaData\MetaDataProviderInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class AutoMetaDataAttachListener implements EventSubscriberInterface
{
/**
* @var array
*/
protected $configuration;
/**
* @var MetaDataProviderInterface
*/
protected $metaDataProvider;
/**
* @var RequestHelper
*/
protected $requestHelper;
/**
* @var PimcoreContextResolver
*/
protected $pimcoreContextResolver;
/**
* @var DocumentResolver
*/
protected $documentResolverService;
/**
* @param array $configuration
* @param MetaDataProviderInterface $metaDataProvider
* @param RequestHelper $requestHelper
* @param PimcoreContextResolver $contextResolver
* @param DocumentResolver $documentResolverService
*/
public function __construct(
array $configuration,
MetaDataProviderInterface $metaDataProvider,
RequestHelper $requestHelper,
PimcoreContextResolver $contextResolver,
DocumentResolver $documentResolverService
) {
$this->configuration = $configuration;
$this->metaDataProvider = $metaDataProvider;
$this->requestHelper = $requestHelper;
$this->pimcoreContextResolver = $contextResolver;
$this->documentResolverService = $documentResolverService;
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents()
{
return [
KernelEvents::REQUEST => ['onKernelRequest', -255]
];
}
/**
* @param GetResponseEvent $event
*/
public function onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
if (php_sapi_name() === 'cli') {
return;
}
if ($this->configuration['auto_detect_documents'] === false) {
return;
}
if ($event->isMasterRequest() === false) {
return;
}
if ($this->pimcoreContextResolver->matchesPimcoreContext($request, PimcoreContextResolver::CONTEXT_ADMIN)) {
return;
}
if (!$this->pimcoreContextResolver->matchesPimcoreContext($request, PimcoreContextResolver::CONTEXT_DEFAULT)) {
return;
}
if ($this->requestHelper->isFrontendRequestByAdmin($request)) {
return;
}
$document = $this->documentResolverService->getDocument($request);
if (!$document instanceof Page) {
return;
}
$this->metaDataProvider->updateSeoElement($document, $request->getLocale());
}
}