Completed
Push — master ( 162ac8...74252e )
by
unknown
19:44
created

MediaExtension::mediaImage()   B

Complexity

Conditions 2
Paths 2

Size

Total Lines 27
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
dl 0
loc 27
ccs 0
cts 24
cp 0
rs 8.8571
c 0
b 0
f 0
cc 2
eloc 18
nc 2
nop 7
crap 6
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
    public function __construct(ProviderPool $providerPool, UrlGenerator $urlGenerator)
27
    {
28
        $this->providerPool = $providerPool;
29
        $this->urlGenerator = $urlGenerator;
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_embed', [$this, 'mediaEmbed'], [
54
                    'needs_environment' => true,
55
                    'is_safe' => ['html'],
56
                ]
57
            ),
58
            new \Twig_SimpleFilter(
59
                'media_image', [$this, 'mediaImage'], [
60
                    'needs_environment' => true,
61
                    'is_safe' => ['html'],
62
                ]
63
            ),
64
            new \Twig_SimpleFilter(
65
                'media_download', [$this, 'mediaDownload'], [
66
                    'needs_environment' => true,
67
                    'is_safe' => ['html'],
68
                ]
69
            ),
70
            new \Twig_SimpleFilter(
71
                '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
    public function mediaEmbed(
113
        \Twig_Environment $environment,
114
        MediaInterface $media,
115
        $width,
116
        $height,
117
        array $parameters = []
118
    ) {
119
        return $environment->render(
120
            $this->getProviderByMedia($media)->getEmbedTemplate(),
121
            [
122
                'media' => $media,
123
                'width' => $width,
124
                'height' => $height,
125
                '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
    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
        if ($bustCache) {
151
            $extra['bc'] = time();
152
        }
153
154
        $src = $this->urlGenerator->generate($media, $width, $height, $extra, $routeName);
155
156
        return $environment->render(
157
            'MediaMonksSonataMediaBundle:Media:image.html.twig',
158
            [
159
                'media' => $media,
160
                'src' => $src,
161
                'width' => $width,
162
                'height' => $height,
163
                '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
    public function mediaSupports(MediaInterface $media, $type)
203
    {
204
        return $this->getProviderByMedia($media)->supports($type);
205
    }
206
207
    /**
208
     * @param MediaInterface $media
209
     * @return ProviderInterface
210
     */
211
    private function getProviderByMedia(MediaInterface $media)
212
    {
213
        return $this->providerPool->getProvider($media->getProvider());
214
    }
215
}
216