GlideManipulator::processImage()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 22
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 12
nc 3
nop 2
dl 0
loc 22
rs 9.8666
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Damax\Media\Glide;
6
7
use Damax\Media\Domain\Exception\InvalidFile;
8
use Damax\Media\Domain\Image\Manipulator;
9
use Damax\Media\Domain\Model\Media;
10
use Damax\Media\Flysystem\Registry\Registry;
11
use League\Glide\Responses\SymfonyResponseFactory;
12
use League\Glide\ServerFactory;
13
use League\Glide\Signatures\SignatureInterface;
14
use RuntimeException;
15
use Symfony\Component\HttpFoundation\RequestStack;
16
use Symfony\Component\HttpFoundation\Response;
17
18
final class GlideManipulator extends Manipulator
19
{
20
    private $registry;
21
    private $signature;
22
    private $requestStack;
23
    private $serverConfig;
24
25
    public function __construct(Registry $registry, SignatureInterface $signature, RequestStack $requestStack, array $serverConfig)
26
    {
27
        $this->registry = $registry;
28
        $this->signature = $signature;
29
        $this->requestStack = $requestStack;
30
        $this->serverConfig = $serverConfig;
31
    }
32
33
    public function processImage(Media $media, array $params): Response
34
    {
35
        if (!($request = $this->requestStack->getCurrentRequest())) {
36
            throw new RuntimeException('Request stack is empty.');
37
        }
38
39
        $this->signature->validateRequest($request->getPathInfo(), $params);
40
41
        $file = $media->file();
42
        $info = $file->info();
43
44
        if (!$info->image()) {
45
            throw InvalidFile::unsupportedMimeType($info->mimeType());
46
        }
47
48
        $config = array_merge($this->serverConfig, [
49
            'source' => $this->registry->get($file->storage()),
50
            'cache' => $this->registry->get($this->serverConfig['cache']),
51
            'response' => new SymfonyResponseFactory($request),
52
        ]);
53
54
        return ServerFactory::create($config)->getImageResponse($file->key(), $params);
55
    }
56
}
57