SonataDoctrineORMAdminExtension.php 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. $defaultConfig = array(
  35. 'templates' => array(
  36. 'types' => array(
  37. 'list' => array(
  38. 'array' => 'SonataAdminBundle:CRUD:list_array.html.twig',
  39. 'boolean' => 'SonataAdminBundle:CRUD:list_boolean.html.twig',
  40. 'date' => 'SonataAdminBundle:CRUD:list_date.html.twig',
  41. 'datetime' => 'SonataAdminBundle:CRUD:list_datetime.html.twig',
  42. 'text' => 'SonataAdminBundle:CRUD:base_list_field.html.twig',
  43. 'string' => 'SonataAdminBundle:CRUD:base_list_field.html.twig',
  44. 'smallint' => 'SonataAdminBundle:CRUD:base_list_field.html.twig',
  45. 'bigint' => 'SonataAdminBundle:CRUD:base_list_field.html.twig',
  46. 'integer' => 'SonataAdminBundle:CRUD:base_list_field.html.twig',
  47. 'decimal' => 'SonataAdminBundle:CRUD:base_list_field.html.twig',
  48. 'identifier' => 'SonataAdminBundle:CRUD:base_list_field.html.twig',
  49. )
  50. )
  51. )
  52. );
  53. // let's add some magic
  54. if (class_exists('Sonata\IntlBundle\SonataIntlBundle', true)) {
  55. $defaultConfig['templates']['types']['list'] = array_merge($defaultConfig['templates']['types']['list'], array(
  56. 'date' => 'SonataIntlBundle:CRUD:list_date.html.twig',
  57. 'datetime' => 'SonataIntlBundle:CRUD:list_datetime.html.twig',
  58. 'smallint' => 'SonataIntlBundle:CRUD:list_decimal.html.twig',
  59. 'bigint' => 'SonataIntlBundle:CRUD:list_decimal.html.twig',
  60. 'integer' => 'SonataIntlBundle:CRUD:list_decimal.html.twig',
  61. 'decimal' => 'SonataIntlBundle:CRUD:list_decimal.html.twig',
  62. ));
  63. }
  64. array_unshift($configs, $defaultConfig);
  65. $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
  66. $loader->load('doctrine_orm.xml');
  67. $loader->load('doctrine_orm_filter_types.xml');
  68. $configuration = new Configuration();
  69. $processor = new Processor();
  70. $config = $processor->processConfiguration($configuration, $configs);
  71. $pool = $container->getDefinition('sonata.admin.manager.orm');
  72. $pool->addMethodCall('__hack_doctrine_orm__', $config);
  73. $container->getDefinition('sonata.admin.builder.orm_list')
  74. ->replaceArgument(1, $config['templates']['types']['list']);
  75. }
  76. }