vendor/liip/imagine-bundle/DependencyInjection/LiipImagineExtension.php line 53

Open in your IDE?
  1. <?php
  2. /*
  3. * This file is part of the `liip/LiipImagineBundle` project.
  4. *
  5. * (c) https://github.com/liip/LiipImagineBundle/graphs/contributors
  6. *
  7. * For the full copyright and license information, please view the LICENSE.md
  8. * file that was distributed with this source code.
  9. */
  10. namespace Liip\ImagineBundle\DependencyInjection;
  11. use Liip\ImagineBundle\DependencyInjection\Factory\Loader\LoaderFactoryInterface;
  12. use Liip\ImagineBundle\DependencyInjection\Factory\Resolver\ResolverFactoryInterface;
  13. use Liip\ImagineBundle\Imagine\Cache\CacheManager;
  14. use Liip\ImagineBundle\Imagine\Data\DataManager;
  15. use Liip\ImagineBundle\Imagine\Filter\FilterManager;
  16. use Symfony\Component\Config\FileLocator;
  17. use Symfony\Component\DependencyInjection\Alias;
  18. use Symfony\Component\DependencyInjection\ContainerBuilder;
  19. use Symfony\Component\DependencyInjection\Definition;
  20. use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
  21. use Symfony\Component\HttpKernel\DependencyInjection\Extension;
  22. use Symfony\Component\Mime\MimeTypeGuesserInterface;
  23. use Symfony\Component\Mime\MimeTypes;
  24. class LiipImagineExtension extends Extension
  25. {
  26. /**
  27. * @var ResolverFactoryInterface[]
  28. */
  29. private $resolversFactories = [];
  30. /**
  31. * @var LoaderFactoryInterface[]
  32. */
  33. private $loadersFactories = [];
  34. public function addResolverFactory(ResolverFactoryInterface $resolverFactory)
  35. {
  36. $this->resolversFactories[$resolverFactory->getName()] = $resolverFactory;
  37. }
  38. public function addLoaderFactory(LoaderFactoryInterface $loaderFactory)
  39. {
  40. $this->loadersFactories[$loaderFactory->getName()] = $loaderFactory;
  41. }
  42. /**
  43. * {@inheritdoc}
  44. */
  45. public function getConfiguration(array $config, ContainerBuilder $container)
  46. {
  47. return new Configuration($this->resolversFactories, $this->loadersFactories);
  48. }
  49. /**
  50. * @see \Symfony\Component\DependencyInjection\Extension.ExtensionInterface::load()
  51. */
  52. public function load(array $configs, ContainerBuilder $container)
  53. {
  54. $config = $this->processConfiguration(
  55. $this->getConfiguration($configs, $container),
  56. $configs
  57. );
  58. if (interface_exists(MimeTypeGuesserInterface::class)) {
  59. $mimeTypes = new Definition(MimeTypes::class);
  60. $mimeTypes->setFactory([MimeTypes::class, 'getDefault']);
  61. $container->setDefinition('liip_imagine.mime_types', $mimeTypes);
  62. }
  63. $container->setParameter('liip_imagine.resolvers', $config['resolvers']);
  64. $container->setParameter('liip_imagine.loaders', $config['loaders']);
  65. $this->loadResolvers($config['resolvers'], $container);
  66. $this->loadLoaders($config['loaders'], $container);
  67. $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
  68. $loader->load('imagine.xml');
  69. $loader->load('commands.xml');
  70. if ($config['enqueue']) {
  71. $loader->load('enqueue.xml');
  72. }
  73. if ($config['templating']) {
  74. $loader->load('templating.xml');
  75. }
  76. $container->setParameter('liip_imagine.driver_service', 'liip_imagine.'.$config['driver']);
  77. $container
  78. ->getDefinition('liip_imagine.controller.config')
  79. ->replaceArgument(0, $config['controller']['redirect_response_code']);
  80. $container->setAlias('liip_imagine', new Alias('liip_imagine.'.$config['driver']));
  81. $container->setAlias(CacheManager::class, new Alias('liip_imagine.cache.manager', false));
  82. $container->setAlias(DataManager::class, new Alias('liip_imagine.data.manager', false));
  83. $container->setAlias(FilterManager::class, new Alias('liip_imagine.filter.manager', false));
  84. $container->setParameter('liip_imagine.cache.resolver.default', $config['cache']);
  85. $container->setParameter('liip_imagine.default_image', $config['default_image']);
  86. $filterSets = $this->createFilterSets($config['default_filter_set_settings'], $config['filter_sets']);
  87. $container->setParameter('liip_imagine.filter_sets', $filterSets);
  88. $container->setParameter('liip_imagine.binary.loader.default', $config['data_loader']);
  89. $container->setParameter('liip_imagine.controller.filter_action', $config['controller']['filter_action']);
  90. $container->setParameter('liip_imagine.controller.filter_runtime_action', $config['controller']['filter_runtime_action']);
  91. $container->setParameter('twig.form.resources', array_merge(
  92. $container->hasParameter('twig.form.resources') ? $container->getParameter('twig.form.resources') : [],
  93. ['@LiipImagine/Form/form_div_layout.html.twig']
  94. ));
  95. if ($container->hasDefinition('liip_imagine.mime_types')) {
  96. $mimeTypes = $container->getDefinition('liip_imagine.mime_types');
  97. $container->getDefinition('liip_imagine.binary.mime_type_guesser')
  98. ->replaceArgument(0, $mimeTypes);
  99. $container->getDefinition('liip_imagine.data.manager')
  100. ->replaceArgument(1, $mimeTypes);
  101. }
  102. $this->deprecationTemplatingFilterHelper($container);
  103. $container->setParameter('liip_imagine.webp.generate', $config['webp']['generate']);
  104. $webpOptions = $config['webp'];
  105. unset($webpOptions['generate']);
  106. $container->setParameter('liip_imagine.webp.options', $webpOptions);
  107. }
  108. private function createFilterSets(array $defaultFilterSets, array $filterSets): array
  109. {
  110. return array_map(function (array $filterSet) use ($defaultFilterSets) {
  111. return array_replace_recursive($defaultFilterSets, $filterSet);
  112. }, $filterSets);
  113. }
  114. private function loadResolvers(array $config, ContainerBuilder $container)
  115. {
  116. $this->createFactories($this->resolversFactories, $config, $container);
  117. }
  118. private function loadLoaders(array $config, ContainerBuilder $container)
  119. {
  120. $this->createFactories($this->loadersFactories, $config, $container);
  121. }
  122. private function createFactories(array $factories, array $configurations, ContainerBuilder $container)
  123. {
  124. foreach ($configurations as $name => $conf) {
  125. $factories[key($conf)]->create($container, $name, $conf[key($conf)]);
  126. }
  127. }
  128. private function deprecationTemplatingFilterHelper(ContainerBuilder $container): void
  129. {
  130. if (!$container->hasDefinition('liip_imagine.templating.filter_helper')) {
  131. return;
  132. }
  133. $message = 'The "%service_id%" service is deprecated since LiipImagineBundle 2.2 and will be removed in 3.0.';
  134. $definition = $container->getDefinition('liip_imagine.templating.filter_helper');
  135. if (method_exists(Definition::class, 'getDeprecation')) {
  136. $definition->setDeprecated('liip/imagine-bundle', '2.2', $message);
  137. } else {
  138. $definition->setDeprecated(true, $message);
  139. }
  140. }
  141. }