Completed
Push — master ( 48f773...027340 )
by
unknown
08:02
created

MediaExtension   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 249
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 9

Test Coverage

Coverage 61.33%

Importance

Changes 0
Metric Value
wmc 12
lcom 1
cbo 9
dl 0
loc 249
ccs 46
cts 75
cp 0.6133
rs 10
c 0
b 0
f 0

10 Methods

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