Passed
Push — master ( e11480...e4fd74 )
by Jeroen
02:39
created

ImportHelper::execute()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 13
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 6
nc 1
nop 0
1
<?php
2
3
namespace Backend\Modules\MediaLibraryImporter\Helper;
4
5
use Backend\Modules\Locale\Actions\Import;
6
use Backend\Modules\MediaLibraryImporter\Component\ImportResults;
7
use Backend\Modules\MediaLibraryImporter\Component\MediaGroupsToUpdate;
8
use Backend\Modules\MediaLibraryImporter\Component\MediaGroupToUpdate;
9
use Backend\Modules\MediaLibraryImporter\Domain\MediaGroupImport\Command\UpdateMediaGroupAfterImport;
10
use Backend\Modules\MediaLibraryImporter\Domain\MediaItemImport\Command\ExecuteMediaItemImport;
11
use Backend\Modules\MediaLibraryImporter\Domain\MediaItemImport\MediaItemImport;
12
use Backend\Modules\MediaLibraryImporter\Domain\MediaItemImport\MediaItemImportRepository;
13
use SimpleBus\Message\Bus\Middleware\MessageBusSupportingMiddleware;
14
15
class ImportHelper
16
{
17
    /** @var MessageBusSupportingMiddleware */
18
    private $commandBus;
19
20
    /** @var MediaItemImportRepository */
21
    private $mediaItemImportRepository;
22
23
    /**
24
     * @param MessageBusSupportingMiddleware $commandBus
25
     * @param MediaItemImportRepository $mediaItemImportRepository
26
     */
27
    public function __construct(
28
        MessageBusSupportingMiddleware $commandBus,
29
        MediaItemImportRepository $mediaItemImportRepository
30
    ) {
31
        $this->commandBus = $commandBus;
32
        $this->mediaItemImportRepository = $mediaItemImportRepository;
33
    }
34
35
    /**
36
     * @return ImportResults
37
     */
38
    public function execute(): ImportResults
39
    {
40
        /** @var ImportResults $importResults */
41
        $importResults = new ImportResults($this->mediaItemImportRepository->getNumberOfImports());
42
43
        /** @var MediaGroupsToUpdate $mediaGroupsToUpdate */
44
        $mediaGroupsToUpdate = new MediaGroupsToUpdate();
45
46
        $this->executeMediaItemImports($mediaGroupsToUpdate, $importResults);
47
        $this->executeMediaGroupsToUpdate($mediaGroupsToUpdate);
48
49
        return $importResults;
50
    }
51
52
    /**
53
     * @param MediaItemImport $mediaItemImport
54
     * @return ExecuteMediaItemImport
55
     */
56
    private function executeMediaItemImport(MediaItemImport $mediaItemImport): ExecuteMediaItemImport
57
    {
58
        /** @var ExecuteMediaItemImport $executeMediaItemImport */
59
        $executeMediaItemImport = new ExecuteMediaItemImport($mediaItemImport);
60
61
        // Handle the MediaItemImport execute
62
        $this->commandBus->handle($executeMediaItemImport);
63
64
        return $executeMediaItemImport;
65
    }
66
67
    /**
68
     * @param MediaGroupsToUpdate $mediaGroupsToUpdate
69
     * @param ImportResults $importResults
70
     */
71
    private function executeMediaItemImports(
72
        MediaGroupsToUpdate $mediaGroupsToUpdate,
73
        ImportResults $importResults
74
    ) {
75
        /** @var array $mediaItemImports */
76
        $mediaItemImports = $this->mediaItemImportRepository->findAllForImport();
77
78
        /** @var MediaItemImport $mediaItemImport */
79
        foreach ($mediaItemImports as $mediaItemImport) {
80
            $executeMediaItemImport = $this->executeMediaItemImport($mediaItemImport);
81
            $importResults->bumpForMediaItemImport($executeMediaItemImport->getMediaItemImportEntity());
82
            $mediaGroupsToUpdate->add($executeMediaItemImport->getMediaItemImportEntity());
83
        }
84
    }
85
86
    /**
87
     * @param MediaGroupToUpdate $mediaGroupToUpdate
88
     */
89
    private function executeMediaGroupUpdate(MediaGroupToUpdate $mediaGroupToUpdate)
90
    {
91
        if (!$mediaGroupToUpdate->hasChanges()) {
92
            return;
93
        }
94
95
        /** @var UpdateMediaGroupAfterImport $updateMediaGroup */
96
        $updateMediaGroup = new UpdateMediaGroupAfterImport(
97
            $mediaGroupToUpdate->getMediaGroup(),
98
            $mediaGroupToUpdate->getConnectedItems()
99
        );
100
101
        // Handle the UpdateMediaGroupAfterImport
102
        $this->commandBus->handle($updateMediaGroup);
103
    }
104
105
    /**
106
     * @param MediaGroupsToUpdate $mediaGroupsToUpdate
107
     */
108
    private function executeMediaGroupsToUpdate(MediaGroupsToUpdate $mediaGroupsToUpdate)
109
    {
110
        /** @var MediaGroupToUpdate $mediaGroupToUpdate */
111
        foreach ($mediaGroupsToUpdate->getAll() as $mediaGroupToUpdate) {
112
            $this->executeMediaGroupUpdate($mediaGroupToUpdate);
113
        }
114
    }
115
}
116