Passed
Push — master ( 60a4ae...29fcc8 )
by
unknown
46:42 queued 14:26
created

handleCmsPageUpdatedMessages()   A

Complexity

Conditions 6
Paths 5

Size

Total Lines 20
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 12
c 1
b 0
f 0
nc 5
nop 1
dl 0
loc 20
rs 9.2222
1
<?php
2
3
/**
4
 * Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
declare(strict_types=1);
9
10
namespace Spryker\Zed\Cms\Business\MessageBroker;
11
12
use Generated\Shared\Transfer\CmsPageMessageBrokerRequestTransfer;
13
use Generated\Shared\Transfer\CmsPagePublishedTransfer;
14
use Generated\Shared\Transfer\CmsPageTransfer;
15
use Generated\Shared\Transfer\CmsPageUnpublishedTransfer;
16
use Generated\Shared\Transfer\CmsVersionTransfer;
17
use Generated\Shared\Transfer\LocaleTransfer;
18
use Generated\Shared\Transfer\MessageAttributesTransfer;
19
use Spryker\Zed\Cms\Business\Extractor\DataExtractorInterface;
20
use Spryker\Zed\Cms\Business\Page\CmsPageReaderInterface;
21
use Spryker\Zed\Cms\Business\Page\LocaleCmsPageDataExpanderInterface;
22
use Spryker\Zed\Cms\Business\Version\VersionFinderInterface;
23
use Spryker\Zed\Cms\CmsConfig;
24
use Spryker\Zed\Cms\Dependency\Facade\CmsToMessageBrokerFacadeInterface;
25
use Spryker\Zed\Cms\Persistence\CmsRepositoryInterface;
26
27
class CmsPageMessageBrokerPublisher implements CmsPageMessageBrokerPublisherInterface
28
{
29
    /**
30
     * @param \Spryker\Zed\Cms\Dependency\Facade\CmsToMessageBrokerFacadeInterface $messageBrokerFacade
31
     * @param \Spryker\Zed\Cms\Business\Page\CmsPageReaderInterface $cmsPageReader
32
     * @param \Spryker\Zed\Cms\Persistence\CmsRepositoryInterface $cmsRepository
33
     * @param \Spryker\Zed\Cms\Business\Version\VersionFinderInterface $versionFinder
34
     * @param \Spryker\Zed\Cms\Business\Extractor\DataExtractorInterface $dataExtractor
35
     * @param \Spryker\Zed\Cms\Business\Page\LocaleCmsPageDataExpanderInterface $localeCmsPageDataExpander
36
     * @param \Spryker\Zed\Cms\CmsConfig $cmsConfig
37
     */
38
    public function __construct(
39
        protected CmsToMessageBrokerFacadeInterface $messageBrokerFacade,
40
        protected CmsPageReaderInterface $cmsPageReader,
41
        protected CmsRepositoryInterface $cmsRepository,
42
        protected VersionFinderInterface $versionFinder,
43
        protected DataExtractorInterface $dataExtractor,
44
        protected LocaleCmsPageDataExpanderInterface $localeCmsPageDataExpander,
45
        protected CmsConfig $cmsConfig
46
    ) {
47
    }
48
49
    /**
50
     * @param \Generated\Shared\Transfer\CmsPageMessageBrokerRequestTransfer $cmsPageMessageBrokerRequestTransfer
51
     *
52
     * @return void
53
     */
54
    public function sendCmsPagesToMessageBroker(CmsPageMessageBrokerRequestTransfer $cmsPageMessageBrokerRequestTransfer): void
55
    {
56
        $cmsPageIds = $cmsPageMessageBrokerRequestTransfer->getCmsPageIds();
57
        $cmsVersionIds = $cmsPageMessageBrokerRequestTransfer->getCmsVersionIds();
58
59
        if ($cmsVersionIds) {
60
            $this->handleCmsPagePublishedMessages($cmsVersionIds);
61
62
            return;
63
        }
64
65
        $this->handleCmsPageUpdatedMessages($cmsPageIds);
66
    }
