local/modules/ChoiceFilter/Hook/ChoiceFilterHook.php line 61

  1. <?php
  2. namespace ChoiceFilter\Hook;
  3. use ChoiceFilter\Model\ChoiceFilter;
  4. use ChoiceFilter\Model\ChoiceFilterOtherQuery;
  5. use ChoiceFilter\Model\ChoiceFilterQuery;
  6. use ChoiceFilter\Util;
  7. use Propel\Runtime\Collection\ObjectCollection;
  8. use Symfony\Component\HttpFoundation\RequestStack;
  9. use Thelia\Core\Event\Hook\HookRenderEvent;
  10. use Thelia\Core\Hook\BaseHook;
  11. use Thelia\Core\HttpFoundation\Session\Session;
  12. use Thelia\Model\CategoryQuery;
  13. /**
  14.  * @author Gilles Bourgeat <gbourgeat@openstudio.fr>
  15.  */
  16. class ChoiceFilterHook extends BaseHook
  17. {
  18.     protected $requestStack;
  19.     public function __construct(RequestStack $requestStack)
  20.     {
  21.         $this->requestStack $requestStack;
  22.     }
  23.     /**
  24.      * @param HookRenderEvent $event
  25.      */
  26.     public function onTemplateEditBottom(HookRenderEvent $event)
  27.     {
  28.         $templateId $event->getArgument('template_id');
  29.         $locales $this->getEditLocales();
  30.         $features ChoiceFilterQuery::findFeaturesByTemplateId($templateId$locales);
  31.         $attributes ChoiceFilterQuery::findAttributesByTemplateId($templateId$locales);
  32.         $others ChoiceFilterOtherQuery::findOther($locales);
  33.         /** @var ChoiceFilter[] $choiceFilters */
  34.         $choiceFilters ChoiceFilterQuery::create()
  35.             ->filterByTemplateId($templateId)
  36.             ->orderByPosition()
  37.             ->find();
  38.         if (count($choiceFilters)) {
  39.             $enabled true;
  40.         } else {
  41.             $enabled false;
  42.         }
  43.         $filters Util::merge($choiceFilters$features$attributes$others);
  44.         $event->add($this->render(
  45.             'choice-filter/hook/template-edit.bottom.html',
  46.             $event->getArguments() + ['filters' => $filters'enabled' => $enabled]
  47.         ));
  48.     }
  49.     public function onCategoryTabContent(HookRenderEvent $event)
  50.     {
  51.         if ($event->getArgument('view') !== 'category') {
  52.             return;
  53.         }
  54.         $locales $this->getEditLocales();
  55.         $category CategoryQuery::create()->filterById($event->getArgument('id'))->findOne();
  56.         $templateId null;
  57.         $categoryId null;
  58.         $choiceFilters ChoiceFilterQuery::findChoiceFilterByCategory($category$templateId$categoryId);
  59.         $messageInfo = [];
  60.         $enabled false;
  61.         if ($templateId === null) {
  62.             $features = new ObjectCollection();
  63.             $attributes = new ObjectCollection();
  64.             $others = new ObjectCollection();
  65.             $choiceFilters = new ObjectCollection();
  66.             $messageInfo[] = "Cette catégorie utilise aucune configuration des filtres";
  67.         } else {
  68.             $features ChoiceFilterQuery::findFeaturesByTemplateId(
  69.                 $templateId,
  70.                 $locales
  71.             );
  72.             $attributes ChoiceFilterQuery::findAttributesByTemplateId(
  73.                 $templateId,
  74.                 $locales
  75.             );
  76.             $others ChoiceFilterOtherQuery::findOther();
  77.             if (null === $categoryId) {
  78.                 $messageInfo[] = "Cette catégorie utilise la configuration du gabarit " $templateId;
  79.             } elseif ($categoryId == $category->getId()) {
  80.                 $enabled true;
  81.                 $messageInfo[] = "Cette catégorie utilise sa propre configuration des filtres";
  82.             } else {
  83.                 $messageInfo[] = "Cette catégorie utilise la configuration des filtres de la catégorie " $categoryId;
  84.             }
  85.         }
  86.         $filters Util::merge($choiceFilters$features$attributes$others);
  87.         $event->add($this->render(
  88.             'choice-filter/hook/category.tab-content.html',
  89.             $event->getArguments() + ['category_id' => $event->getArgument('id'), 'filters' => $filters'enabled' => $enabled'messageInfo' => $messageInfo]
  90.         ));
  91.     }
  92.     public function onCategoryEditJs(HookRenderEvent $event)
  93.     {
  94.         $event->add($this->render(
  95.             'choice-filter/hook/category.edit-js.html',
  96.             $event->getArguments()
  97.         ));
  98.     }
  99.     public function onTemplateEditJs(HookRenderEvent $event)
  100.     {
  101.         $event->add($this->render(
  102.             'choice-filter/hook/template.edit-js.html',
  103.             $event->getArguments()
  104.         ));
  105.     }
  106.     /**
  107.      * @return string[] list of locale
  108.      */
  109.     protected function getEditLocales()
  110.     {
  111.         /** @var Session $session */
  112.         $session $this->requestStack->getCurrentRequest()->getSession();
  113.         $locale $session->getAdminEditionLang()->getLocale();
  114.         return [$locale];
  115.     }
  116. }