local/modules/ChoiceFilter/Hook/ChoiceFilterHook.php line 122
- <?php
- namespace ChoiceFilter\Hook;
- use ChoiceFilter\Model\ChoiceFilter;
- use ChoiceFilter\Model\ChoiceFilterOtherQuery;
- use ChoiceFilter\Model\ChoiceFilterQuery;
- use ChoiceFilter\Util;
- use Propel\Runtime\Collection\ObjectCollection;
- use Symfony\Component\HttpFoundation\RequestStack;
- use Thelia\Core\Event\Hook\HookRenderEvent;
- use Thelia\Core\Hook\BaseHook;
- use Thelia\Core\HttpFoundation\Session\Session;
- use Thelia\Model\CategoryQuery;
- /**
- * @author Gilles Bourgeat <gbourgeat@openstudio.fr>
- */
- class ChoiceFilterHook extends BaseHook
- {
- protected $requestStack;
- public function __construct(RequestStack $requestStack)
- {
- $this->requestStack = $requestStack;
- }
- /**
- * @param HookRenderEvent $event
- */
- public function onTemplateEditBottom(HookRenderEvent $event)
- {
- $templateId = $event->getArgument('template_id');
- $locales = $this->getEditLocales();
- $features = ChoiceFilterQuery::findFeaturesByTemplateId($templateId, $locales);
- $attributes = ChoiceFilterQuery::findAttributesByTemplateId($templateId, $locales);
- $others = ChoiceFilterOtherQuery::findOther($locales);
- /** @var ChoiceFilter[] $choiceFilters */
- $choiceFilters = ChoiceFilterQuery::create()
- ->filterByTemplateId($templateId)
- ->orderByPosition()
- ->find();
- if (count($choiceFilters)) {
- $enabled = true;
- } else {
- $enabled = false;
- }
- $filters = Util::merge($choiceFilters, $features, $attributes, $others);
- $event->add($this->render(
- 'choice-filter/hook/template-edit.bottom.html',
- $event->getArguments() + ['filters' => $filters, 'enabled' => $enabled]
- ));
- }
- public function onCategoryTabContent(HookRenderEvent $event)
- {
- if ($event->getArgument('view') !== 'category') {
- return;
- }
- $locales = $this->getEditLocales();
- $category = CategoryQuery::create()->filterById($event->getArgument('id'))->findOne();
- $templateId = null;
- $categoryId = null;
- $choiceFilters = ChoiceFilterQuery::findChoiceFilterByCategory($category, $templateId, $categoryId);
- $messageInfo = [];
- $enabled = false;
- if ($templateId === null) {
- $features = new ObjectCollection();
- $attributes = new ObjectCollection();
- $others = new ObjectCollection();
- $choiceFilters = new ObjectCollection();
- $messageInfo[] = "Cette catégorie utilise aucune configuration des filtres";
- } else {
- $features = ChoiceFilterQuery::findFeaturesByTemplateId(
- $templateId,
- $locales
- );
- $attributes = ChoiceFilterQuery::findAttributesByTemplateId(
- $templateId,
- $locales
- );
- $others = ChoiceFilterOtherQuery::findOther();
- if (null === $categoryId) {
- $messageInfo[] = "Cette catégorie utilise la configuration du gabarit " . $templateId;
- } elseif ($categoryId == $category->getId()) {
- $enabled = true;
- $messageInfo[] = "Cette catégorie utilise sa propre configuration des filtres";
- } else {
- $messageInfo[] = "Cette catégorie utilise la configuration des filtres de la catégorie " . $categoryId;
- }
- }
- $filters = Util::merge($choiceFilters, $features, $attributes, $others);
- $event->add($this->render(
- 'choice-filter/hook/category.tab-content.html',
- $event->getArguments() + ['category_id' => $event->getArgument('id'), 'filters' => $filters, 'enabled' => $enabled, 'messageInfo' => $messageInfo]
- ));
- }
- public function onCategoryEditJs(HookRenderEvent $event)
- {
- $event->add($this->render(
- 'choice-filter/hook/category.edit-js.html',
- $event->getArguments()
- ));
- }
- public function onTemplateEditJs(HookRenderEvent $event)
- {
- $event->add($this->render(
- 'choice-filter/hook/template.edit-js.html',
- $event->getArguments()
- ));
- }
- /**
- * @return string[] list of locale
- */
- protected function getEditLocales()
- {
- /** @var Session $session */
- $session = $this->requestStack->getCurrentRequest()->getSession();
- $locale = $session->getAdminEditionLang()->getLocale();
- return [$locale];
- }
- }