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
|
|||
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 |
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.