core/lib/Thelia/Core/Template/TheliaTemplateHelper.php line 163

  1. <?php
  2. /*
  3.  * This file is part of the Thelia package.
  4.  * http://www.thelia.net
  5.  *
  6.  * (c) OpenStudio <info@thelia.net>
  7.  *
  8.  * For the full copyright and license information, please view the LICENSE
  9.  * file that was distributed with this source code.
  10.  */
  11. namespace Thelia\Core\Template;
  12. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Thelia\Core\Event\Cache\CacheEvent;
  15. use Thelia\Core\Event\Config\ConfigUpdateEvent;
  16. use Thelia\Core\Event\TheliaEvents;
  17. use Thelia\Model\ConfigQuery;
  18. class TheliaTemplateHelper implements TemplateHelperInterfaceEventSubscriberInterface
  19. {
  20.     protected $kernelCacheDir;
  21.     public function __construct($kernelCacheDir)
  22.     {
  23.         $this->kernelCacheDir $kernelCacheDir;
  24.     }
  25.     /**
  26.      * @return TemplateDefinition
  27.      */
  28.     public function getActiveMailTemplate()
  29.     {
  30.         return new TemplateDefinition(
  31.             ConfigQuery::read('active-mail-template''default'),
  32.             TemplateDefinition::EMAIL
  33.         );
  34.     }
  35.     /**
  36.      * Check if a template definition is the current active template.
  37.      *
  38.      * @return bool true is the given template is the active template
  39.      */
  40.     public function isActive(TemplateDefinition $tplDefinition)
  41.     {
  42.         $tplVar '';
  43.         switch ($tplDefinition->getType()) {
  44.             case TemplateDefinition::FRONT_OFFICE:
  45.                 $tplVar 'active-front-template';
  46.                 break;
  47.             case TemplateDefinition::BACK_OFFICE:
  48.                 $tplVar 'active-admin-template';
  49.                 break;
  50.             case TemplateDefinition::PDF:
  51.                 $tplVar 'active-pdf-template';
  52.                 break;
  53.             case TemplateDefinition::EMAIL:
  54.                 $tplVar 'active-mail-template';
  55.                 break;
  56.         }
  57.         return $tplDefinition->getName() == ConfigQuery::read($tplVar'default');
  58.     }
  59.     /**
  60.      * @return TemplateDefinition
  61.      */
  62.     public function getActivePdfTemplate()
  63.     {
  64.         return new TemplateDefinition(
  65.             ConfigQuery::read('active-pdf-template''default'),
  66.             TemplateDefinition::PDF
  67.         );
  68.     }
  69.     /**
  70.      * @return TemplateDefinition
  71.      */
  72.     public function getActiveAdminTemplate()
  73.     {
  74.         return new TemplateDefinition(
  75.             ConfigQuery::read('active-admin-template''default'),
  76.             TemplateDefinition::BACK_OFFICE
  77.         );
  78.     }
  79.     /**
  80.      * @return TemplateDefinition
  81.      */
  82.     public function getActiveFrontTemplate()
  83.     {
  84.         return new TemplateDefinition(
  85.             ConfigQuery::read('active-front-template''default'),
  86.             TemplateDefinition::FRONT_OFFICE
  87.         );
  88.     }
  89.     /**
  90.      * Returns an array which contains all standard template definitions.
  91.      */
  92.     public function getStandardTemplateDefinitions()
  93.     {
  94.         return [
  95.             $this->getActiveFrontTemplate(),
  96.             $this->getActiveAdminTemplate(),
  97.             $this->getActivePdfTemplate(),
  98.             $this->getActiveMailTemplate(),
  99.         ];
  100.     }
  101.     /**
  102.      * Return a list of existing templates for a given template type.
  103.      *
  104.      * @param int    $templateType the template type
  105.      * @param string $base         the template base (module or core, default to core)
  106.      *
  107.      * @return TemplateDefinition[] of \Thelia\Core\Template\TemplateDefinition
  108.      */
  109.     public function getList($templateType$base THELIA_TEMPLATE_DIR)
  110.     {
  111.         $list $exclude = [];
  112.         $tplIterator TemplateDefinition::getStandardTemplatesSubdirsIterator();
  113.         foreach ($tplIterator as $type => $subdir) {
  114.             if ($templateType == $type) {
  115.                 $baseDir rtrim($baseDS).DS.$subdir;
  116.                 try {
  117.                     // Every subdir of the basedir is supposed to be a template.
  118.                     $di = new \DirectoryIterator($baseDir);
  119.                     /** @var \DirectoryIterator $file */
  120.                     foreach ($di as $file) {
  121.                         // Ignore 'dot' elements
  122.                         if ($file->isDot() || !$file->isDir()) {
  123.                             continue;
  124.                         }
  125.                         // Ignore reserved directory names
  126.                         if (\in_array($file->getFilename(), $exclude)) {
  127.                             continue;
  128.                         }
  129.                         $list[] = new TemplateDefinition($file->getFilename(), $templateType);
  130.                     }
  131.                 } catch (\UnexpectedValueException $ex) {
  132.                     // Ignore the exception and continue
  133.                 }
  134.             }
  135.         }
  136.         return $list;
  137.     }
  138.     /**
  139.      * Clear the cache if the front or admin template is changed in the back-office.
  140.      */
  141.     public function clearCache(ConfigUpdateEvent $eventstring $eventNameEventDispatcherInterface $dispatcher): void
  142.     {
  143.         if (
  144.             (null === $config ConfigQuery::create()->findPk($event->getConfigId()))
  145.             ||
  146.             ($config->getValue() === $event->getValue())
  147.             ||
  148.             ($config->getName() !== TemplateDefinition::BACK_OFFICE_CONFIG_NAME
  149.              &&
  150.              $config->getName() !== TemplateDefinition::FRONT_OFFICE_CONFIG_NAME)
  151.         ) {
  152.             return;
  153.         }
  154.         $cacheEvent = new CacheEvent($this->kernelCacheDir);
  155.         $dispatcher->dispatch($cacheEventTheliaEvents::CACHE_CLEAR);
  156.     }
  157.     /**
  158.      * {@inheritdoc}
  159.      */
  160.     public static function getSubscribedEvents()
  161.     {
  162.         return [
  163.             TheliaEvents::CONFIG_SETVALUE => ['clearCache'130],
  164.         ];
  165.     }
  166. }