SrcsetRuntime   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 27
dl 0
loc 52
rs 10
c 0
b 0
f 0
wmc 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A srcset() 0 23 2
A __construct() 0 15 3
1
<?php
2
3
namespace App\Twig;
4
5
use App\Entity\Image;
6
use Liip\ImagineBundle\Imagine\Cache\CacheManager;
7
use Liip\ImagineBundle\Imagine\Filter\FilterManager;
8
use Twig\Extension\RuntimeExtensionInterface;
9
use Vich\UploaderBundle\Templating\Helper\UploaderHelper;
10
11
class SrcsetRuntime implements RuntimeExtensionInterface
12
{
13
    /** @var UploaderHelper */
14
    private $uploaderHelper;
15
    /** @var CacheManager */
16
    private $imagineCacheManager;
17
18
    private $filters;
19
20
    public function __construct(
21
        UploaderHelper $uploaderHelper, 
22
        FilterManager $filterManager, 
23
        CacheManager $imagineCacheManager)
24
    {
25
        $this->uploaderHelper = $uploaderHelper;
26
        $this->imagineCacheManager = $imagineCacheManager;
27
28
        $this->filters = [];
29
        foreach($filterManager->getFilterConfiguration()->all() as $name => $filter) {
30
            if (preg_match('/^srcset/', $name)) {
31
                $width = $filter['filters']['relative_resize']['widen'];
32
                $this->filters[] = [
33
                    'filter' => $name,
34
                    'width' => $width
35
                ];
36
            }
37
        }
38
    }
39
40
    public function srcset(Image $image)
41
    {
42
        $image_asset_path = $this->uploaderHelper->asset($image);
43
        $srcset = [];
44
        foreach($this->filters as $filter) {
45
            $srcset[] = [
46
                'width' => $filter['width'],
47
                'path' => $this->imagineCacheManager->getBrowserPath($image_asset_path, $filter['filter'])
48
            ];
49
        }
50
        
51
        // Add original image as srcset option, otherwise it may never be used.
52
        $srcset[] = ['width' => $image->getDimensions()[0], 'path' => $image_asset_path];
53
54
        $srcsetString = implode(', ', array_map(function ($src) {
55
            return sprintf(
56
                '%s %uw',
57
                $src['path'],
58
                $src['width']
59
            );
60
        }, $srcset));
61
62
        return $srcsetString;
63
    }
64
}