Completed
Pull Request — master (#2609)
by
unknown
06:47
created

ManipulateImageService::cropImage()   B

Complexity

Conditions 7
Paths 12

Size

Total Lines 45

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 56

Importance

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