You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

164 lines
5.2KB

  1. <?php
  2. namespace Lc\SovBundle\Twig;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  5. use Lc\SovBundle\Translation\TranslatorAdmin;
  6. use Liip\ImagineBundle\Imagine\Cache\CacheManager;
  7. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  8. use Symfony\Component\HttpFoundation\RequestStack;
  9. use Symfony\Component\HttpKernel\KernelInterface;
  10. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  11. use Symfony\Contracts\Translation\TranslatorInterface;
  12. use Twig\Extension\AbstractExtension;
  13. use Twig\TwigFilter;
  14. use Twig\TwigFunction;
  15. class TwigExtension extends AbstractExtension
  16. {
  17. protected $em;
  18. protected $kernel;
  19. protected $parameterBag;
  20. protected $cacheManager;
  21. protected $requestStack;
  22. protected $router;
  23. protected $translator;
  24. protected $translatorAdmin;
  25. public function __construct(
  26. KernelInterface $kernel,
  27. ParameterBagInterface $parameterBag,
  28. CacheManager $cacheManager,
  29. EntityManagerInterface $entityManager,
  30. RequestStack $requestStack,
  31. UrlGeneratorInterface $router,
  32. TranslatorInterface $translator,
  33. TranslatorAdmin $translatorAdmin
  34. ) {
  35. $this->kernel = $kernel;
  36. $this->parameterBag = $parameterBag;
  37. $this->cacheManager = $cacheManager;
  38. $this->em = $entityManager;
  39. $this->requestStack = $requestStack;
  40. $this->router = $router;
  41. $this->translator = $translator;
  42. $this->translatorAdmin = $translatorAdmin;
  43. }
  44. public function getFunctions()
  45. {
  46. return array(
  47. new TwigFunction('lc_liip', [$this, 'lcLiip']),
  48. new TwigFunction('homepage_route', [$this, 'homepageRoute']),
  49. new TwigFunction('page_by_dev_alias', [$this, 'getPageByDevAlias']),
  50. new TwigFunction('translated_urls', [$this, 'getTranslatedUrls'])
  51. );
  52. }
  53. public function getFilters()
  54. {
  55. return [
  56. new TwigFilter('lc_cache', [$this, 'lcCache']),
  57. new TwigFilter('lc_trans_admin_field', [$this, 'lcTransAdminField']),
  58. new TwigFilter('lc_trans_admin_help', [$this, 'lcTransAdminHelp']),
  59. new TwigFilter('lc_trans_admin_panel', [$this, 'lcTransAdminPanel']),
  60. new TwigFilter('lc_trans_admin_menu', [$this, 'lcTransAdminMenu']),
  61. new TwigFilter('lc_trans_admin_title', [$this, 'lcTransAdminTitle']),
  62. new TwigFilter('lc_trans_admin_action', [$this, 'lcTransAdminAction']),
  63. ];
  64. }
  65. public function lcCache($file)
  66. {
  67. $cacheTime = filemtime($this->kernel->getProjectDir() . '/public' . $file);
  68. if ($cacheTime) {
  69. return $file . '?c=' . $cacheTime;
  70. } else {
  71. return $file . "?c=0";
  72. }
  73. }
  74. public function lcTransAdminField($fieldName, $entityClass)
  75. {
  76. return $this->translatorAdmin->transField($fieldName, $entityClass) ;
  77. }
  78. public function lcTransAdminHelp($fieldName, $entityClass)
  79. {
  80. return $this->translatorAdmin->transHelp($fieldName, $entityClass) ;
  81. }
  82. public function lcTransAdminPanel($panelName, $entityClass)
  83. {
  84. return $this->translatorAdmin->transPanel($panelName, $entityClass) ;
  85. }
  86. public function lcTransAdminMenu($menuName)
  87. {
  88. return $this->translatorAdmin->transMenu($menuName);;
  89. }
  90. public function lcTransAdminAction($actionName)
  91. {
  92. return $this->translatorAdmin->transAction($actionName);;
  93. }
  94. public function lcTransAdminTitle($pageName, $entityClass = null, $params = [])
  95. {
  96. return $this->translatorAdmin->transTitle($pageName, $entityClass, $params) ;
  97. }
  98. public function lcLiip($path, $thumb = 'tile', $default = 'default.jpg')
  99. {
  100. $path = urldecode($path);
  101. if (substr($path, 0, 1) === '/') {
  102. $path = substr($path, 1);
  103. }
  104. if ($path) {
  105. $fileManagerFolder = substr($this->getFileManagerFolder(), 1);
  106. if (strpos($path, $fileManagerFolder) === false) {
  107. $path = $fileManagerFolder . '/' . $path;
  108. }
  109. if (file_exists($path)) {
  110. return $this->cacheManager->getBrowserPath($path, $thumb);
  111. }
  112. }
  113. return $this->cacheManager->getBrowserPath($this->getFileManagerFolder() . '/' . $default, $thumb);
  114. }
  115. function getTranslatedUrls()
  116. {
  117. $ret = array();
  118. $langs = $this->parameterBag->get('app.locales');
  119. $currentRoute = $this->requestStack->getCurrentRequest()->get('_route');
  120. $params = array_merge((array)$this->requestStack->getCurrentRequest()->get('_route_params'), $_GET);
  121. if ($currentRoute) {
  122. foreach ($langs as $lg) {
  123. $ret[$lg] = $this->router->generate($currentRoute, array_merge($params, array('_locale' => $lg)));
  124. }
  125. }
  126. return $ret;
  127. }
  128. public function getFileManagerFolder()
  129. {
  130. return $this->parameterBag->get('app.path_uploads');
  131. }
  132. public function homepageRoute()
  133. {
  134. return $this->parameterBag->get('lc_sov.homepage_route');
  135. }
  136. }