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

CmsPageEventExporter   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 16
c 1
b 0
f 0
dl 0
loc 60
rs 10
wmc 7

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getCmsPageIdChunks() 0 5 2
A __construct() 0 5 1
A export() 0 15 3
A createEventTransfers() 0 5 1
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\Cms\Business\Exporter;
9
10
use Generated\Shared\Transfer\EventEntityTransfer;
11
use Generator;
12
use Spryker\Shared\Log\LoggerTrait;
13
use Spryker\Zed\Cms\CmsConfig;
14
use Spryker\Zed\Cms\Dependency\CmsEvents;
15
use Spryker\Zed\Cms\Dependency\Facade\CmsToEventFacadeInterface;
16
use Spryker\Zed\Cms\Persistence\CmsRepositoryInterface;
17
18
class CmsPageEventExporter implements CmsExporterInterface
19
{
20
    use LoggerTrait;
21
22
    /**
23
     * @param \Spryker\Zed\Cms\Dependency\Facade\CmsToEventFacadeInterface $eventFacade
24
     * @param \Spryker\Zed\Cms\Persistence\CmsRepositoryInterface $cmsRepository
25
     * @param \Spryker\Zed\Cms\CmsConfig $cmsConfig
26
     */
27
    public function __construct(
28
        protected CmsToEventFacadeInterface $eventFacade,
29
        protected CmsRepositoryInterface $cmsRepository,
30
        protected CmsConfig $cmsConfig
31
    ) {
32
    }
33
34
    /**
35
     * @return void
36
     */
37
    public function export(): void
38
    {
39
        $activeCmsPageIds = $this->cmsRepository->getActiveSearchablePageIds();
40
41
        if (!$activeCmsPageIds) {
42
            $this->getLogger()->debug('No active CMS pages found for export');
43
44
            return;
45
        }
46
47
        $this->getLogger()->debug(sprintf('Exporting %d active CMS pages', count($activeCmsPageIds)));
48
49
        foreach ($this->getCmsPageIdChunks($activeCmsPageIds) as $cmsPageIds) {
50
            $eventTransfers = $this->createEventTransfers($cmsPageIds);
51
            $this->eventFacade->triggerBulk(CmsEvents::ENTITY_SPY_CMS_PAGE_EXPORT, $eventTransfers);
52
        }
53
    }
54
55
    /**
56
     * @param array<int> $cmsPageIds
57
     *
58
     * @return \Generator
59
     */
60
    protected function getCmsPageIdChunks(array $cmsPageIds): Generator
61
    {
62
        $chunkSize = max(1, $this->cmsConfig->getCmsPageExportChunkSize());
63
        foreach (array_chunk($cmsPageIds, $chunkSize) as $chunk) {
64
            yield $chunk;
65
        }
66
    }
67
68
    /**
69
     * @param array<int> $cmsPageIds
70
     *
71
     * @return array<\Generated\Shared\Transfer\EventEntityTransfer>
72
     */
73
    protected function createEventTransfers(array $cmsPageIds): array
74
    {
75
        return array_map(
76
            fn ($idCmsPage) => (new EventEntityTransfer())->setId($idCmsPage),
77
            $cmsPageIds,
78
        );
79
    }
80
}
81