Completed
Push — master ( e48220...15f13c )
by
unknown
07:36
created

FileProvider::supportsImage()   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 4
cp 0
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
crap 2
1
<?php
2
3
namespace MediaMonks\SonataMediaBundle\Provider;
4
5
use MediaMonks\SonataMediaBundle\Entity\Media;
6
use Sonata\AdminBundle\Form\FormMapper;
7
use Symfony\Component\HttpFoundation\File\UploadedFile;
8
use Symfony\Component\Validator\Constraints as Constraint;
9
10
class FileProvider extends AbstractProvider
11
{
12
    /**
13
     * @param FormMapper $formMapper
14
     */
15
    public function buildProviderCreateForm(FormMapper $formMapper)
16
    {
17
        $this->addRequiredFileUploadField($formMapper, 'binaryContent', 'File');
18
    }
19
20
    /**
21
     * @param FormMapper $formMapper
22
     */
23
    public function buildProviderEditForm(FormMapper $formMapper)
24
    {
25
        $this->addFileUploadField($formMapper, 'binaryContent', 'File');
26
    }
27
28
    /**
29
     * @param Media $media
30
     */
31
    public function update(Media $media)
32
    {
33
        if (!is_null($media->getBinaryContent())) {
34
            if (empty($media->getImage())) {
35
                $this->setFileImage($media);
36
            }
37
            $filename = $this->handleFileUpload($media);
38
            if (!empty($filename)) {
39
                $media->setProviderReference($filename);
40
            }
41
        }
42
43
        parent::update($media);
44
    }
45
46
    /**
47
     * @return string
48
     */
49
    public function getIcon()
50
    {
51
        return 'file';
52
    }
53
54
    /**
55
     * @return string
56
     */
57
    public function getTitle()
58
    {
59
        return 'File';
60
    }
61
62
    public function getType()
63
    {
64
        return 'file';
65
    }
66
67
    /**
68
     * @return string
69
     */
70
    public function getMediaTemplate()
71
    {
72
        return 'MediaMonksSonataMediaBundle:Provider:file_media.html.twig';
73
    }
74
75
    /**
76
     * @param Media $media
77
     */
78
    protected function setFileImage(Media $media)
79
    {
80
        /**
81
         * @var UploadedFile $file
82
         */
83
        $file = $media->getBinaryContent();
84
        if (empty($file)) {
85
            return;
86
        }
87
88
        $imageFilename = $this->getImageByExtension($file->getClientOriginalExtension());
89
        $media->setImageContent(
90
            new UploadedFile(
91
                $this->getImageLocation().$imageFilename,
92
                $imageFilename
93
            )
94
        );
95
    }
96
97
    /**
98
     * @param $extension
99
     * @return string
100
     */
101
    protected function getImageByExtension($extension)
102
    {
103
        switch ($extension) {
104
            case 'zip':
105
            case 'rar':
106
            case 'tar':
107
                return 'archive.png';
108
            case 'wav':
109
            case 'mp3':
110
            case 'flac':
111
            case 'aac':
112
            case 'aiff':
113
            case 'm4a':
114
            case 'ogg':
115
            case 'oga':
116
            case 'wma':
117
                return 'audio.png';
118
            case 'php':
119
            case 'html':
120
            case 'css':
121
            case 'js':
122
            case 'vb':
123
            case 'phar':
124
            case 'py':
125
            case 'jar':
126
            case 'json':
127
            case 'yml':
128
                return 'code.png';
129
            case 'xls':
130
            case 'xlt':
131
            case 'xlm':
132
            case 'xlsx':
133
            case 'xlsm':
134
            case 'xltx':
135
            case 'xltm':
136
                return 'excel.png';
137
            case 'jpg':
138
            case 'jpeg':
139
            case 'gif':
140
            case 'bmp':
141
            case 'tiff':
142
            case 'ai':
143
            case 'psd':
144
            case 'png':
145
                return 'image.png';
146
            case 'mp4':
147
            case 'avi':
148
            case 'mkv':
149
            case 'mpg':
150
            case 'mpeg':
151
                return 'movie.png';
152
            case 'pdf':
153
                return 'pdf.png';
154
            case 'ppt':
155
            case 'pot':
156
            case 'pps':
157
            case 'pptx':
158
            case 'pptm':
159
            case 'potx':
160
            case 'potm':
161
            case 'ppam':
162
            case 'ppsx':
163
            case 'ppsm':
164
            case 'sldx':
165
            case 'sldm':
166
                return 'powerpoint.png';
167
            case 'txt':
168
                return 'text.png';
169
            case 'doc':
170
            case 'dot':
171
            case 'wbk':
172
            case 'docx':
173
            case 'docm':
174
            case 'dotx':
175
            case 'dotm':
176
            case 'docb':
177
                return 'word.png';
178
            default:
179
                return 'default.png';
180
        }
181
    }
182
183
    /**
184
     * @return string
185
     */
186
    protected function getImageLocation()
187
    {
188
        return __DIR__.'/../Resources/image/file/';
189
    }
190
191
    /**
192
     * @return bool
193
     */
194
    public function supportsDownload()
195
    {
196
        return true;
197
    }
198
199
    /**
200
     * @return bool
201
     */
202
    public function supportsEmbed()
203
    {
204
        return true;
205
    }
206
207
    /**
208
     * @return bool
209
     */
210
    public function supportsImage()
211
    {
212
        return true;
213
    }
214
}
215