Completed
Pull Request — master (#2609)
by
unknown
10:03
created

ManipulateImageService::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 6
ccs 0
cts 6
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 3
crap 2
1
<?php
2
3
namespace Kunstmaan\MediaBundle\Helper;
4
5
use Kunstmaan\MediaBundle\Entity\EditableMediaWrapper;
6
use Kunstmaan\UtilitiesBundle\Helper\Slugifier;
7
use Liip\ImagineBundle\Exception\Imagine\Filter\NonExistingFilterException;
8
use Liip\ImagineBundle\Imagine\Filter\FilterConfiguration;
9
use Liip\ImagineBundle\Service\FilterService;
10
11
class ManipulateImageService
12
{
13
    /** @var Slugifier */
14
    private $slugifier;
15
16
    /** @var FilterService */
17
    private $filterService;
18
19
    /** @var FilterConfiguration */
20
    private $filterConfiguration;
21
22
    public function __construct(Slugifier $slugifier, FilterService $filterService, FilterConfiguration $filterConfiguration)
23
    {
24
        $this->slugifier = $slugifier;
25
        $this->filterService = $filterService;
26
        $this->filterConfiguration = $filterConfiguration;
27
    }
28
29
    public function getFocusPointClass(EditableMediaWrapper $editableMediaWrapper, string $view = ''): string
30
    {
31
        if (null === $editableMediaWrapper->getRunTimeConfig()) {
32
            return '';
33
        }
34
35
        $runTimeConfig = json_decode($editableMediaWrapper->getRunTimeConfig(), true);
36
37
        if (!is_array($runTimeConfig) || empty($view) || !isset($runTimeConfig[$view]['class'])) {
38
            return '';
39
        }
40
41
        return $runTimeConfig[$view]['class'];
42
    }
43
44
    public function cropImage(EditableMediaWrapper $editableMediaWrapper, string $view = '', string $filter = 'optim'): string
45
    {
46
        $media = $editableMediaWrapper->getMedia();
47
        $path = $media->getUrl();
48
        $path = str_replace('://', '---', $path);
49
50
        $runTimeConfigForView = [];
51
        if ($editableMediaWrapper->getRunTimeConfig() !== null) {
52
            $runTimeConfig = json_decode($editableMediaWrapper->getRunTimeConfig(), true);
53
54
            if (
55
                is_array($runTimeConfig)
56
                && !empty($view)
57
                && isset($runTimeConfig[$view]['start'], $runTimeConfig[$view]['size'])
58
            ) {
59
                $runTimeConfigForView = [
60
                    'crop' => [
61
                        'start' => $runTimeConfig[$view]['start'],
62
                        'size' => $runTimeConfig[$view]['size'],
63
                    ],
64
                ];
65
            }
66
        }
67
68
        try {
69
            $filterConfig = $this->filterConfiguration->get($filter);
70
        } catch (NonExistingFilterException $exception) {
71
            $filterConfig = $this->filterConfiguration->get('optim');
72
        }
73
74
        $oemConfig = null;
75
        if (isset($filterConfig['filters'])) {
76
            $oemConfig = $filterConfig;
77
            unset($filterConfig['filters']['crop']);
78
            $runTimeConfigForView = array_merge_recursive($runTimeConfigForView, $filterConfig['filters']);
79
            unset($filterConfig['filters']);
80
            $this->filterConfiguration->set($filter, $filterConfig);
81
        }
82
83
        try {
84
            $response = $this->filterService->getUrlOfFilteredImageWithRuntimeFilters($path, $filter, $runTimeConfigForView);
85
        } catch (\Exception $exception) {
86
            $runTimeConfigForView = [];
87
88
            $response = $this->filterService->getUrlOfFilteredImageWithRuntimeFilters($path, 'optim', $runTimeConfigForView);
89
        }
90
91
        if ($oemConfig !== null) {
92
            $this->filterConfiguration->set($filter, $oemConfig);
93
        }
94
95
        return $response;
96
    }
97
}
98