67
68
    /**
69
     * @param array<int> $cmsVersionIds
70
     *
71
     * @return void
72
     */
73
    protected function handleCmsPagePublishedMessages(array $cmsVersionIds): void
74
    {
75
        $cmsVersionTransfers = $this->versionFinder->findCmsVersionsByIds($cmsVersionIds);
76
        if ($cmsVersionTransfers->count() === 0) {
77
            return;
78
        }
79
80
        foreach ($cmsVersionTransfers as $cmsVersionTransfer) {
81
            $cmsPageTransfer = $this->getCmsPageTransfer($cmsVersionTransfer->getFkCmsPage());
82
83
            if (!$cmsPageTransfer) {
84
                continue;
85
            }
86
87
            $cmsPagePublishedTransfer = $this->createCmsPagePublishedTransfer($cmsPageTransfer, $cmsVersionTransfer);
88
            $this->messageBrokerFacade->sendMessage($cmsPagePublishedTransfer);
89
        }
90
    }
91
92
    /**
93
     * @param array<int> $cmsPageIds
94
     *
95
     * @return void
96
     */
97
    protected function handleCmsPageUpdatedMessages(array $cmsPageIds): void
98
    {
99
        if (!$cmsPageIds) {
100
            return;
101
        }
102
103
        foreach ($cmsPageIds as $cmsPageId) {
104
            $cmsPageTransfer = $this->getCmsPageTransfer($cmsPageId);
105
            if ($cmsPageTransfer === null) {
106
                continue;
107
            }
108
109
            if ($cmsPageTransfer->getIsActive() && $cmsPageTransfer->getIsSearchable()) {
110
                $cmsVersionTransfer = $this->versionFinder->findLatestCmsVersionByIdCmsPage($cmsPageId);
111
                $cmsPageUpdatedTransfer = $this->createCmsPagePublishedTransfer($cmsPageTransfer, $cmsVersionTransfer);
0 ignored issues
show
Bug introduced by
It seems like $cmsVersionTransfer can also be of type null; however, parameter $cmsVersionTransfer of Spryker\Zed\Cms\Business...PagePublishedTransfer() does only seem to accept Generated\Shared\Transfer\CmsVersionTransfer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

111
                $cmsPageUpdatedTransfer = $this->createCmsPagePublishedTransfer($cmsPageTransfer, /** @scrutinizer ignore-type */ $cmsVersionTransfer);
Loading history...
112
            } else {
113
                $cmsPageUpdatedTransfer = $this->createCmsPageUnpublishedTransfer($cmsPageId);
114
            }
115
116
            $this->messageBrokerFacade->sendMessage($cmsPageUpdatedTransfer);
117
        }
118
    }
119
120
    /**
121
     * @param \Generated\Shared\Transfer\CmsPageTransfer $cmsPageTransfer
122
     * @param \Generated\Shared\Transfer\CmsVersionTransfer $cmsVersionTransfer
123
     *
124
     * @return \Generated\Shared\Transfer\CmsPagePublishedTransfer
125
     */
126
    protected function createCmsPagePublishedTransfer(CmsPageTransfer $cmsPageTransfer, CmsVersionTransfer $cmsVersionTransfer): CmsPagePublishedTransfer
127
    {
128
        $cmsPagePublishedTransfer = new CmsPagePublishedTransfer();
129
        $cmsPagePublishedTransfer->setId($cmsPageTransfer->getFkPage());
130
        $cmsPagePublishedTransfer->setCmsPage($cmsPageTransfer);
131
        $cmsPagePublishedTransfer->setCreatedAt($this->getCmsPageCreatedAt($cmsPageTransfer->getFkPage()));
132
        $cmsPagePublishedTransfer->setUpdatedAt($cmsVersionTransfer->getCreatedAt());
133
        $cmsPagePublishedTransfer->setFlattenedLocaleCmsPageDatum($this->getFlattenedLocaleCmsPageDatum($cmsPageTransfer));
134
        $cmsPagePublishedTransfer->setMessageAttributes($this->createMessageAttributesTransfer());
135
136
        return $cmsPagePublishedTransfer;
137
    }
