vendor/roothirsch/core-bundle/Site/TemplatePathInjection.php line 77

Open in your IDE?
  1. <?php
  2. namespace Roothirsch\CoreBundle\Site;
  3. use ApiPlatform\Core\EventListener\EventPriorities;
  4. use Roothirsch\CoreBundle\Entity\User;
  5. use Symfony\Component\DependencyInjection\ContainerInterface;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\Finder\Finder;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. use Twig\Environment;
  10. use Twig\Loader\FilesystemLoader;
  11. class TemplatePathInjection implements EventSubscriberInterface
  12. {
  13. /**
  14. * @var SiteProvider
  15. */
  16. protected $siteProvider;
  17. /**
  18. * @var Environment
  19. */
  20. protected $twig;
  21. /**
  22. * @var String
  23. */
  24. protected $projectDir;
  25. public function __construct(SiteProvider $siteProvider, Environment $twig, String $projectDir) {
  26. $this->siteProvider = $siteProvider;
  27. $this->twig = $twig;
  28. $this->projectDir = $projectDir;
  29. }
  30. /**
  31. * Returns an array of event names this subscriber wants to listen to.
  32. *
  33. * The array keys are event names and the value can be:
  34. *
  35. * * The method name to call (priority defaults to 0)
  36. * * An array composed of the method name to call and the priority
  37. * * An array of arrays composed of the method names to call and respective
  38. * priorities, or 0 if unset
  39. *
  40. * For instance:
  41. *
  42. * * array('eventName' => 'methodName')
  43. * * array('eventName' => array('methodName', $priority))
  44. * * array('eventName' => array(array('methodName1', $priority), array('methodName2')))
  45. *
  46. * @return array The event names to listen to
  47. */
  48. public static function getSubscribedEvents(): array
  49. {
  50. return [
  51. KernelEvents::REQUEST => ['onKernelRequest', EventPriorities::PRE_READ],
  52. ];
  53. }
  54. public function onKernelRequest(\Symfony\Component\HttpKernel\Event\RequestEvent $event)
  55. {
  56. $loader = $this->twig->getLoader();
  57. if ($loader instanceof FilesystemLoader) {
  58. $directories = [];
  59. $finder = new Finder();
  60. if(file_exists($this->projectDir."/vendor/roothirsch")){
  61. $finder->in($this->projectDir . '/vendor/roothirsch/*/Resources')->name('views');
  62. foreach($finder->directories() as $directory) {
  63. $directories[] = $directory->getRealPath();
  64. }
  65. }
  66. array_push($directories, $this->projectDir . '/themes/' . $this->siteProvider->getTheme());
  67. foreach($directories as $templateDirectory) {
  68. if (file_exists($templateDirectory)) {
  69. $loader->prependPath($templateDirectory);
  70. }
  71. if (file_exists($templateDirectory . '/bundles/')) {
  72. $finder = new Finder();
  73. $finder->directories()->in($templateDirectory . '/bundles/');
  74. foreach($finder as $directory) {
  75. /** @var $directory \Symfony\Component\Finder\SplFileInfo */
  76. $loader->prependPath($directory->getRealPath(), str_replace('Bundle', '', $directory->getBasename()));
  77. }
  78. }
  79. }
  80. }
  81. }
  82. }