BraincraftedBootstrapExtension.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <?php
  2. /**
  3. * This file is part of BraincraftedBootstrapBundle.
  4. *
  5. * (c) 2012-2013 by Florian Eckerstorfer
  6. */
  7. namespace Braincrafted\Bundle\BootstrapBundle\DependencyInjection;
  8. use Symfony\Component\Config\FileLocator;
  9. use Symfony\Component\DependencyInjection\ContainerBuilder;
  10. use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
  11. use Symfony\Component\DependencyInjection\Loader;
  12. use Symfony\Component\HttpKernel\DependencyInjection\Extension;
  13. use Braincrafted\Bundle\BootstrapBundle\DependencyInjection\AsseticConfiguration;
  14. /**
  15. * BraincraftedBootstrapExtension
  16. *
  17. * @package BraincraftedBootstrapBundle
  18. * @subpackage DependencyInjection
  19. * @author Florian Eckerstorfer <florian@eckerstorfer.co>
  20. * @copyright 2012-2013 Florian Eckerstorfer
  21. * @license http://opensource.org/licenses/MIT The MIT License
  22. * @link http://bootstrap.braincrafted.com Bootstrap for Symfony2
  23. */
  24. class BraincraftedBootstrapExtension extends Extension implements PrependExtensionInterface
  25. {
  26. /** @var string */
  27. protected $formTemplate = 'BraincraftedBootstrapBundle:Form:bootstrap.html.twig';
  28. /** @var string */
  29. protected $menuTemplate = 'BraincraftedBootstrapBundle:Menu:bootstrap.html.twig';
  30. /** @var string */
  31. protected $paginationTemplate = 'BraincraftedBootstrapBundle:Pagination:bootstrap.html.twig';
  32. /**
  33. * {@inheritDoc}
  34. */
  35. public function load(array $configs, ContainerBuilder $container)
  36. {
  37. $configuration = new Configuration();
  38. $config = $this->processConfiguration($configuration, $configs);
  39. $loader = new Loader\XmlFileLoader(
  40. $container,
  41. new FileLocator(__DIR__.'/../Resources/config')
  42. );
  43. $loader->load('services/form.xml');
  44. $loader->load('services/twig.xml');
  45. $loader->load('services/session.xml');
  46. if (true === isset($config['customize'])) {
  47. $container->setParameter('braincrafted_bootstrap.customize', $config['customize']);
  48. }
  49. $container->setParameter('braincrafted_bootstrap.assets_dir', $config['assets_dir']);
  50. $container->setParameter('braincrafted_bootstrap.output_dir', $config['output_dir']);
  51. $container->setParameter('braincrafted_bootstrap.less_filter', $config['less_filter']);
  52. }
  53. /**
  54. * {@inheritDoc}
  55. */
  56. public function prepend(ContainerBuilder $container)
  57. {
  58. $bundles = $container->getParameter('kernel.bundles');
  59. $configs = $container->getExtensionConfig($this->getAlias());
  60. $config = $this->processConfiguration(new Configuration(), $configs);
  61. // Configure Assetic if AsseticBundle is activated and the option
  62. // "braincrafted_bootstrap.auto_configure.assetic" is set to TRUE (default value).
  63. if (true === isset($bundles['AsseticBundle']) && true === $config['auto_configure']['assetic']) {
  64. $this->configureAsseticBundle($container, $config);
  65. }
  66. // Configure Twig if TwigBundle is activated and the option
  67. // "braincrafted_bootstrap.auto_configure.twig" is set to TRUE (default value).
  68. if (true === isset($bundles['TwigBundle']) && true === $config['auto_configure']['twig']) {
  69. $this->configureTwigBundle($container);
  70. }
  71. // Configure KnpMenu if KnpMenuBundle and TwigBundle are activated and the option
  72. // "braincrafted_bootstrap.auto_configure.knp_menu" is set to TRUE (default value).
  73. if (true === isset($bundles['TwigBundle']) &&
  74. true === isset($bundles['KnpMenuBundle']) &&
  75. true === $config['auto_configure']['knp_menu']) {
  76. $this->configureKnpMenuBundle($container);
  77. }
  78. // Configure KnpPaginiator if KnpPaginatorBundle and TwigBundle are activated and the option
  79. // "braincrafted_bootstrap.auto_configure.knp_paginator" is set to TRUE (default value).
  80. if (true === isset($bundles['TwigBundle']) &&
  81. true === isset($bundles['KnpPaginatorBundle']) &&
  82. true === $config['auto_configure']['knp_paginator']) {
  83. $this->configureKnpPaginatorBundle($container);
  84. }
  85. }
  86. /**
  87. * @param ContainerBuilder $container The service container
  88. * @param array $config The bundle configuration
  89. *
  90. * @return void
  91. */
  92. protected function configureAsseticBundle(ContainerBuilder $container, array $config)
  93. {
  94. foreach (array_keys($container->getExtensions()) as $name) {
  95. switch ($name) {
  96. case 'assetic':
  97. $asseticConfig = new AsseticConfiguration;
  98. $container->prependExtensionConfig(
  99. $name,
  100. array('assets' => $asseticConfig->build($config))
  101. );
  102. break;
  103. }
  104. }
  105. }
  106. /**
  107. * @param ContainerBuilder $container The service container
  108. *
  109. * @return void
  110. */
  111. protected function configureTwigBundle(ContainerBuilder $container)
  112. {
  113. foreach (array_keys($container->getExtensions()) as $name) {
  114. switch ($name) {
  115. case 'twig':
  116. $container->prependExtensionConfig(
  117. $name,
  118. array('form' => array('resources' => array($this->formTemplate)))
  119. );
  120. break;
  121. }
  122. }
  123. }
  124. /**
  125. * @param ContainerBuilder $container The service container
  126. *
  127. * @return void
  128. */
  129. protected function configureKnpMenuBundle(ContainerBuilder $container)
  130. {
  131. foreach (array_keys($container->getExtensions()) as $name) {
  132. switch ($name) {
  133. case 'knp_menu':
  134. $container->prependExtensionConfig(
  135. $name,
  136. array('twig' => array('template' => $this->menuTemplate))
  137. );
  138. break;
  139. }
  140. }
  141. }
  142. /**
  143. * @param ContainerBuilder $container The service container
  144. *
  145. * @return void
  146. */
  147. protected function configureKnpPaginatorBundle(ContainerBuilder $container)
  148. {
  149. foreach (array_keys($container->getExtensions()) as $name) {
  150. switch ($name) {
  151. case 'knp_paginator':
  152. $container->prependExtensionConfig(
  153. $name,
  154. array('template' => array('pagination' => $this->paginationTemplate))
  155. );
  156. break;
  157. }
  158. }
  159. }
  160. }