SonataDoctrineORMAdminExtension.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <?php
  2. /*
  3. * This file is part of the Sonata project.
  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\DoctrineORMAdminBundle\DependencyInjection;
  11. use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
  12. use Symfony\Component\DependencyInjection\ContainerBuilder;
  13. use Symfony\Component\DependencyInjection\Reference;
  14. use Symfony\Component\DependencyInjection\Definition;
  15. use Symfony\Component\HttpKernel\DependencyInjection\Extension;
  16. use Symfony\Component\Config\FileLocator;
  17. use Symfony\Component\Config\Resource\FileResource;
  18. use Symfony\Component\Config\Definition\Processor;
  19. /**
  20. * SonataAdminBundleExtension
  21. *
  22. * @author Thomas Rabaix <thomas.rabaix@sonata-project.org>
  23. * @author Michael Williams <michael.williams@funsational.com>
  24. */
  25. class SonataDoctrineORMAdminExtension extends Extension
  26. {
  27. /**
  28. *
  29. * @param array $configs An array of configuration settings
  30. * @param ContainerBuilder $container A ContainerBuilder instance
  31. */
  32. public function load(array $configs, ContainerBuilder $container)
  33. {
  34. $configs = $this->fixTemplatesConfiguration($configs);
  35. $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
  36. $loader->load('doctrine_orm.xml');
  37. $loader->load('doctrine_orm_filter_types.xml');
  38. $loader->load('audit.xml');
  39. $loader->load('security.xml');
  40. $configuration = new Configuration();
  41. $processor = new Processor();
  42. $config = $processor->processConfiguration($configuration, $configs);
  43. $container->setParameter('sonata_doctrine_orm_admin.entity_manager', $config['entity_manager']);
  44. $pool = $container->getDefinition('sonata.admin.manager.orm');
  45. $pool->addMethodCall('__hack_doctrine_orm__', $config);
  46. // activate Entity audit
  47. $container->setParameter('sonata.admin_doctrine_orm.versioning', $config['versioning']);
  48. // define the templates
  49. $container->getDefinition('sonata.admin.builder.orm_list')
  50. ->replaceArgument(1, $config['templates']['types']['list']);
  51. $container->getDefinition('sonata.admin.builder.orm_show')
  52. ->replaceArgument(1, $config['templates']['types']['show']);
  53. }
  54. /**
  55. * @param array $configs
  56. *
  57. * @return array
  58. */
  59. private function fixTemplatesConfiguration(array $configs)
  60. {
  61. $defaultConfig = array(
  62. 'templates' => array(
  63. 'types' => array(
  64. 'list' => array(
  65. 'array' => 'SonataAdminBundle:CRUD:list_array.html.twig',
  66. 'boolean' => 'SonataAdminBundle:CRUD:list_boolean.html.twig',
  67. 'date' => 'SonataAdminBundle:CRUD:list_date.html.twig',
  68. 'time' => 'SonataAdminBundle:CRUD:list_time.html.twig',
  69. 'datetime' => 'SonataAdminBundle:CRUD:list_datetime.html.twig',
  70. 'text' => 'SonataAdminBundle:CRUD:base_list_field.html.twig',
  71. 'trans' => 'SonataAdminBundle:CRUD:list_trans.html.twig',
  72. 'string' => 'SonataAdminBundle:CRUD:base_list_field.html.twig',
  73. 'smallint' => 'SonataAdminBundle:CRUD:base_list_field.html.twig',
  74. 'bigint' => 'SonataAdminBundle:CRUD:base_list_field.html.twig',
  75. 'integer' => 'SonataAdminBundle:CRUD:base_list_field.html.twig',
  76. 'decimal' => 'SonataAdminBundle:CRUD:base_list_field.html.twig',
  77. 'identifier' => 'SonataAdminBundle:CRUD:base_list_field.html.twig',
  78. 'currency' => 'SonataAdminBundle:CRUD:list_currency.html.twig',
  79. 'percent' => 'SonataAdminBundle:CRUD:list_percent.html.twig',
  80. ),
  81. 'show' => array(
  82. 'array' => 'SonataAdminBundle:CRUD:show_array.html.twig',
  83. 'boolean' => 'SonataAdminBundle:CRUD:show_boolean.html.twig',
  84. 'date' => 'SonataAdminBundle:CRUD:show_date.html.twig',
  85. 'time' => 'SonataAdminBundle:CRUD:show_time.html.twig',
  86. 'datetime' => 'SonataAdminBundle:CRUD:show_datetime.html.twig',
  87. 'text' => 'SonataAdminBundle:CRUD:base_show_field.html.twig',
  88. 'trans' => 'SonataAdminBundle:CRUD:show_trans.html.twig',
  89. 'string' => 'SonataAdminBundle:CRUD:base_show_field.html.twig',
  90. 'smallint' => 'SonataAdminBundle:CRUD:base_show_field.html.twig',
  91. 'bigint' => 'SonataAdminBundle:CRUD:base_show_field.html.twig',
  92. 'integer' => 'SonataAdminBundle:CRUD:base_show_field.html.twig',
  93. 'decimal' => 'SonataAdminBundle:CRUD:base_show_field.html.twig',
  94. 'currency' => 'SonataAdminBundle:CRUD:base_currency.html.twig',
  95. 'percent' => 'SonataAdminBundle:CRUD:base_percent.html.twig',
  96. )
  97. )
  98. )
  99. );
  100. // let's add some magic
  101. if (class_exists('Sonata\IntlBundle\SonataIntlBundle', true)) {
  102. $defaultConfig['templates']['types']['list'] = array_merge($defaultConfig['templates']['types']['list'], array(
  103. 'date' => 'SonataIntlBundle:CRUD:list_date.html.twig',
  104. 'datetime' => 'SonataIntlBundle:CRUD:list_datetime.html.twig',
  105. 'smallint' => 'SonataIntlBundle:CRUD:list_decimal.html.twig',
  106. 'bigint' => 'SonataIntlBundle:CRUD:list_decimal.html.twig',
  107. 'integer' => 'SonataIntlBundle:CRUD:list_decimal.html.twig',
  108. 'decimal' => 'SonataIntlBundle:CRUD:list_decimal.html.twig',
  109. 'currency' => 'SonataIntlBundle:CRUD:list_currency.html.twig',
  110. 'percent' => 'SonataIntlBundle:CRUD:list_percent.html.twig',
  111. ));
  112. $defaultConfig['templates']['types']['show'] = array_merge($defaultConfig['templates']['types']['show'], array(
  113. 'date' => 'SonataIntlBundle:CRUD:show_date.html.twig',
  114. 'datetime' => 'SonataIntlBundle:CRUD:show_datetime.html.twig',
  115. 'smallint' => 'SonataIntlBundle:CRUD:show_decimal.html.twig',
  116. 'bigint' => 'SonataIntlBundle:CRUD:show_decimal.html.twig',
  117. 'integer' => 'SonataIntlBundle:CRUD:show_decimal.html.twig',
  118. 'decimal' => 'SonataIntlBundle:CRUD:show_decimal.html.twig',
  119. 'currency' => 'SonataIntlBundle:CRUD:show_currency.html.twig',
  120. 'percent' => 'SonataIntlBundle:CRUD:show_percent.html.twig',
  121. ));
  122. }
  123. array_unshift($configs, $defaultConfig);
  124. return $configs;
  125. }
  126. }