138
139
    /**
140
     * @return \Generated\Shared\Transfer\MessageAttributesTransfer
141
     */
142
    protected function createMessageAttributesTransfer(): MessageAttributesTransfer
143
    {
144
        $tenantIdentifier = $this->cmsConfig->getTenantIdentifier();
145
        $messageAttributesTransfer = new MessageAttributesTransfer();
146
        $messageAttributesTransfer->setStoreReference($tenantIdentifier);
147
        $messageAttributesTransfer->setTenantIdentifier($tenantIdentifier);
148
149
        return $messageAttributesTransfer;
150
    }
151
152
    /**
153
     * @param int $idCmsPage
154
     *
155
     * @return \Generated\Shared\Transfer\CmsPageUnpublishedTransfer
156
     */
157
    protected function createCmsPageUnpublishedTransfer(int $idCmsPage): CmsPageUnpublishedTransfer
158
    {
159
        $cmsPageUnpublishedTransfer = new CmsPageUnpublishedTransfer();
160
        $cmsPageUnpublishedTransfer->setId($idCmsPage);
161
        $cmsPageUnpublishedTransfer->setMessageAttributes($this->createMessageAttributesTransfer());
162
163
        return $cmsPageUnpublishedTransfer;
164
    }
165
166
    /**
167
     * @param int $idCmsPage
168
     *
169
     * @return \Generated\Shared\Transfer\CmsPageTransfer|null
170
     */
171
    protected function getCmsPageTransfer(int $idCmsPage): ?CmsPageTransfer
172
    {
173
        return $this->cmsPageReader->findCmsPageById($idCmsPage);
174
    }
175
176
    /**
177
     * @param \Generated\Shared\Transfer\CmsPageTransfer $cmsPageTransfer
178
     *
179
     * @return array<string, array>
180
     */
181
    protected function getFlattenedLocaleCmsPageDatum(CmsPageTransfer $cmsPageTransfer): array
182
    {
183
        $localeCmsPageData = [];
184
        $cmsVersionDataTransfer = $this->versionFinder
185
            ->getCmsVersionData($cmsPageTransfer->getFkPage());
186
187
        foreach ($cmsPageTransfer->getPageAttributes() as $pageAttribute) {
188
            $localeTransfer = (new LocaleTransfer())->setLocaleName($pageAttribute->getLocaleName())->setIdLocale($pageAttribute->getFkLocale());
189
190
            $localeCmsPageDataTransfer = $this->dataExtractor->extractLocaleCmsPageDataTransfer($cmsVersionDataTransfer, $localeTransfer);
191
            $flattenedLocaleCmsPageData = $this->localeCmsPageDataExpander->calculateFlattenedLocaleCmsPageData($localeCmsPageDataTransfer, $localeTransfer);
192
193
            $localeCmsPageData[$pageAttribute->getLocaleName()] = $flattenedLocaleCmsPageData;
194
        }
195
196
        return $localeCmsPageData;
197
    }
198
199
    /**
200
     * @param int $idCmsPage
201
     *
202
     * @return string|null
203
     */
204
    protected function getCmsPageCreatedAt(int $idCmsPage): ?string
205
    {
206
        $firstCmsVersionTransfer = $this->versionFinder->findCmsVersionByIdCmsPageAndVersion($idCmsPage, 1);
207
        if ($firstCmsVersionTransfer === null) {
208
            return null;
209
        }
210
211
        return $firstCmsVersionTransfer->getCreatedAt();
212
    }
213
}
214