Completed
Pull Request — master (#2609)
by
unknown
70:41 queued 64:09
created

ManipulateImageService::cropImage()   C

Complexity

Conditions 10
Paths 96

Size

Total Lines 65

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 110

Importance

Changes 0
Metric Value
dl 0
loc 65
ccs 0
cts 55
cp 0
rs 6.8969
c 0
b 0
f 0
cc 10
nc 96
nop 3
crap 110

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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
        $filename = $media->getOriginalFilename();
48
        $filename = str_replace(['/', '\\', '%'], '', $filename);
49
50
        $parts = pathinfo($filename);
51
        $filename = $this->slugifier->slugify($parts['filename']);
52
        if (\array_key_exists('extension', $parts)) {
53
            $filename .= '.' . strtolower($parts['extension']);
54
        }
55
56
        $path = sprintf(
57
            'uploads/media/%s/%s',
58
            $media->getUuid(),
59
            $filename
60
        );
61
62
        $runTimeConfigForView = [];
63
        if ($editableMediaWrapper->getRunTimeConfig() !== null) {
64
            $runTimeConfig = json_decode($editableMediaWrapper->getRunTimeConfig(), true);
65
66
            if (
67
                is_array($runTimeConfig)
68
                && !empty($view)
69
                && isset($runTimeConfig[$view]['start'], $runTimeConfig[$view]['size'])
70
            ) {
71
                $runTimeConfigForView = [
72
                    'crop' => [
73
                        'start' => $runTimeConfig[$view]['start'],
74
                        'size' => $runTimeConfig[$view]['size'],
75
                    ],
76
                ];
77
            }
78
        }
79
80
        try {
81
            $filterConfig = $this->filterConfiguration->get($filter);
82
        } catch (NonExistingFilterException $exception) {
83
            $filterConfig = $this->filterConfiguration->get('optim');
84
        }
85
86
        $oemConfig = null;
87
        if (isset($filterConfig['filters'])) {
88
            $oemConfig = $filterConfig;
89
            unset($filterConfig['filters']['crop']);
90
            $runTimeConfigForView = array_merge_recursive($runTimeConfigForView, $filterConfig['filters']);
91
            unset($filterConfig['filters']);
92
            $this->filterConfiguration->set($filter, $filterConfig);
93
        }
94
95
        try {
96
            $response = $this->filterService->getUrlOfFilteredImageWithRuntimeFilters($path, $filter, $runTimeConfigForView);
97
        } catch (\Exception $exception) {
98
            $runTimeConfigForView = [];
99
100
            $response = $this->filterService->getUrlOfFilteredImageWithRuntimeFilters($path, 'optim', $runTimeConfigForView);
101
        }
102
103
        if ($oemConfig !== null) {
104
            $this->filterConfiguration->set($filter, $oemConfig);
105
        }
106
107
        return $response;
108
    }
109
}
110