Issues (3641)

Zed/CmsBlock/Business/Model/CmsBlockWriter.php (1 issue)

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
namespace Spryker\Zed\CmsBlock\Business\Model;
9
10
use Generated\Shared\Transfer\CmsBlockTransfer;
11
use Orm\Zed\CmsBlock\Persistence\SpyCmsBlock;
12
use Spryker\Shared\CmsBlock\CmsBlockConfig;
13
use Spryker\Zed\CmsBlock\Business\Exception\CmsBlockNotFoundException;
14
use Spryker\Zed\CmsBlock\Business\KeyProvider\CmsBlockKeyProviderInterface;
15
use Spryker\Zed\CmsBlock\Dependency\Facade\CmsBlockToTouchInterface;
16
use Spryker\Zed\CmsBlock\Persistence\CmsBlockQueryContainerInterface;
17
use Spryker\Zed\PropelOrm\Business\Transaction\DatabaseTransactionHandlerTrait;
18
19
class CmsBlockWriter implements CmsBlockWriterInterface
20
{
21
    use DatabaseTransactionHandlerTrait;
0 ignored issues
show
Deprecated Code introduced by
The trait Spryker\Zed\PropelOrm\Bu...TransactionHandlerTrait has been deprecated: Use {@link \Spryker\Zed\Kernel\Persistence\EntityManager\TransactionTrait} instead. ( Ignorable by Annotation )

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

21
    use /** @scrutinizer ignore-deprecated */ DatabaseTransactionHandlerTrait;

This trait has been deprecated. The supplier of the trait has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the trait will be removed and what other trait to use instead.

Loading history...
22
23
    /**
24
     * @var \Spryker\Zed\CmsBlock\Persistence\CmsBlockQueryContainerInterface
25
     */
26
    protected $cmsBlockQueryContainer;
27
28
    /**
29
     * @var \Spryker\Zed\CmsBlock\Business\Model\CmsBlockMapperInterface
30
     */
31
    protected $cmsBlockMapper;
32
33
    /**
34
     * @var \Spryker\Zed\CmsBlock\Business\Model\CmsBlockGlossaryWriterInterface
35
     */
36
    protected $cmsBlockGlossaryWriter;
37
38
    /**
39
     * @var \Spryker\Zed\CmsBlock\Business\Model\CmsBlockStoreRelationWriterInterface
40
     */
41
    protected $cmsBlockStoreRelationWriter;
42
43
    /**
44
     * @var \Spryker\Zed\CmsBlock\Business\Model\CmsBlockTemplateManagerInterface
45
     */
46
    protected $templateManager;
47
48
    /**
49
     * @var array<\Spryker\Zed\CmsBlockExtension\Dependency\Plugin\CmsBlockUpdatePluginInterface>
50
     */
51
    protected $cmsBlockUpdatePlugins;
52
53
    /**
54
     * @var \Spryker\Zed\CmsBlock\Business\KeyProvider\CmsBlockKeyProviderInterface
55
     */
56
    protected $cmsBlockKeyProvider;
57
58
    /**
59
     * @param \Spryker\Zed\CmsBlock\Persistence\CmsBlockQueryContainerInterface $cmsBlockQueryContainer
60
     * @param \Spryker\Zed\CmsBlock\Business\Model\CmsBlockMapperInterface $cmsBlockMapper
61
     * @param \Spryker\Zed\CmsBlock\Business\Model\CmsBlockGlossaryWriterInterface $cmsBlockGlossaryWriter
62
     * @param \Spryker\Zed\CmsBlock\Business\Model\CmsBlockStoreRelationWriterInterface $cmsBlockStoreRelationWriter
63
     * @param \Spryker\Zed\CmsBlock\Dependency\Facade\CmsBlockToTouchInterface $touchFacade
64
     * @param \Spryker\Zed\CmsBlock\Business\Model\CmsBlockTemplateManagerInterface $cmsBlockTemplateManager
65
     * @param array<\Spryker\Zed\CmsBlockExtension\Dependency\Plugin\CmsBlockUpdatePluginInterface> $updatePlugins
66
     * @param \Spryker\Zed\CmsBlock\Business\KeyProvider\CmsBlockKeyProviderInterface $cmsBlockKeyProvider
67
     */
68
    public function __construct(
69
        CmsBlockQueryContainerInterface $cmsBlockQueryContainer,
70
        CmsBlockMapperInterface $cmsBlockMapper,
71
        CmsBlockGlossaryWriterInterface $cmsBlockGlossaryWriter,
72
        CmsBlockStoreRelationWriterInterface $cmsBlockStoreRelationWriter,
73
        CmsBlockToTouchInterface $touchFacade,
74
        CmsBlockTemplateManagerInterface $cmsBlockTemplateManager,
75
        array $updatePlugins,
76
        CmsBlockKeyProviderInterface $cmsBlockKeyProvider
77
    ) {
78
        $this->cmsBlockQueryContainer = $cmsBlockQueryContainer;
79
        $this->cmsBlockMapper = $cmsBlockMapper;
80
        $this->cmsBlockGlossaryWriter = $cmsBlockGlossaryWriter;
81
        $this->cmsBlockStoreRelationWriter = $cmsBlockStoreRelationWriter;
82
        $this->touchFacade = $touchFacade;
83
        $this->templateManager = $cmsBlockTemplateManager;
84
        $this->cmsBlockUpdatePlugins = $updatePlugins;
85
        $this->cmsBlockKeyProvider = $cmsBlockKeyProvider;
86
    }
87
88
    /**
89
     * @var \Spryker\Zed\CmsBlock\Dependency\Facade\CmsBlockToTouchInterface
90
     */
91
    protected $touchFacade;
92
93
    /**
94
     * @param int $idCmsBlock
95
     *
96
     * @return void
97
     */
98
    public function activateById(int $idCmsBlock): void
99
    {
100
        $this->handleDatabaseTransaction(function () use ($idCmsBlock) {
101
            $this->updateIsActiveByIdTransaction($idCmsBlock, true);
102
            $this->touchFacade->touchActive(CmsBlockConfig::RESOURCE_TYPE_CMS_BLOCK, $idCmsBlock);
103
        });
104
    }
105
106
    /**
107
     * @param int $idCmsBlock
108
     *
109
     * @return void
110
     */
111
    public function deactivateById(int $idCmsBlock): void
112
    {
113
        $this->handleDatabaseTransaction(function () use ($idCmsBlock) {
114
            $this->updateIsActiveByIdTransaction($idCmsBlock, false);
115
            $this->touchFacade->touchDeleted(CmsBlockConfig::RESOURCE_TYPE_CMS_BLOCK, $idCmsBlock);
116
        });
117
    }
118
119
    /**
120
     * @param \Generated\Shared\Transfer\CmsBlockTransfer $cmsBlockTransfer
121
     *
122
     * @return \Generated\Shared\Transfer\CmsBlockTransfer
123
     */
124
    public function updateCmsBlock(CmsBlockTransfer $cmsBlockTransfer): CmsBlockTransfer
125
    {
126
        $cmsBlockTransfer->requireIdCmsBlock();
127
128
        $spyCmsBlock = $this->getCmsBlockById($cmsBlockTransfer->getIdCmsBlock());
129
130
        if ($spyCmsBlock->getFkTemplate() !== $cmsBlockTransfer->getFkTemplate()) {
131
            $this->checkTemplateFileExists($cmsBlockTransfer->getFkTemplate());
132
        }
133
134
        if (!$cmsBlockTransfer->getKey()) {
135
            $cmsBlockTransfer->setKey(
136
                $this->cmsBlockKeyProvider->generateKeyByIdCmsBlock($cmsBlockTransfer->getIdCmsBlock()),
137
            );
138
        }
139
140
        $this->handleDatabaseTransaction(function () use ($cmsBlockTransfer, $spyCmsBlock) {
141
            $this->updateCmsBlockTransaction($cmsBlockTransfer, $spyCmsBlock);
142
            $this->updateCmsBlockPluginsTransaction($cmsBlockTransfer);
143
        });
144
145
        return $cmsBlockTransfer;
146
    }
147
148
    /**
149
     * @param \Generated\Shared\Transfer\CmsBlockTransfer $cmsBlockTransfer
150
     *
151
     * @return \Generated\Shared\Transfer\CmsBlockTransfer
152
     */
153
    public function createCmsBlock(CmsBlockTransfer $cmsBlockTransfer): CmsBlockTransfer
154
    {
155
        $cmsBlockTransfer->requireFkTemplate();
156
157
        if (!$cmsBlockTransfer->getKey()) {
158
            $cmsBlockTransfer->setKey($this->cmsBlockKeyProvider->generateKey());
159
        }
160
161
        $this->handleDatabaseTransaction(function () use ($cmsBlockTransfer) {
162
            $this->createCmsBlockTransaction($cmsBlockTransfer);
163
            $this->updateCmsBlockPluginsTransaction($cmsBlockTransfer);
164
        });
165
166
        return $cmsBlockTransfer;
167
    }
168
169
    /**
170
     * @param int $idCmsBlock
171
     *
172
     * @throws \Spryker\Zed\CmsBlock\Business\Exception\CmsBlockNotFoundException
173
     *
174
     * @return \Orm\Zed\CmsBlock\Persistence\SpyCmsBlock
175
     */
176
    protected function getCmsBlockById(int $idCmsBlock): SpyCmsBlock
177
    {
178
        $spyCmsBlock = $this->cmsBlockQueryContainer
179
            ->queryCmsBlockById($idCmsBlock)
180
            ->findOne();
181
182
        if (!$spyCmsBlock) {
183
            throw new CmsBlockNotFoundException(
184
                sprintf('CMS Block with id "%d" was not found', $idCmsBlock),
185
            );
186
        }
187
188
        return $spyCmsBlock;
189
    }
190
191
    /**
192
     * @param int $idCmsBlockTemplate
193
     *
194
     * @return void
195
     */
196
    protected function checkTemplateFileExists(int $idCmsBlockTemplate): void
197
    {
198
        $templateTransfer = $this->templateManager
199
            ->getTemplateById($idCmsBlockTemplate);
200
201
        $this->templateManager
202
            ->checkTemplateFileExists($templateTransfer->getTemplatePath());
203
    }
204
205
    /**
206
     * @param \Generated\Shared\Transfer\CmsBlockTransfer $cmsBlockTransfer
207
     * @param \Orm\Zed\CmsBlock\Persistence\SpyCmsBlock $spyCmsBlock
208
     *
209
     * @return void
210
     */
211
    protected function updateCmsBlockTransaction(CmsBlockTransfer $cmsBlockTransfer, SpyCmsBlock $spyCmsBlock): void
212
    {
213
        $spyCmsBlock = $this->cmsBlockMapper->mapCmsBlockTransferToEntity($cmsBlockTransfer, $spyCmsBlock);
214
        $spyCmsBlock->save();
215
216
        $this->persistStoreRelation($cmsBlockTransfer, $spyCmsBlock->getIdCmsBlock());
217
218
        if ($spyCmsBlock->getIsActive()) {
219
            $this->touchFacade->touchActive(CmsBlockConfig::RESOURCE_TYPE_CMS_BLOCK, $spyCmsBlock->getIdCmsBlock());
220
        }
221
    }
222
223
    /**
224
     * @param \Generated\Shared\Transfer\CmsBlockTransfer $cmsBlockTransfer
225
     * @param int $idCmsBlock
226
     *
227
     * @return void
228
     */
229
    protected function persistStoreRelation(CmsBlockTransfer $cmsBlockTransfer, int $idCmsBlock): void
230
    {
231
        if ($cmsBlockTransfer->getStoreRelation() === null) {
232
            return;
233
        }
234
235
        $cmsBlockTransfer->getStoreRelation()->setIdEntity($idCmsBlock);
236
        $this->cmsBlockStoreRelationWriter->update($cmsBlockTransfer->getStoreRelation());
237
    }
238
239
    /**
240
     * @param \Generated\Shared\Transfer\CmsBlockTransfer $cmsBlockTransfer
241
     *
242
     * @return void
243
     */
244
    protected function updateCmsBlockPluginsTransaction(CmsBlockTransfer $cmsBlockTransfer): void
245
    {
246
        foreach ($this->cmsBlockUpdatePlugins as $updatePlugin) {
247
            $updatePlugin->handleUpdate($cmsBlockTransfer);
248
        }
249
    }
250
251
    /**
252
     * @param \Generated\Shared\Transfer\CmsBlockTransfer $cmsBlockTransfer
253
     *
254
     * @return void
255
     */
256
    protected function createCmsBlockTransaction(CmsBlockTransfer $cmsBlockTransfer): void
257
    {
258
        $spyCmsBlock = new SpyCmsBlock();
259
        $spyCmsBlock = $this->cmsBlockMapper->mapCmsBlockTransferToEntity($cmsBlockTransfer, $spyCmsBlock);
260
        $spyCmsBlock->save();
261
262
        $this->persistStoreRelation($cmsBlockTransfer, $spyCmsBlock->getIdCmsBlock());
263
264
        if ($spyCmsBlock->getIsActive()) {
265
            $this->touchFacade->touchActive(CmsBlockConfig::RESOURCE_TYPE_CMS_BLOCK, $spyCmsBlock->getIdCmsBlock());
266
        }
267
268
        $cmsBlockTransfer->setIdCmsBlock($spyCmsBlock->getIdCmsBlock());
269
    }
270
271
    /**
272
     * @param int $idCmsBlock
273
     * @param bool $isActive
274
     *
275
     * @return void
276
     */
277
    protected function updateIsActiveByIdTransaction(int $idCmsBlock, bool $isActive): void
278
    {
279
        $spyCmsBlock = $this->getCmsBlockById($idCmsBlock);
280
        $spyCmsBlock->setIsActive($isActive);
281
        $spyCmsBlock->save();
282
    }
283
}
284