Completed
Push — master ( 9e6421...863a2e )
by Grégoire
11s
created

SonataMediaExtension::prepend()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 4
nc 2
nop 1
dl 0
loc 9
rs 9.6666
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\Definition;
19
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
20
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
21
use Symfony\Component\DependencyInjection\Reference;
22
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
23
24
/**
25
 * @author Thomas Rabaix <[email protected]>
26
 */
27
class SonataMediaExtension extends Extension implements PrependExtensionInterface
28
{
29
    /**
30
     * @var array
31
     */
32
    private $bundleConfigs;
33
34
    /**
35
     * {@inheritdoc}
36
     */
37
    public function load(array $configs, ContainerBuilder $container)
38
    {
39
        $processor = new Processor();
40
        $configuration = new Configuration();
41
        $config = $processor->processConfiguration($configuration, $configs);
42
43
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
44
        $loader->load('provider.xml');
45
        $loader->load('media.xml');
46
        $loader->load('twig.xml');
47
        $loader->load('security.xml');
48
        $loader->load('extra.xml');
49
        $loader->load('form.xml');
50
        $loader->load('gaufrette.xml');
51
        $loader->load('validators.xml');
52
        $loader->load('serializer.xml');
53
54
        if (!in_array(strtolower($config['db_driver']), array('doctrine_orm', 'doctrine_mongodb', 'doctrine_phpcr'))) {
55
            throw new \InvalidArgumentException(sprintf('SonataMediaBundle - Invalid db driver "%s".', $config['db_driver']));
56
        }
57
58
        $bundles = $container->getParameter('kernel.bundles');
59
60
        if (isset($bundles['FOSRestBundle']) && isset($bundles['NelmioApiDocBundle'])) {
61
            $loader->load(sprintf('api_form_%s.xml', $config['db_driver']));
62
63
            if ('doctrine_orm' == $config['db_driver']) {
64
                $loader->load('api_controllers.xml');
65
            }
66
        }
67
68
        if (isset($bundles['SonataNotificationBundle'])) {
69
            $loader->load('consumer.xml');
70
        }
71
72
        if (isset($bundles['SonataFormatterBundle'])) {
73
            $loader->load('formatter.xml');
74
        }
75
76
        if (isset($bundles['SonataBlockBundle'])) {
77
            $loader->load('block.xml');
78
        }
79
80
        if (isset($bundles['SonataSeoBundle'])) {
81
            $loader->load('seo_block.xml');
82
        }
83
84
        if (!isset($bundles['LiipImagineBundle'])) {
85
            $container->removeDefinition('sonata.media.thumbnail.liip_imagine');
86
        }
87
88
        if ($this->isClassificationEnabled($config)) {
89
            $loader->load('category.xml');
90
            $container->setAlias('sonata.media.manager.category', $config['category_manager']);
91
        }
92
93
        if (!array_key_exists($config['default_context'], $config['contexts'])) {
94
            throw new \InvalidArgumentException(sprintf('SonataMediaBundle - Invalid default context : %s, available : %s', $config['default_context'], json_encode(array_keys($config['contexts']))));
95
        }
96
97
        $loader->load(sprintf('%s.xml', $config['db_driver']));
98
99
        if (isset($bundles['SonataAdminBundle'])) {
100
            $loader->load(sprintf('%s_admin.xml', $config['db_driver']));
101
102
            $sonataAdminConfig = $this->bundleConfigs['SonataAdminBundle'];
103
104
            $sonataRoles = array();
105
            if (isset($sonataAdminConfig['security']['role_admin'])) {
106
                $sonataRoles[] = $sonataAdminConfig['security']['role_admin'];
107
            } else {
108
                $sonataRoles[] = 'ROLE_ADMIN';
109
            }
110
111
            if (isset($sonataAdminConfig['security']['role_super_admin'])) {
112
                $sonataRoles[] = $sonataAdminConfig['security']['role_super_admin'];
113
            } else {
114
                $sonataRoles[] = 'ROLE_SUPER_ADMIN';
115
            }
116
117
            $container->getDefinition('sonata.media.security.superadmin_strategy')
118
                ->replaceArgument(2, $sonataRoles);
119
        }
120
121
        $this->configureFilesystemAdapter($container, $config);
122
        $this->configureCdnAdapter($container, $config);
123
124
        $pool = $container->getDefinition('sonata.media.pool');
125
        $pool->replaceArgument(0, $config['default_context']);
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('addDownloadStrategy', 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->configureAdapters($container, $config);
160
        $this->configureResizers($container, $config);
161
        $this->configureClassesToCompile();
162
    }
163
164
    /**
165
     * @param ContainerBuilder $container
166
     * @param array            $config
167
     */
168
    public function configureProviders(ContainerBuilder $container, array $config)
169
    {
170
        $container->getDefinition('sonata.media.provider.image')
171
            ->replaceArgument(5, array_map('strtolower', $config['providers']['image']['allowed_extensions']))
172
            ->replaceArgument(6, $config['providers']['image']['allowed_mime_types'])
173
            ->replaceArgument(7, new Reference($config['providers']['image']['adapter']))
174
        ;
175
176
        $container->getDefinition('sonata.media.provider.file')
177
            ->replaceArgument(5, $config['providers']['file']['allowed_extensions'])
178
            ->replaceArgument(6, $config['providers']['file']['allowed_mime_types'])
179
        ;
180
181
        $container->getDefinition('sonata.media.provider.youtube')->replaceArgument(7, $config['providers']['youtube']['html5']);
182
    }
183
184
    /**
185
     * @param ContainerBuilder $container
186
     * @param array            $config
187
     */
188
    public function configureBuzz(ContainerBuilder $container, array $config)
189
    {
190
        $container->getDefinition('sonata.media.buzz.browser')
191
            ->replaceArgument(0, new Reference($config['buzz']['connector']));
192
193
        foreach (array(
194
            'sonata.media.buzz.connector.curl',
195
            'sonata.media.buzz.connector.file_get_contents',
196
        ) as $connector) {
197
            $container->getDefinition($connector)
198
                ->addMethodCall('setIgnoreErrors', array($config['buzz']['client']['ignore_errors']))
199
                ->addMethodCall('setMaxRedirects', array($config['buzz']['client']['max_redirects']))
200
                ->addMethodCall('setTimeout', array($config['buzz']['client']['timeout']))
201
                ->addMethodCall('setVerifyPeer', array($config['buzz']['client']['verify_peer']))
202
                ->addMethodCall('setProxy', array($config['buzz']['client']['proxy']));
203
        }
204
    }
205
206
    /**
207
     * @param ContainerBuilder $container
208
     * @param array            $config
209
     */
210
    public function configureParameterClass(ContainerBuilder $container, array $config)
211
    {
212
        $container->setParameter('sonata.media.admin.media.entity', $config['class']['media']);
213
        $container->setParameter('sonata.media.admin.gallery.entity', $config['class']['gallery']);
214
        $container->setParameter('sonata.media.admin.gallery_item.entity', $config['class']['gallery_item']);
215
216
        $container->setParameter('sonata.media.media.class', $config['class']['media']);
217
        $container->setParameter('sonata.media.gallery.class', $config['class']['gallery']);
218
219
        $container->getDefinition('sonata.media.form.type.media')->replaceArgument(1, $config['class']['media']);
220
    }
221
222
    /**
223
     * @param array $config
224
     */
225
    public function registerDoctrineMapping(array $config)
226
    {
227
        $collector = DoctrineCollector::getInstance();
228
229
        $collector->addAssociation($config['class']['media'], 'mapOneToMany', array(
230
            'fieldName' => 'galleryItems',
231
            'targetEntity' => $config['class']['gallery_item'],
232
            'cascade' => array(
233
                'persist',
234
            ),
235
            'mappedBy' => 'media',
236
            'orphanRemoval' => false,
237
        ));
238
239
        $collector->addAssociation($config['class']['gallery_item'], 'mapManyToOne', array(
240
            'fieldName' => 'gallery',
241
            'targetEntity' => $config['class']['gallery'],
242
            'cascade' => array(
243
                'persist',
244
            ),
245
            'mappedBy' => null,
246
            'inversedBy' => 'galleryItems',
247
            'joinColumns' => array(
248
                array(
249
                    'name' => 'gallery_id',
250
                    'referencedColumnName' => 'id',
251
                    'onDelete' => 'CASCADE',
252
                ),
253
            ),
254
            'orphanRemoval' => false,
255
        ));
256
257
        $collector->addAssociation($config['class']['gallery_item'], 'mapManyToOne', array(
258
            'fieldName' => 'media',
259
            'targetEntity' => $config['class']['media'],
260
            'cascade' => array(
261
                 'persist',
262
            ),
263
            'mappedBy' => null,
264
            'inversedBy' => 'galleryItems',
265
            'joinColumns' => array(
266
                array(
267
                    'name' => 'media_id',
268
                    'referencedColumnName' => 'id',
269
                    'onDelete' => 'CASCADE',
270
                ),
271
            ),
272
            'orphanRemoval' => false,
273
        ));
274
275
        $collector->addAssociation($config['class']['gallery'], 'mapOneToMany', array(
276
            'fieldName' => 'galleryItems',
277
            'targetEntity' => $config['class']['gallery_item'],
278
            'cascade' => array(
279
                'persist',
280
            ),
281
            'mappedBy' => 'gallery',
282
            'orphanRemoval' => true,
283
            'orderBy' => array(
284
                'position' => 'ASC',
285
            ),
286
        ));
287
288
        if ($this->isClassificationEnabled($config)) {
289
            $collector->addAssociation($config['class']['media'], 'mapManyToOne', array(
290
                'fieldName' => 'category',
291
                'targetEntity' => $config['class']['category'],
292
                'cascade' => array(
293
                    'persist',
294
                ),
295
                'mappedBy' => null,
296
                'inversedBy' => null,
297
                'joinColumns' => array(
298
                    array(
299
                     'name' => 'category_id',
300
                     'referencedColumnName' => 'id',
301
                     'onDelete' => 'SET NULL',
302
                    ),
303
                ),
304
                'orphanRemoval' => false,
305
            ));
306
        }
307
    }
308
309
    /**
310
     * Inject CDN dependency to default provider.
311
     *
312
     * @param ContainerBuilder $container
313
     * @param array            $config
314
     */
315
    public function configureCdnAdapter(ContainerBuilder $container, array $config)
316
    {
317
        // add the default configuration for the server cdn
318
        if ($container->hasDefinition('sonata.media.cdn.server') && isset($config['cdn']['server'])) {
319
            $container->getDefinition('sonata.media.cdn.server')
320
                ->replaceArgument(0, $config['cdn']['server']['path'])
321
            ;
322
        } else {
323
            $container->removeDefinition('sonata.media.cdn.server');
324
        }
325
326
        if ($container->hasDefinition('sonata.media.cdn.panther') && isset($config['cdn']['panther'])) {
327
            $container->getDefinition('sonata.media.cdn.panther')
328
                ->replaceArgument(0, $config['cdn']['panther']['path'])
329
                ->replaceArgument(1, $config['cdn']['panther']['username'])
330
                ->replaceArgument(2, $config['cdn']['panther']['password'])
331
                ->replaceArgument(3, $config['cdn']['panther']['site_id'])
332
            ;
333
        } else {
334
            $container->removeDefinition('sonata.media.cdn.panther');
335
        }
336
337
        if ($container->hasDefinition('sonata.media.cdn.cloudfront') && isset($config['cdn']['cloudfront'])) {
338
            $container->getDefinition('sonata.media.cdn.cloudfront')
339
                ->replaceArgument(0, $config['cdn']['cloudfront']['path'])
340
                ->replaceArgument(1, $config['cdn']['cloudfront']['key'])
341
                ->replaceArgument(2, $config['cdn']['cloudfront']['secret'])
342
                ->replaceArgument(3, $config['cdn']['cloudfront']['distribution_id'])
343
            ;
344
        } else {
345
            $container->removeDefinition('sonata.media.cdn.cloudfront');
346
        }
347
348
        if ($container->hasDefinition('sonata.media.cdn.fallback') && isset($config['cdn']['fallback'])) {
349
            $container->getDefinition('sonata.media.cdn.fallback')
350
                ->replaceArgument(0, new Reference($config['cdn']['fallback']['master']))
351
                ->replaceArgument(1, new Reference($config['cdn']['fallback']['fallback']))
352
            ;
353
        } else {
354
            $container->removeDefinition('sonata.media.cdn.fallback');
355
        }
356
    }
357
358
    /**
359
     * Inject filesystem dependency to default provider.
360
     *
361
     * @param ContainerBuilder $container
362
     * @param array            $config
363
     */
364
    public function configureFilesystemAdapter(ContainerBuilder $container, array $config)
365
    {
366
        // add the default configuration for the local filesystem
367
        if ($container->hasDefinition('sonata.media.adapter.filesystem.local') && isset($config['filesystem']['local'])) {
368
            $container->getDefinition('sonata.media.adapter.filesystem.local')
369
                ->addArgument($config['filesystem']['local']['directory'])
370
                ->addArgument($config['filesystem']['local']['create'])
371
            ;
372
        } else {
373
            $container->removeDefinition('sonata.media.adapter.filesystem.local');
374
        }
375
376
        // add the default configuration for the FTP filesystem
377
        if ($container->hasDefinition('sonata.media.adapter.filesystem.ftp') && isset($config['filesystem']['ftp'])) {
378
            $container->getDefinition('sonata.media.adapter.filesystem.ftp')
379
                ->addArgument($config['filesystem']['ftp']['directory'])
380
                ->addArgument($config['filesystem']['ftp']['host'])
381
                ->addArgument(array(
382
                    'port' => $config['filesystem']['ftp']['port'],
383
                    'username' => $config['filesystem']['ftp']['username'],
384
                    'password' => $config['filesystem']['ftp']['password'],
385
                    'passive' => $config['filesystem']['ftp']['passive'],
386
                    'create' => $config['filesystem']['ftp']['create'],
387
                    'mode' => $config['filesystem']['ftp']['mode'],
388
                ))
389
            ;
390
        } else {
391
            $container->removeDefinition('sonata.media.adapter.filesystem.ftp');
392
            $container->removeDefinition('sonata.media.filesystem.ftp');
393
        }
394
395
        // add the default configuration for the S3 filesystem
396
        if ($container->hasDefinition('sonata.media.adapter.filesystem.s3') && isset($config['filesystem']['s3'])) {
397
            $container->getDefinition('sonata.media.adapter.filesystem.s3')
398
                ->replaceArgument(0, new Reference('sonata.media.adapter.service.s3'))
399
                ->replaceArgument(1, $config['filesystem']['s3']['bucket'])
400
                ->replaceArgument(2, array('create' => $config['filesystem']['s3']['create'], 'region' => $config['filesystem']['s3']['region'], 'directory' => $config['filesystem']['s3']['directory'], 'ACL' => $config['filesystem']['s3']['acl']))
401
            ;
402
403
            $container->getDefinition('sonata.media.metadata.amazon')
404
                ->addArgument(array(
405
                        'acl' => $config['filesystem']['s3']['acl'],
406
                        'storage' => $config['filesystem']['s3']['storage'],
407
                        'encryption' => $config['filesystem']['s3']['encryption'],
408
                        'meta' => $config['filesystem']['s3']['meta'],
409
                        'cache_control' => $config['filesystem']['s3']['cache_control'],
410
                ))
411
            ;
412
413
            if (3 === $config['filesystem']['s3']['sdk_version']) {
414
                $container->getDefinition('sonata.media.adapter.service.s3')
415
                ->replaceArgument(0, array(
416
                    'credentials' => array(
417
                        'secret' => $config['filesystem']['s3']['secretKey'],
418
                        'key' => $config['filesystem']['s3']['accessKey'],
419
                    ),
420
                    'region' => $config['filesystem']['s3']['region'],
421
                    'version' => $config['filesystem']['s3']['version'],
422
                ))
423
            ;
424
            } else {
425
                $container->getDefinition('sonata.media.adapter.service.s3')
426
                    ->replaceArgument(0, array(
427
                        'secret' => $config['filesystem']['s3']['secretKey'],
428
                        'key' => $config['filesystem']['s3']['accessKey'],
429
                    ))
430
                ;
431
            }
432
        } else {
433
            $container->removeDefinition('sonata.media.adapter.filesystem.s3');
434
            $container->removeDefinition('sonata.media.filesystem.s3');
435
        }
436
437
        if ($container->hasDefinition('sonata.media.adapter.filesystem.replicate') && isset($config['filesystem']['replicate'])) {
438
            $container->getDefinition('sonata.media.adapter.filesystem.replicate')
439
                ->replaceArgument(0, new Reference($config['filesystem']['replicate']['master']))
440
                ->replaceArgument(1, new Reference($config['filesystem']['replicate']['slave']))
441
            ;
442
        } else {
443
            $container->removeDefinition('sonata.media.adapter.filesystem.replicate');
444
            $container->removeDefinition('sonata.media.filesystem.replicate');
445
        }
446
447
        if ($container->hasDefinition('sonata.media.adapter.filesystem.mogilefs') && isset($config['filesystem']['mogilefs'])) {
448
            $container->getDefinition('sonata.media.adapter.filesystem.mogilefs')
449
                ->replaceArgument(0, $config['filesystem']['mogilefs']['domain'])
450
                ->replaceArgument(1, $config['filesystem']['mogilefs']['hosts'])
451
            ;
452
        } else {
453
            $container->removeDefinition('sonata.media.adapter.filesystem.mogilefs');
454
            $container->removeDefinition('sonata.media.filesystem.mogilefs');
455
        }
456
457
        if ($container->hasDefinition('sonata.media.adapter.filesystem.opencloud') &&
458
            (isset($config['filesystem']['openstack']) || isset($config['filesystem']['rackspace']))) {
459
            if (isset($config['filesystem']['openstack'])) {
460
                $container->setParameter('sonata.media.adapter.filesystem.opencloud.class', 'OpenCloud\OpenStack');
461
                $settings = 'openstack';
462
            } else {
463
                $container->setParameter('sonata.media.adapter.filesystem.opencloud.class', 'OpenCloud\Rackspace');
464
                $settings = 'rackspace';
465
            }
466
            $container->getDefinition('sonata.media.adapter.filesystem.opencloud.connection')
467
                ->replaceArgument(0, $config['filesystem'][$settings]['url'])
468
                ->replaceArgument(1, $config['filesystem'][$settings]['secret'])
469
                ;
470
            $container->getDefinition('sonata.media.adapter.filesystem.opencloud')
471
                ->replaceArgument(1, $config['filesystem'][$settings]['containerName'])
472
                ->replaceArgument(2, $config['filesystem'][$settings]['create_container']);
473
            $container->getDefinition('sonata.media.adapter.filesystem.opencloud.objectstore')
474
                ->replaceArgument(1, $config['filesystem'][$settings]['region']);
475
        } else {
476
            $container->removeDefinition('sonata.media.adapter.filesystem.opencloud');
477
            $container->removeDefinition('sonata.media.adapter.filesystem.opencloud.connection');
478
            $container->removeDefinition('sonata.media.adapter.filesystem.opencloud.objectstore');
479
            $container->removeDefinition('sonata.media.filesystem.opencloud');
480
        }
481
    }
482
483
    /**
484
     * @param ContainerBuilder $container
485
     * @param array            $config
486
     */
487
    public function configureExtra(ContainerBuilder $container, array $config)
488
    {
489
        if ($config['pixlr']['enabled']) {
490
            $container->getDefinition('sonata.media.extra.pixlr')
491
                ->replaceArgument(0, $config['pixlr']['referrer'])
492
                ->replaceArgument(1, $config['pixlr']['secret'])
493
            ;
494
        } else {
495
            $container->removeDefinition('sonata.media.extra.pixlr');
496
        }
497
    }
498
499
    /**
500
     * Add class to compile.
501
     */
502
    public function configureClassesToCompile()
503
    {
504
        if (\PHP_VERSION_ID >= 70000) {
505
            return;
506
        }
507
508
        $this->addClassesToCompile(array(
0 ignored issues
show
Deprecated Code introduced by
The method Symfony\Component\HttpKe...::addClassesToCompile() has been deprecated with message: since version 3.3, to be removed in 4.0.

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
509
            'Sonata\\MediaBundle\\CDN\\CDNInterface',
510
            'Sonata\\MediaBundle\\CDN\\CloudFront',
511
            'Sonata\\MediaBundle\\CDN\\Fallback',
512
            'Sonata\\MediaBundle\\CDN\\PantherPortal',
513
            'Sonata\\MediaBundle\\CDN\\Server',
514
            'Sonata\\MediaBundle\\Extra\\Pixlr',
515
            'Sonata\\MediaBundle\\Filesystem\\Local',
516
            'Sonata\\MediaBundle\\Filesystem\\Replicate',
517
            'Sonata\\MediaBundle\\Generator\\DefaultGenerator',
518
            'Sonata\\MediaBundle\\Generator\\GeneratorInterface',
519
            'Sonata\\MediaBundle\\Generator\\ODMGenerator',
520
            'Sonata\\MediaBundle\\Generator\\PHPCRGenerator',
521
            'Sonata\\MediaBundle\\Metadata\\AmazonMetadataBuilder',
522
            'Sonata\\MediaBundle\\Metadata\\MetadataBuilderInterface',
523
            'Sonata\\MediaBundle\\Metadata\\NoopMetadataBuilder',
524
            'Sonata\\MediaBundle\\Metadata\\ProxyMetadataBuilder',
525
            'Sonata\\MediaBundle\\Model\\Gallery',
526
            'Sonata\\MediaBundle\\Model\\GalleryItem',
527
            'Sonata\\MediaBundle\\Model\\GalleryItemInterface',
528
            'Sonata\\MediaBundle\\Model\\GalleryInterface',
529
            'Sonata\\MediaBundle\\Model\\GalleryManager',
530
            'Sonata\\MediaBundle\\Model\\GalleryManagerInterface',
531
            'Sonata\\MediaBundle\\Model\\Media',
532
            'Sonata\\MediaBundle\\Model\\MediaInterface',
533
            'Sonata\\MediaBundle\\Model\\MediaManagerInterface',
534
            'Sonata\\MediaBundle\\Provider\\BaseProvider',
535
            'Sonata\\MediaBundle\\Provider\\BaseVideoProvider',
536
            'Sonata\\MediaBundle\\Provider\\DailyMotionProvider',
537
            'Sonata\\MediaBundle\\Provider\\FileProvider',
538
            'Sonata\\MediaBundle\\Provider\\ImageProvider',
539
            'Sonata\\MediaBundle\\Provider\\MediaProviderInterface',
540
            'Sonata\\MediaBundle\\Provider\\Pool',
541
            'Sonata\\MediaBundle\\Provider\\VimeoProvider',
542
            'Sonata\\MediaBundle\\Provider\\YouTubeProvider',
543
            'Sonata\\MediaBundle\\Resizer\\ResizerInterface',
544
            'Sonata\\MediaBundle\\Resizer\\SimpleResizer',
545
            'Sonata\\MediaBundle\\Resizer\\SquareResizer',
546
            'Sonata\\MediaBundle\\Security\\DownloadStrategyInterface',
547
            'Sonata\\MediaBundle\\Security\\ForbiddenDownloadStrategy',
548
            'Sonata\\MediaBundle\\Security\\PublicDownloadStrategy',
549
            'Sonata\\MediaBundle\\Security\\RolesDownloadStrategy',
550
            'Sonata\\MediaBundle\\Security\\SessionDownloadStrategy',
551
            'Sonata\\MediaBundle\\Templating\\Helper\\MediaHelper',
552
            'Sonata\\MediaBundle\\Thumbnail\\ConsumerThumbnail',
553
            'Sonata\\MediaBundle\\Thumbnail\\FormatThumbnail',
554
            'Sonata\\MediaBundle\\Thumbnail\\ThumbnailInterface',
555
            'Sonata\\MediaBundle\\Twig\\Extension\\MediaExtension',
556
        ));
557
    }
558
559
    /**
560
     * Allow an extension to prepend the extension configurations.
561
     *
562
     * @param ContainerBuilder $container
563
     */
564
    public function prepend(ContainerBuilder $container)
565
    {
566
        $bundles = $container->getParameter('kernel.bundles');
567
568
        // Store SonataAdminBundle configuration for later use
569
        if (isset($bundles['SonataAdminBundle'])) {
570
            $this->bundleConfigs['SonataAdminBundle'] = current($container->getExtensionConfig('sonata_admin'));
571
        }
572
    }
573
574
    /**
575
     * Checks if the classification of media is enabled.
576
     *
577
     * @param array $config
578
     *
579
     * @return bool
580
     */
581
    private function isClassificationEnabled(array $config)
582
    {
583
        return interface_exists('Sonata\ClassificationBundle\Model\CategoryInterface')
584
            && !$config['force_disable_category'];
585
    }
586
587
    /**
588
     * @param ContainerBuilder $container
589
     * @param array            $config
590
     */
591
    private function configureAdapters(ContainerBuilder $container, array $config)
592
    {
593
        foreach (array('gd', 'imagick', 'gmagick') as $adapter) {
594
            if ($container->hasParameter('sonata.media.adapter.image.'.$adapter.'.class')) {
595
                $container->register('sonata.media.adapter.image.'.$adapter, $container->getParameter('sonata.media.adapter.image.'.$adapter.'.class'));
596
            }
597
        }
598
        $container->setAlias('sonata.media.adapter.image.default', $config['adapters']['default']);
599
    }
600
601
    /**
602
     * @param ContainerBuilder $container
603
     * @param array            $config
604
     */
605
    private function configureResizers(ContainerBuilder $container, array $config)
606
    {
607
        if ($container->hasParameter('sonata.media.resizer.simple.class')) {
608
            $class = $container->getParameter('sonata.media.resizer.simple.class');
609
            $definition = new Definition($class, array(
610
                new Reference('sonata.media.adapter.image.default'),
611
                '%sonata.media.resizer.simple.adapter.mode%',
612
                new Reference('sonata.media.metadata.proxy'),
613
            ));
614
            $container->setDefinition('sonata.media.resizer.simple', $definition);
615
        }
616
617
        if ($container->hasParameter('sonata.media.resizer.square.class')) {
618
            $class = $container->getParameter('sonata.media.resizer.square.class');
619
            $definition = new Definition($class, array(
620
                new Reference('sonata.media.adapter.image.default'),
621
                '%sonata.media.resizer.square.adapter.mode%',
622
                new Reference('sonata.media.metadata.proxy'),
623
            ));
624
            $container->setDefinition('sonata.media.resizer.square', $definition);
625
        }
626
627
        $container->setAlias('sonata.media.resizer.default', $config['resizers']['default']);
628
    }
629
}
630