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

ManipulateImageService   A

Complexity

Total Complexity 15

Size/Duplication

Total Lines 87
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 15
lcom 1
cbo 4
dl 0
loc 87
ccs 0
cts 62
cp 0
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A getFocusPointClass() 0 14 5
B cropImage() 0 53 9
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