Completed
Push — master ( eec98d...dbbf84 )
by Grégoire
05:16
created

SonataMediaExtension::configureCategoryInMedia()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 6
nc 3
nop 2
dl 0
loc 12
rs 9.2
c 0
b 0
f 0
1
<?php
2
3
/*
4
 * This file is part of the Sonata Project package.
5
 *
6
 * (c) Thomas Rabaix <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Sonata\MediaBundle\DependencyInjection;
13
14
use Sonata\EasyExtendsBundle\Mapper\DoctrineCollector;
15
use Symfony\Component\Config\Definition\Processor;
16
use Symfony\Component\Config\FileLocator;
17
use Symfony\Component\DependencyInjection\ContainerBuilder;
18
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
19
use Symfony\Component\DependencyInjection\Reference;
20
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
21
22
/**
23
 * MediaExtension.
24
 *
25
 * @author     Thomas Rabaix <[email protected]>
26
 */
27
class SonataMediaExtension extends Extension
28
{
29
    /**
30
     * {@inheritdoc}
31
     */
32
    public function load(array $configs, ContainerBuilder $container)
33
    {
34
        $processor = new Processor();
35
        $configuration = new Configuration();
36
        $config = $processor->processConfiguration($configuration, $configs);
37
38
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
39
        $loader->load('provider.xml');
40
        $loader->load('media.xml');
41
        $loader->load('twig.xml');
42
        $loader->load('security.xml');
43
        $loader->load('extra.xml');
44
        $loader->load('form.xml');
45
        $loader->load('gaufrette.xml');
46
47
        // NEXT_MAJOR: Remove Following lines
48
        $amazonS3Definition = $container->getDefinition('sonata.media.adapter.service.s3');
49
        if (method_exists($amazonS3Definition, 'setFactory')) {
50
            $amazonS3Definition->setFactory(array('Aws\S3\S3Client', 'factory'));
51
        } else {
52
            $amazonS3Definition->setFactoryClass('Aws\S3\S3Client');
0 ignored issues
show
Bug introduced by
The method setFactoryClass() does not exist on Symfony\Component\DependencyInjection\Definition. Did you maybe mean setFactory()?

This check marks calls to methods that do not seem to exist on an object.

This is most likely the result of a method being renamed without all references to it being renamed likewise.

Loading history...
53
            $amazonS3Definition->setFactoryMethod('factory');
0 ignored issues
show
Bug introduced by
The method setFactoryMethod() does not exist on Symfony\Component\DependencyInjection\Definition. Did you maybe mean setFactory()?

This check marks calls to methods that do not seem to exist on an object.

This is most likely the result of a method being renamed without all references to it being renamed likewise.

Loading history...
54
        }
55
56
        // NEXT_MAJOR: Remove Following lines
57
        $openCloudDefinition = $container->getDefinition('sonata.media.adapter.filesystem.opencloud.objectstore');
58
        if (method_exists($openCloudDefinition, 'setFactory')) {
59
            $openCloudDefinition->setFactory(array(new Reference('sonata.media.adapter.filesystem.opencloud.connection'), 'ObjectStore'));
60
        } else {
61
            $openCloudDefinition->setFactoryService('sonata.media.adapter.filesystem.opencloud.connection');
0 ignored issues
show
Bug introduced by
The method setFactoryService() does not exist on Symfony\Component\DependencyInjection\Definition. Did you maybe mean setFactory()?

This check marks calls to methods that do not seem to exist on an object.

This is most likely the result of a method being renamed without all references to it being renamed likewise.

Loading history...
62
            $openCloudDefinition->setFactoryMethod('ObjectStore');
0 ignored issues
show
Bug introduced by
The method setFactoryMethod() does not exist on Symfony\Component\DependencyInjection\Definition. Did you maybe mean setFactory()?

This check marks calls to methods that do not seem to exist on an object.

This is most likely the result of a method being renamed without all references to it being renamed likewise.

Loading history...
63
        }
64
65
        $loader->load('validators.xml');
66
        $loader->load('serializer.xml');
67
68
        if (!in_array(strtolower($config['db_driver']), array('doctrine_orm', 'doctrine_mongodb', 'doctrine_phpcr'))) {
69
            throw new \InvalidArgumentException(sprintf('SonataMediaBundle - Invalid db driver "%s".', $config['db_driver']));
70
        }
71
72
        $bundles = $container->getParameter('kernel.bundles');
73
74
        if (isset($bundles['FOSRestBundle']) && isset($bundles['NelmioApiDocBundle'])) {
75
            $loader->load(sprintf('api_form_%s.xml', $config['db_driver']));
76
77
            if ('doctrine_orm' == $config['db_driver']) {
78
                $loader->load('api_controllers.xml');
79
            }
80
        }
81
82
        if (isset($bundles['SonataNotificationBundle'])) {
83
            $loader->load('consumer.xml');
84
        }
85
86
        if (isset($bundles['SonataFormatterBundle'])) {
87
            $loader->load('formatter.xml');
88
        }
89
90
        if (isset($bundles['SonataBlockBundle'])) {
91
            $loader->load('block.xml');
92
        }
93
94
        if (isset($bundles['SonataSeoBundle'])) {
95
            $loader->load('seo_block.xml');
96
        }
97
98
        if (!isset($bundles['LiipImagineBundle'])) {
99
            $container->removeDefinition('sonata.media.thumbnail.liip_imagine');
100
        }
101
102
        if ($this->isClassificationEnabled($config)) {
103
            $loader->load('category.xml');
104
        }
105
106
        if (!array_key_exists($config['default_context'], $config['contexts'])) {
107
            throw new \InvalidArgumentException(sprintf('SonataMediaBundle - Invalid default context : %s, available : %s', $config['default_context'], json_encode(array_keys($config['contexts']))));
108
        }
109
110
        $loader->load(sprintf('%s.xml', $config['db_driver']));
111
112
        if (isset($bundles['SonataAdminBundle'])) {
113
            $loader->load(sprintf('%s_admin.xml', $config['db_driver']));
114
        }
115
116
        $this->configureCategoryInMedia($container, $config);
117
        $this->configureFilesystemAdapter($container, $config);
118
        $this->configureCdnAdapter($container, $config);
119
120
        $pool = $container->getDefinition('sonata.media.pool');
121
        $pool->replaceArgument(0, $config['default_context']);
122
123
        // this shameless hack is done in order to have one clean configuration
124
        // for adding formats ....
125
        $pool->addMethodCall('__hack__', $config);
126
127
        $strategies = array();
128
129
        foreach ($config['contexts'] as $name => $settings) {
130
            $formats = array();
131
132
            foreach ($settings['formats'] as $format => $value) {
133
                $formats[$name.'_'.$format] = $value;
134
            }
135
136
            $strategies[] = $settings['download']['strategy'];
137
            $pool->addMethodCall('addContext', array($name, $settings['providers'], $formats, $settings['download']));
138
        }
139
140
        $container->setParameter('sonata.media.admin_format', $config['admin_format']);
141
142
        $strategies = array_unique($strategies);
143
144
        foreach ($strategies as $strategyId) {
145
            $pool->addMethodCall('addDownloadSecurity', array($strategyId, new Reference($strategyId)));
146
        }
147
148
        if ('doctrine_orm' == $config['db_driver']) {
149
            $this->registerDoctrineMapping($config);
150
        }
151
152
        $container->setParameter('sonata.media.resizer.simple.adapter.mode', $config['resizer']['simple']['mode']);
153
        $container->setParameter('sonata.media.resizer.square.adapter.mode', $config['resizer']['square']['mode']);
154
155
        $this->configureParameterClass($container, $config);
156
        $this->configureExtra($container, $config);
157
        $this->configureBuzz($container, $config);
158
        $this->configureProviders($container, $config);
159
        $this->configureClassesToCompile();
160
    }
161
162
    /**
163
     * @param ContainerBuilder $container
164
     * @param array            $config
165
     */
166
    public function configureProviders(ContainerBuilder $container, $config)
167
    {
168
        $container->getDefinition('sonata.media.provider.image')
169
            ->replaceArgument(5, array_map('strtolower', $config['providers']['image']['allowed_extensions']))
170
            ->replaceArgument(6, $config['providers']['image']['allowed_mime_types'])
171
            ->replaceArgument(7, new Reference($config['providers']['image']['adapter']))
172
        ;
173
174
        $container->getDefinition('sonata.media.provider.file')
175
            ->replaceArgument(5, $config['providers']['file']['allowed_extensions'])
176
            ->replaceArgument(6, $config['providers']['file']['allowed_mime_types'])
177
        ;
178
179
        $container->getDefinition('sonata.media.provider.youtube')->replaceArgument(7, $config['providers']['youtube']['html5']);
180
    }
181
182
    /**
183
     * @param ContainerBuilder $container
184
     * @param array            $config
185
     */
186
    public function configureBuzz(ContainerBuilder $container, array $config)
187
    {
188
        $container->getDefinition('sonata.media.buzz.browser')
189
            ->replaceArgument(0, new Reference($config['buzz']['connector']));
190
191
        foreach (array(
192
            'sonata.media.buzz.connector.curl',
193
            'sonata.media.buzz.connector.file_get_contents',
194
        ) as $connector) {
195
            $container->getDefinition($connector)
196
                ->addMethodCall('setIgnoreErrors', array($config['buzz']['client']['ignore_errors']))
197
                ->addMethodCall('setMaxRedirects', array($config['buzz']['client']['max_redirects']))
198
                ->addMethodCall('setTimeout', array($config['buzz']['client']['timeout']))
199
                ->addMethodCall('setVerifyPeer', array($config['buzz']['client']['verify_peer']))
200
                ->addMethodCall('setProxy', array($config['buzz']['client']['proxy']));
201
        }
202
    }
203
204
    /**
205
     * @param ContainerBuilder $container
206
     * @param array            $config
207
     */
208
    public function configureParameterClass(ContainerBuilder $container, array $config)
209
    {
210
        $container->setParameter('sonata.media.admin.media.entity', $config['class']['media']);
211
        $container->setParameter('sonata.media.admin.gallery.entity', $config['class']['gallery']);
212
        $container->setParameter('sonata.media.admin.gallery_item.entity', $config['class']['gallery_item']);
213
214
        $container->setParameter('sonata.media.media.class', $config['class']['media']);
215
        $container->setParameter('sonata.media.gallery.class', $config['class']['gallery']);
216
217
        $container->getDefinition('sonata.media.form.type.media')->replaceArgument(1, $config['class']['media']);
218
    }
219
220
    /**
221
     * @param array $config
222
     */
223
    public function registerDoctrineMapping(array $config)
224
    {
225
        $collector = DoctrineCollector::getInstance();
226
227
        $collector->addAssociation($config['class']['media'], 'mapOneToMany', array(
228
            'fieldName' => 'galleryItems',
229
            'targetEntity' => $config['class']['gallery_item'],
230
            'cascade' => array(
231
                'persist',
232
            ),
233
            'mappedBy' => 'media',
234
            'orphanRemoval' => false,
235
        ));
236
237
        $collector->addAssociation($config['class']['gallery_item'], 'mapManyToOne', array(
238
            'fieldName' => 'gallery',
239
            'targetEntity' => $config['class']['gallery'],
240
            'cascade' => array(
241
                'persist',
242
            ),
243
            'mappedBy' => null,
244
            'inversedBy' => 'galleryItems',
245
            'joinColumns' => array(
246
                array(
247
                    'name' => 'gallery_id',
248
                    'referencedColumnName' => 'id',
249
                ),
250
            ),
251
            'orphanRemoval' => false,
252
        ));
253
254
        $collector->addAssociation($config['class']['gallery_item'], 'mapManyToOne', array(
255
            'fieldName' => 'media',
256
            'targetEntity' => $config['class']['media'],
257
            'cascade' => array(
258
                 'persist',
259
            ),
260
            'mappedBy' => null,
261
            'inversedBy' => 'galleryItems',
262
            'joinColumns' => array(
263
                array(
264
                    'name' => 'media_id',
265
                    'referencedColumnName' => 'id',
266
                ),
267
            ),
268
            'orphanRemoval' => false,
269
        ));
270
271
        $collector->addAssociation($config['class']['gallery'], 'mapOneToMany', array(
272
            'fieldName' => 'galleryItems',
273
            'targetEntity' => $config['class']['gallery_item'],
274
            'cascade' => array(
275
                'persist',
276
            ),
277
            'mappedBy' => 'gallery',
278
            'orphanRemoval' => true,
279
            'orderBy' => array(
280
                'position' => 'ASC',
281
            ),
282
        ));
283
284
        if ($this->isClassificationEnabled($config)) {
285
            $collector->addAssociation($config['class']['media'], 'mapManyToOne', array(
286
                'fieldName' => 'category',
287
                'targetEntity' => $config['class']['category'],
288
                'cascade' => array(
289
                    'persist',
290
                ),
291
                'mappedBy' => null,
292
                'inversedBy' => null,
293
                'joinColumns' => array(
294
                    array(
295
                     'name' => 'category_id',
296
                     'referencedColumnName' => 'id',
297
                     'onDelete' => 'SET NULL',
298
                    ),
299
                ),
300
                'orphanRemoval' => false,
301
            ));
302
        }
303
    }
304
305
    /**
306
     * Inject CDN dependency to default provider.
307
     *
308
     * @param ContainerBuilder $container
309
     * @param array            $config
310
     */
311
    public function configureCdnAdapter(ContainerBuilder $container, array $config)
312
    {
313
        // add the default configuration for the server cdn
314
        if ($container->hasDefinition('sonata.media.cdn.server') && isset($config['cdn']['server'])) {
315
            $container->getDefinition('sonata.media.cdn.server')
316
                ->replaceArgument(0, $config['cdn']['server']['path'])
317
            ;
318
        } else {
319
            $container->removeDefinition('sonata.media.cdn.server');
320
        }
321
322
        if ($container->hasDefinition('sonata.media.cdn.panther') && isset($config['cdn']['panther'])) {
323
            $container->getDefinition('sonata.media.cdn.panther')
324
                ->replaceArgument(0, $config['cdn']['panther']['path'])
325
                ->replaceArgument(1, $config['cdn']['panther']['username'])
326
                ->replaceArgument(2, $config['cdn']['panther']['password'])
327
                ->replaceArgument(3, $config['cdn']['panther']['site_id'])
328
            ;
329
        } else {
330
            $container->removeDefinition('sonata.media.cdn.panther');
331
        }
332
333
        if ($container->hasDefinition('sonata.media.cdn.cloudfront') && isset($config['cdn']['cloudfront'])) {
334
            $container->getDefinition('sonata.media.cdn.cloudfront')
335
                ->replaceArgument(0, $config['cdn']['cloudfront']['path'])
336
                ->replaceArgument(1, $config['cdn']['cloudfront']['key'])
337
                ->replaceArgument(2, $config['cdn']['cloudfront']['secret'])
338
                ->replaceArgument(3, $config['cdn']['cloudfront']['distribution_id'])
339
            ;
340
        } else {
341
            $container->removeDefinition('sonata.media.cdn.cloudfront');
342
        }
343
344
        if ($container->hasDefinition('sonata.media.cdn.fallback') && isset($config['cdn']['fallback'])) {
345
            $container->getDefinition('sonata.media.cdn.fallback')
346
                ->replaceArgument(0, new Reference($config['cdn']['fallback']['master']))
347
                ->replaceArgument(1, new Reference($config['cdn']['fallback']['fallback']))
348
            ;
349
        } else {
350
            $container->removeDefinition('sonata.media.cdn.fallback');
351
        }
352
    }
353
354
    /**
355
     * Inject filesystem dependency to default provider.
356
     *
357
     * @param ContainerBuilder $container
358
     * @param array            $config
359
     */
360
    public function configureFilesystemAdapter(ContainerBuilder $container, array $config)
361
    {
362
        // add the default configuration for the local filesystem
363
        if ($container->hasDefinition('sonata.media.adapter.filesystem.local') && isset($config['filesystem']['local'])) {
364
            $container->getDefinition('sonata.media.adapter.filesystem.local')
365
                ->addArgument($config['filesystem']['local']['directory'])
366
                ->addArgument($config['filesystem']['local']['create'])
367
            ;
368
        } else {
369
            $container->removeDefinition('sonata.media.adapter.filesystem.local');
370
        }
371
372
        // add the default configuration for the FTP filesystem
373
        if ($container->hasDefinition('sonata.media.adapter.filesystem.ftp') && isset($config['filesystem']['ftp'])) {
374
            $container->getDefinition('sonata.media.adapter.filesystem.ftp')
375
                ->addArgument($config['filesystem']['ftp']['directory'])
376
                ->addArgument($config['filesystem']['ftp']['host'])
377
                ->addArgument(array(
378
                    'port' => $config['filesystem']['ftp']['port'],
379
                    'username' => $config['filesystem']['ftp']['username'],
380
                    'password' => $config['filesystem']['ftp']['password'],
381
                    'passive' => $config['filesystem']['ftp']['passive'],
382
                    'create' => $config['filesystem']['ftp']['create'],
383
                    'mode' => $config['filesystem']['ftp']['mode'],
384
                ))
385
            ;
386
        } else {
387
            $container->removeDefinition('sonata.media.adapter.filesystem.ftp');
388
            $container->removeDefinition('sonata.media.filesystem.ftp');
389
        }
390
391
        // add the default configuration for the S3 filesystem
392
        if ($container->hasDefinition('sonata.media.adapter.filesystem.s3') && isset($config['filesystem']['s3'])) {
393
            $container->getDefinition('sonata.media.adapter.filesystem.s3')
394
                ->replaceArgument(0, new Reference('sonata.media.adapter.service.s3'))
395
                ->replaceArgument(1, $config['filesystem']['s3']['bucket'])
396
                ->replaceArgument(2, array('create' => $config['filesystem']['s3']['create'], 'region' => $config['filesystem']['s3']['region'], 'directory' => $config['filesystem']['s3']['directory'], 'ACL' => $config['filesystem']['s3']['acl']))
397
            ;
398
399
            $container->getDefinition('sonata.media.metadata.amazon')
400
                ->addArgument(array(
401
                        'acl' => $config['filesystem']['s3']['acl'],
402
                        'storage' => $config['filesystem']['s3']['storage'],
403
                        'encryption' => $config['filesystem']['s3']['encryption'],
404
                        'meta' => $config['filesystem']['s3']['meta'],
405
                        'cache_control' => $config['filesystem']['s3']['cache_control'],
406
                ))
407
            ;
408
409
            $container->getDefinition('sonata.media.adapter.service.s3')
410
                ->replaceArgument(0, array(
411
                    'secret' => $config['filesystem']['s3']['secretKey'],
412
                    'key' => $config['filesystem']['s3']['accessKey'],
413
                    'region' => $config['filesystem']['s3']['region'],
414
                ))
415
            ;
416
        } else {
417
            $container->removeDefinition('sonata.media.adapter.filesystem.s3');
418
            $container->removeDefinition('sonata.media.filesystem.s3');
419
        }
420
421
        if ($container->hasDefinition('sonata.media.adapter.filesystem.replicate') && isset($config['filesystem']['replicate'])) {
422
            $container->getDefinition('sonata.media.adapter.filesystem.replicate')
423
                ->replaceArgument(0, new Reference($config['filesystem']['replicate']['master']))
424
                ->replaceArgument(1, new Reference($config['filesystem']['replicate']['slave']))
425
            ;
426
        } else {
427
            $container->removeDefinition('sonata.media.adapter.filesystem.replicate');
428
            $container->removeDefinition('sonata.media.filesystem.replicate');
429
        }
430
431
        if ($container->hasDefinition('sonata.media.adapter.filesystem.mogilefs') && isset($config['filesystem']['mogilefs'])) {
432
            $container->getDefinition('sonata.media.adapter.filesystem.mogilefs')
433
                ->replaceArgument(0, $config['filesystem']['mogilefs']['domain'])
434
                ->replaceArgument(1, $config['filesystem']['mogilefs']['hosts'])
435
            ;
436
        } else {
437
            $container->removeDefinition('sonata.media.adapter.filesystem.mogilefs');
438
            $container->removeDefinition('sonata.media.filesystem.mogilefs');
439
        }
440
441
        if ($container->hasDefinition('sonata.media.adapter.filesystem.opencloud') &&
442
            (isset($config['filesystem']['openstack']) || isset($config['filesystem']['rackspace']))) {
443
            if (isset($config['filesystem']['openstack'])) {
444
                $container->setParameter('sonata.media.adapter.filesystem.opencloud.class', 'OpenCloud\OpenStack');
445
                $settings = 'openstack';
446
            } else {
447
                $container->setParameter('sonata.media.adapter.filesystem.opencloud.class', 'OpenCloud\Rackspace');
448
                $settings = 'rackspace';
449
            }
450
            $container->getDefinition('sonata.media.adapter.filesystem.opencloud.connection')
451
                ->replaceArgument(0, $config['filesystem'][$settings]['url'])
452
                ->replaceArgument(1, $config['filesystem'][$settings]['secret'])
453
                ;
454
            $container->getDefinition('sonata.media.adapter.filesystem.opencloud')
455
                ->replaceArgument(1, $config['filesystem'][$settings]['containerName'])
456
                ->replaceArgument(2, $config['filesystem'][$settings]['create_container']);
457
            $container->getDefinition('sonata.media.adapter.filesystem.opencloud.objectstore')
458
                ->replaceArgument(1, $config['filesystem'][$settings]['region']);
459
        } else {
460
            $container->removeDefinition('sonata.media.adapter.filesystem.opencloud');
461
            $container->removeDefinition('sonata.media.adapter.filesystem.opencloud.connection');
462
            $container->removeDefinition('sonata.media.adapter.filesystem.opencloud.objectstore');
463
            $container->removeDefinition('sonata.media.filesystem.opencloud');
464
        }
465
    }
466
467
    /**
468
     * @param ContainerBuilder $container
469
     * @param array            $config
470
     */
471
    public function configureExtra(ContainerBuilder $container, array $config)
472
    {
473
        if ($config['pixlr']['enabled']) {
474
            $container->getDefinition('sonata.media.extra.pixlr')
475
                ->replaceArgument(0, $config['pixlr']['referrer'])
476
                ->replaceArgument(1, $config['pixlr']['secret'])
477
            ;
478
        } else {
479
            $container->removeDefinition('sonata.media.extra.pixlr');
480
        }
481
    }
482
483
    /**
484
     * Add class to compile.
485
     */
486
    public function configureClassesToCompile()
487
    {
488
        $this->addClassesToCompile(array(
489
            'Sonata\\MediaBundle\\CDN\\CDNInterface',
490
            'Sonata\\MediaBundle\\CDN\\CloudFront',
491
            'Sonata\\MediaBundle\\CDN\\Fallback',
492
            'Sonata\\MediaBundle\\CDN\\PantherPortal',
493
            'Sonata\\MediaBundle\\CDN\\Server',
494
            'Sonata\\MediaBundle\\Extra\\Pixlr',
495
            'Sonata\\MediaBundle\\Filesystem\\Local',
496
            'Sonata\\MediaBundle\\Filesystem\\Replicate',
497
            'Sonata\\MediaBundle\\Generator\\DefaultGenerator',
498
            'Sonata\\MediaBundle\\Generator\\GeneratorInterface',
499
            'Sonata\\MediaBundle\\Generator\\ODMGenerator',
500
            'Sonata\\MediaBundle\\Generator\\PHPCRGenerator',
501
            'Sonata\\MediaBundle\\Metadata\\AmazonMetadataBuilder',
502
            'Sonata\\MediaBundle\\Metadata\\MetadataBuilderInterface',
503
            'Sonata\\MediaBundle\\Metadata\\NoopMetadataBuilder',
504
            'Sonata\\MediaBundle\\Metadata\\ProxyMetadataBuilder',
505
            'Sonata\\MediaBundle\\Model\\Gallery',
506
            'Sonata\\MediaBundle\\Model\\GalleryItem',
507
            'Sonata\\MediaBundle\\Model\\GalleryItemInterface',
508
            'Sonata\\MediaBundle\\Model\\GalleryInterface',
509
            'Sonata\\MediaBundle\\Model\\GalleryManager',
510
            'Sonata\\MediaBundle\\Model\\GalleryManagerInterface',
511
            'Sonata\\MediaBundle\\Model\\Media',
512
            'Sonata\\MediaBundle\\Model\\MediaInterface',
513
            'Sonata\\MediaBundle\\Model\\MediaManagerInterface',
514
            'Sonata\\MediaBundle\\Provider\\BaseProvider',
515
            'Sonata\\MediaBundle\\Provider\\BaseVideoProvider',
516
            'Sonata\\MediaBundle\\Provider\\DailyMotionProvider',
517
            'Sonata\\MediaBundle\\Provider\\FileProvider',
518
            'Sonata\\MediaBundle\\Provider\\ImageProvider',
519
            'Sonata\\MediaBundle\\Provider\\MediaProviderInterface',
520
            'Sonata\\MediaBundle\\Provider\\Pool',
521
            'Sonata\\MediaBundle\\Provider\\VimeoProvider',
522
            'Sonata\\MediaBundle\\Provider\\YouTubeProvider',
523
            'Sonata\\MediaBundle\\Resizer\\ResizerInterface',
524
            'Sonata\\MediaBundle\\Resizer\\SimpleResizer',
525
            'Sonata\\MediaBundle\\Resizer\\SquareResizer',
526
            'Sonata\\MediaBundle\\Security\\DownloadStrategyInterface',
527
            'Sonata\\MediaBundle\\Security\\ForbiddenDownloadStrategy',
528
            'Sonata\\MediaBundle\\Security\\PublicDownloadStrategy',
529
            'Sonata\\MediaBundle\\Security\\RolesDownloadStrategy',
530
            'Sonata\\MediaBundle\\Security\\SessionDownloadStrategy',
531
            'Sonata\\MediaBundle\\Templating\\Helper\\MediaHelper',
532
            'Sonata\\MediaBundle\\Thumbnail\\ConsumerThumbnail',
533
            'Sonata\\MediaBundle\\Thumbnail\\FormatThumbnail',
534
            'Sonata\\MediaBundle\\Thumbnail\\ThumbnailInterface',
535
            'Sonata\\MediaBundle\\Twig\\Extension\\MediaExtension',
536
            'Sonata\\MediaBundle\\Twig\\Node\\MediaNode',
537
            'Sonata\\MediaBundle\\Twig\\Node\\PathNode',
538
            'Sonata\\MediaBundle\\Twig\\Node\\ThumbnailNode',
539
        ));
540
    }
541
542
    /**
543
     * Sets category and category manager in media bundle.
544
     *
545
     * @param ContainerBuilder $container
546
     * @param array            $config
547
     */
548
    private function configureCategoryInMedia(ContainerBuilder $container, array $config)
549
    {
550
        if (!$this->isClassificationEnabled($config)) {
551
            return;
552
        }
553
554
        $container->setAlias('sonata.media.manager.category', $config['category_manager'] ?: 'sonata.media.manager.category.default');
555
556
        if (null === $config['class']['category']) {
557
            $config['class']['category'] = 'Application\\Sonata\\ClassificationBundle\\Entity\\Category';
558
        }
559
    }
560
561
    /**
562
     * Checks if the classification of media is enabled.
563
     *
564
     * @param array $config
565
     *
566
     * @return bool
567
     */
568
    private function isClassificationEnabled(array $config)
569
    {
570
        return !$config['force_disable_category'] &&
571
            (null !== $config['category_manager'] || interface_exists('Sonata\ClassificationBundle\Model\CategoryInterface'));
572
    }
573
}
574