Completed
Push — master ( d4a912...134347 )
by
unknown
04:55
created

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