Completed
Push — master ( 071097...7934b9 )
by
unknown
09:17
created

MediaExtension::getProviderByMedia()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
crap 1
1
<?php
2
3
namespace MediaMonks\SonataMediaBundle\Twig\Extension;
4
5
use MediaMonks\SonataMediaBundle\Generator\UrlGenerator;
6
use MediaMonks\SonataMediaBundle\Provider\ProviderInterface;
7
use MediaMonks\SonataMediaBundle\Provider\ProviderPool;
8
use MediaMonks\SonataMediaBundle\Model\MediaInterface;
9
10
class MediaExtension extends \Twig_Extension
11
{
12
    /**
13
     * @var ProviderPool
14
     */
15
    private $providerPool;
16
17
    /**
18
     * @var UrlGenerator
19
     */
20
    private $urlGenerator;
21
22
    /**
23
     * @param ProviderPool $providerPool
24
     * @param UrlGenerator $urlGenerator
25
     */
26 8
    public function __construct(ProviderPool $providerPool, UrlGenerator $urlGenerator)
27
    {
28 8
        $this->providerPool = $providerPool;
29 8
        $this->urlGenerator = $urlGenerator;
30 8
    }
31
32
    /**
33
     * @return string
34
     */
35
    public function getName()
36
    {
37
        return 'media';
38
    }
39
40
    /**
41
     * @return array
42
     */
43 8
    public function getFilters()
44
    {
45
        return [
46 8
            new \Twig_SimpleFilter(
47 8
                'media', [$this, 'media'], [
48 8
                    'needs_environment' => true,
49
                    'is_safe' => ['html'],
50
                ]
51
            ),
52 8
            new \Twig_SimpleFilter(
53 8
                'media_embed', [$this, 'mediaEmbed'], [
54 8
                    'needs_environment' => true,
55
                    'is_safe' => ['html'],
56
                ]
57
            ),
58 8
            new \Twig_SimpleFilter(
59 8
                'media_image', [$this, 'mediaImage'], [
60 8
                    'needs_environment' => true,
61
                    'is_safe' => ['html'],
62
                ]
63
            ),
64 8
            new \Twig_SimpleFilter(
65 8
                'media_download', [$this, 'mediaDownload'], [
66 8
                    'needs_environment' => true,
67
                    'is_safe' => ['html'],
68
                ]
69
            ),
70 8
            new \Twig_SimpleFilter(
71 8
                'media_supports', [$this, 'mediaSupports']
72
            ),
73
        ];
74
    }
75
76
    /**
77
     * @param \Twig_Environment $environment
78
     * @param MediaInterface $media
79
     * @param $width
80
     * @param $height
81
     * @param array $parameters
82
     * @param null $routeName
83
     * @param bool $bustCache
84
     * @return string
85
     */
86
    public function media(
87
        \Twig_Environment $environment,
88
        MediaInterface $media,
89
        $width,
90
        $height,
91
        array $parameters = [],
92
        $routeName = null,
93
        $bustCache = false
94
    ) {
95
        $provider = $this->getProviderByMedia($media);
96
97
        if ($provider->supportsEmbed()) {
98
            return $this->mediaEmbed($environment, $media, $width, $height, $parameters);
99
        }
100
101
        return $this->mediaImage($environment, $media, $width, $height, $parameters, $routeName, $bustCache);
102
    }
103
104
    /**
105
     * @param \Twig_Environment $environment
106
     * @param MediaInterface $media
107
     * @param $width
108
     * @param $height
109
     * @param array $parameters
110
     * @return string
111
     */
112 3
    public function mediaEmbed(
113
        \Twig_Environment $environment,
114
        MediaInterface $media,
115
        $width,
116
        $height,
117
        array $parameters = []
118
    ) {
119 3
        return $environment->render(
120 3
            $this->getProviderByMedia($media)->getEmbedTemplate(),
121
            [
122 3
                'media' => $media,
123 3
                'width' => $width,
124 3
                'height' => $height,
125 3
                'parameters' => $parameters,
126
            ]
127
        );
128
    }
129
130
    /**
131
     * @param \Twig_Environment $environment
132
     * @param MediaInterface $media
133
     * @param $width
134
     * @param $height
135
     * @param array $extra
136
     * @param null $routeName
137
     * @param bool $bustCache
138
     * @return string
139
     */
140 7
    public function mediaImage(
141
        \Twig_Environment $environment,
142
        MediaInterface $media,
143
        $width,
144
        $height,
145
        array $extra = [],
146
        $routeName = null,
147
        $bustCache = false
148
    ) {
149
150 7
        if ($bustCache) {
151 7
            $extra['bc'] = time();
152
        }
153
154 7
        $src = $this->urlGenerator->generate($media, $width, $height, $extra, $routeName);
155
156 7
        return $environment->render(
157 7
            'MediaMonksSonataMediaBundle:Media:image.html.twig',
158
            [
159 7
                'media' => $media,
160 7
                'src' => $src,
161 7
                'width' => $width,
162 7
                'height' => $height,
163 7
                'title' => $media->getTitle(),
164
            ]
165
        );
166
    }
167
168
    /**
169
     * @param \Twig_Environment $environment
170
     * @param MediaInterface $media
171
     * @param $width
172
     * @param $height
173
     * @param array $parameters
174
     * @param null $routeName
175
     * @return string
176
     */
177
    public function mediaDownload(
178
        \Twig_Environment $environment,
179
        MediaInterface $media,
180
        $width,
181
        $height,
182
        array $parameters = [],
183
        $routeName = null
184
    ) {
185
        return $environment->render(
186
            'MediaMonksSonataMediaBundle:Media:file.html.twig',
187
            [
188
                'media' => $media,
189
                'src' => $this->urlGenerator->generate($media, $width, $height, $parameters, $routeName),
190
                'width' => $width,
191
                'height' => $height,
192
                'title' => $media->getTitle(),
193
            ]
194
        );
195
    }
196
197
    /**
198
     * @param MediaInterface $media
199
     * @param $type
200
     * @return mixed
201
     */
202 7
    public function mediaSupports(MediaInterface $media, $type)
203
    {
204 7
        return $this->getProviderByMedia($media)->supports($type);
205
    }
206
207
    /**
208
     * @param MediaInterface $media
209
     * @return ProviderInterface
210
     */
211 7
    private function getProviderByMedia(MediaInterface $media)
212
    {
213 7
        return $this->providerPool->getProvider($media->getProvider());
214
    }
215
}
216