Completed
Push — ezp-30646 ( a44352...64df2d )
by
unknown
15:12
created

ContentEventSubscriber::onUpdateContentMetadata()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11

Duplication

Lines 11
Ratio 100 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 1
dl 11
loc 11
rs 9.9
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
5
 * @license For full copyright and license information view LICENSE file distributed with this source code.
6
 */
7
namespace eZ\Publish\Core\Search\Common\EventSubscriber;
8
9
use eZ\Publish\API\Repository\Events\Content\CopyContentEvent;
10
use eZ\Publish\API\Repository\Events\Content\DeleteContentEvent;
11
use eZ\Publish\API\Repository\Events\Content\DeleteTranslationEvent;
12
use eZ\Publish\API\Repository\Events\Content\HideContentEvent;
13
use eZ\Publish\API\Repository\Events\Content\PublishVersionEvent;
14
use eZ\Publish\API\Repository\Events\Content\RevealContentEvent;
15
use eZ\Publish\API\Repository\Events\Content\UpdateContentMetadataEvent;
16
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
17
18
class ContentEventSubscriber extends AbstractSearchEventSubscriber implements EventSubscriberInterface
19
{
20
    public static function getSubscribedEvents(): array
21
    {
22
        return [
23
            CopyContentEvent::class => 'onCopyContent',
24
            DeleteContentEvent::class => 'onDeleteContent',
25
            DeleteTranslationEvent::class => 'onDeleteTranslation',
26
            HideContentEvent::class => 'onHideContent',
27
            PublishVersionEvent::class => 'onPublishVersion',
28
            RevealContentEvent::class => 'onRevealContent',
29
            UpdateContentMetadataEvent::class => 'onUpdateContentMetadata',
30
        ];
31
    }
32
33
    public function onCopyContent(CopyContentEvent $event)
34
    {
35
        $this->searchHandler->indexContent(
36
            $this->persistenceHandler->contentHandler()->load(
37
                $event->getContent()->getVersionInfo()->getContentInfo()->id,
38
                $event->getContent()->getVersionInfo()->versionNo
39
            )
40
        );
41
42
        $locations = $this->persistenceHandler->locationHandler()->loadLocationsByContent(
43
            $event->getContent()->getVersionInfo()->getContentInfo()->id
44
        );
45
46
        foreach ($locations as $location) {
47
            $this->searchHandler->indexLocation($location);
48
        }
49
    }
50
51
    public function onDeleteContent(DeleteContentEvent $event)
52
    {
53
        $this->searchHandler->deleteContent($event->getContentInfo()->id);
54
55
        foreach ($event->getLocations() as $locationId) {
56
            $this->searchHandler->deleteLocation($locationId, $event->getContentInfo()->id);
57
        }
58
    }
59
60 View Code Duplication
    public function onDeleteTranslation(DeleteTranslationEvent $event)
61
    {
62
        $contentInfo = $this->persistenceHandler->contentHandler()->loadContentInfo(
63
            $event->getContentInfo()->id
64
        );
65
66
        if (!$contentInfo->isPublished) {
67
            return;
68
        }
69
70
        $this->searchHandler->indexContent(
71
            $this->persistenceHandler->contentHandler()->load(
72
                $contentInfo->id,
73
                $contentInfo->currentVersionNo
74
            )
75
        );
76
77
        $locations = $this->persistenceHandler->locationHandler()->loadLocationsByContent(
78
            $contentInfo->id
79
        );
80
81
        foreach ($locations as $location) {
82
            $this->searchHandler->indexLocation($location);
83
        }
84
    }
85
86 View Code Duplication
    public function onHideContent(HideContentEvent $event)
87
    {
88
        $locations = $this->persistenceHandler->locationHandler()->loadLocationsByContent($event->getContentInfo()->id);
89
        foreach ($locations as $location) {
90
            $this->indexSubtree($location->id);
91
        }
92
    }
93
94
    public function onPublishVersion(PublishVersionEvent $event)
95
    {
96
        $this->searchHandler->indexContent(
97
            $this->persistenceHandler->contentHandler()->load($event->getContent()->id, $event->getContent()->getVersionInfo()->versionNo)
98
        );
99
100
        $locations = $this->persistenceHandler->locationHandler()->loadLocationsByContent($event->getContent()->id);
101
        foreach ($locations as $location) {
102
            $this->searchHandler->indexLocation($location);
103
        }
104
    }
105
106 View Code Duplication
    public function onRevealContent(RevealContentEvent $event)
107
    {
108
        $locations = $this->persistenceHandler->locationHandler()->loadLocationsByContent($event->getContentInfo()->id);
109
        foreach ($locations as $location) {
110
            $this->indexSubtree($location->id);
111
        }
112
    }
113
114 View Code Duplication
    public function onUpdateContentMetadata(UpdateContentMetadataEvent $event)
115
    {
116
        $contentInfo = $this->persistenceHandler->contentHandler()->loadContentInfo($event->getContent()->id);
117
        if (!$contentInfo->isPublished) {
118
            return;
119
        }
120
        $this->searchHandler->indexContent(
121
            $this->persistenceHandler->contentHandler()->load($contentInfo->id, $contentInfo->currentVersionNo)
122
        );
123
        $this->searchHandler->indexLocation($this->persistenceHandler->locationHandler()->load($contentInfo->mainLocationId));
124
    }
125
}
126