PageRenderTime 37ms CodeModel.GetById 12ms RepoModel.GetById 1ms app.codeStats 0ms

/vendor/sonata-project/core-bundle/DependencyInjection/SonataCoreExtension.php

https://gitlab.com/cuza/Clinic_Recods
PHP | 166 lines | 112 code | 25 blank | 29 comment | 4 complexity | 648222caed1609b0526154c68ad68b60 MD5 | raw file
  1. <?php
  2. /*
  3. * This file is part of the Sonata Project package.
  4. *
  5. * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Sonata\CoreBundle\DependencyInjection;
  11. use Sonata\CoreBundle\Form\FormHelper;
  12. use Symfony\Component\Config\Definition\Processor;
  13. use Symfony\Component\Config\FileLocator;
  14. use Symfony\Component\DependencyInjection\ContainerBuilder;
  15. use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
  16. use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
  17. use Symfony\Component\HttpKernel\DependencyInjection\Extension;
  18. use Symfony\Component\HttpKernel\Kernel;
  19. /**
  20. * SonataCoreExtension.
  21. *
  22. * @author Thomas Rabaix <thomas.rabaix@sonata-project.org>
  23. */
  24. class SonataCoreExtension extends Extension implements PrependExtensionInterface
  25. {
  26. /**
  27. * {@inheritdoc}
  28. */
  29. public function prepend(ContainerBuilder $container)
  30. {
  31. $configs = $container->getExtensionConfig('sonata_admin');
  32. foreach ($configs as $config) {
  33. if (isset($config['options']['form_type'])) {
  34. $container->prependExtensionConfig(
  35. $this->getAlias(),
  36. array('form_type' => $config['options']['form_type'])
  37. );
  38. }
  39. }
  40. }
  41. /**
  42. * {@inheritdoc}
  43. */
  44. public function load(array $configs, ContainerBuilder $container)
  45. {
  46. $processor = new Processor();
  47. $configuration = new Configuration();
  48. $config = $processor->processConfiguration($configuration, $configs);
  49. $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
  50. $loader->load('date.xml');
  51. $loader->load('flash.xml');
  52. $loader->load('form_types.xml');
  53. $loader->load('validator.xml');
  54. $loader->load('twig.xml');
  55. $loader->load('model_adapter.xml');
  56. $loader->load('core.xml');
  57. $this->registerFlashTypes($container, $config);
  58. $container->setParameter('sonata.core.form_type', $config['form_type']);
  59. $this->configureFormFactory($container, $config);
  60. $this->configureClassesToCompile();
  61. $this->deprecateSlugify($container);
  62. }
  63. public function configureClassesToCompile()
  64. {
  65. $this->addClassesToCompile(array(
  66. 'Sonata\\CoreBundle\\Form\\Type\\BooleanType',
  67. 'Sonata\\CoreBundle\\Form\\Type\\CollectionType',
  68. 'Sonata\\CoreBundle\\Form\\Type\\DateRangeType',
  69. 'Sonata\\CoreBundle\\Form\\Type\\DateTimeRangeType',
  70. 'Sonata\\CoreBundle\\Form\\Type\\EqualType',
  71. 'Sonata\\CoreBundle\\Form\\Type\\ImmutableArrayType',
  72. 'Sonata\\CoreBundle\\Form\\Type\\TranslatableChoiceType',
  73. ));
  74. }
  75. /**
  76. * @param ContainerBuilder $container
  77. * @param array $config
  78. */
  79. public function configureFormFactory(ContainerBuilder $container, array $config)
  80. {
  81. if (!$config['form']['mapping']['enabled'] || version_compare(Kernel::VERSION, '2.8', '<')) {
  82. $container->removeDefinition('sonata.core.form.extension.dependency');
  83. return;
  84. }
  85. $container->setParameter('sonata.core.form.mapping.type', $config['form']['mapping']['type']);
  86. $container->setParameter('sonata.core.form.mapping.extension', $config['form']['mapping']['extension']);
  87. FormHelper::registerFormTypeMapping($config['form']['mapping']['type']);
  88. foreach ($config['form']['mapping']['extension'] as $ext => $idx) {
  89. FormHelper::registerFormExtensionMapping($ext, $idx);
  90. }
  91. $definition = $container->getDefinition('sonata.core.form.extension.dependency');
  92. $definition->replaceArgument(4, FormHelper::getFormTypeMapping());
  93. $definition = $container->getDefinition('sonata.core.form.extension.dependency');
  94. $definition->replaceArgument(5, FormHelper::getFormExtensionMapping());
  95. }
  96. /**
  97. * Registers flash message types defined in configuration to flash manager.
  98. *
  99. * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
  100. * @param array $config
  101. */
  102. public function registerFlashTypes(ContainerBuilder $container, array $config)
  103. {
  104. $mergedConfig = array_merge_recursive($config['flashmessage'], array(
  105. 'success' => array('types' => array(
  106. 'success' => array('domain' => 'SonataCoreBundle'),
  107. 'sonata_flash_success' => array('domain' => 'SonataAdminBundle'),
  108. 'sonata_user_success' => array('domain' => 'SonataUserBundle'),
  109. 'fos_user_success' => array('domain' => 'FOSUserBundle'),
  110. )),
  111. 'warning' => array('types' => array(
  112. 'warning' => array('domain' => 'SonataCoreBundle'),
  113. 'sonata_flash_info' => array('domain' => 'SonataAdminBundle'),
  114. )),
  115. 'danger' => array('types' => array(
  116. 'error' => array('domain' => 'SonataCoreBundle'),
  117. 'sonata_flash_error' => array('domain' => 'SonataAdminBundle'),
  118. 'sonata_user_error' => array('domain' => 'SonataUserBundle'),
  119. )),
  120. ));
  121. $types = $cssClasses = array();
  122. foreach ($mergedConfig as $typeKey => $typeConfig) {
  123. $types[$typeKey] = $typeConfig['types'];
  124. $cssClasses[$typeKey] = array_key_exists('css_class', $typeConfig) ? $typeConfig['css_class'] : $typeKey;
  125. }
  126. $identifier = 'sonata.core.flashmessage.manager';
  127. $definition = $container->getDefinition($identifier);
  128. $definition->replaceArgument(2, $types);
  129. $definition->replaceArgument(3, $cssClasses);
  130. $container->setDefinition($identifier, $definition);
  131. }
  132. protected function deprecateSlugify(ContainerBuilder $container)
  133. {
  134. $definition = $container->getDefinition('sonata.core.slugify.cocur');
  135. if (method_exists($definition, 'setDeprecated')) {
  136. $definition->setDeprecated(true);
  137. $definition = $container->getDefinition('sonata.core.slugify.native');
  138. $definition->setDeprecated(true);
  139. }
  140. }
  141. }