Completed
Push — master ( 56e6e4...3e9305 )
by Grégoire
11s
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 Method

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