Completed
Push — master ( 09a899...000445 )
by
unknown
12:05 queued 03:39
created

MediaExtension::getProviderByMedia()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 0
cts 0
cp 0
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
crap 2
1
<?php
2
3
namespace MediaMonks\SonataMediaBundle\Twig\Extension;
4
5
use MediaMonks\SonataMediaBundle\Provider\ProviderInterface;
6
use MediaMonks\SonataMediaBundle\Provider\ProviderPool;
7
use MediaMonks\SonataMediaBundle\Helper\Parameter;
8
use MediaMonks\SonataMediaBundle\Model\MediaInterface;
9
10
class MediaExtension extends \Twig_Extension
11
{
12
    /**
13
     * @var ProviderPool
14
     */
15
    protected $providerPool;
16
17
    /**
18
     * @var Parameter
19
     */
20
    protected $parameterHelper;
21
22
    /**
23
     * MediaExtension constructor.
24
     * @param Parameter $parameter
25
     */
26
    public function __construct(ProviderPool $providerPool, Parameter $parameter)
27
    {
28
        $this->providerPool = $providerPool;
29
        $this->parameterHelper = $parameter;
30
    }
31
32
    /**
33
     * @return string
34
     */
35
    public function getName()
36
    {
37
        return 'media';
38
    }
39
40
    /**
41
     * @return array
42
     */
43
    public function getFilters()
44
    {
45
        return [
46
            new \Twig_SimpleFilter(
47
                'media', [$this, 'media'], [
48
                    'needs_environment' => true,
49
                    'is_safe'           => ['html'],
50
                ]
51
            ),
52
            new \Twig_SimpleFilter(
53
                'media_image', [$this, 'mediaImage'], [
54
                    'is_safe'           => ['html'],
55
                ]
56
            ),
57
            new \Twig_SimpleFilter(
58
                'media_type', [$this, 'mediaType'], [
59
                    'is_safe'           => ['html'],
60
                ]
61
            ),
62
        ];
63
    }
64
65
    /**
66
     * @param \Twig_Environment $environment
67
     * @param MediaInterface $media
68
     * @param int $width
69
     * @param int $height
70
     * @param string $routeName
71
     * @param array $parameters
72
     * @return string
73
     */
74
    public function media(
75
        \Twig_Environment $environment,
76
        MediaInterface $media,
77
        $width,
78
        $height,
79
        $routeName = null,
80
        array $parameters = []
81
    ) {
82
        return $environment->render(
83
            $this->getProviderByMedia($media)->getMediaTemplate(),
84
            [
85
                'media'      => $media,
86
                'width'      => $width,
87
                'height'     => $height,
88
                'routeName'  => $routeName,
89
                'parameters' => $parameters,
90
            ]
91
        );
92
    }
93
94
    /**
95
     * @param MediaInterface $media
96
     * @param int $width
97
     * @param int $height
98
     * @param string $routeName
99
     * @param array $parameters
100
     * @return string
101
     */
102
    public function mediaImage(
103
        MediaInterface $media,
104
        $width,
105
        $height,
106
        $routeName = null,
107
        array $parameters = []
108
    ) {
109
        $parameters += [
110
            'w' => $width,
111
            'h' => $height,
112
        ];
113
114
        return sprintf(
115
            '<img src="%s" width="%d" height="%d" title="%s">',
116
            $this->parameterHelper->generateUrl($media, $parameters, $routeName),
117
            $width,
118
            $height,
119
            $media->getTitle()
120
        );
121
    }
122
123
    /**
124
     * @param MediaInterface $media
125
     * @return string
126
     */
127
    public function mediaType(MediaInterface $media)
128
    {
129
        return $this->getProviderByMedia($media)->getName();
130
    }
131
132
    /**
133
     * @param MediaInterface $media
134
     * @return ProviderInterface
135
     */
136
    private function getProviderByMedia(MediaInterface $media)
137
    {
138
        return $this->providerPool->getProvider($media->getProviderName());
139
    }
140
}
141