custom/static-plugins/relewise/src/Core/Content/Relewise/Subscriber/RelewiseRequestSubscriber.php line 69

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Wexo\Relewise\Core\Content\Relewise\Subscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\HttpFoundation\RequestStack;
  5. use Wexo\Relewise\Api\Data\Export\ExportInterface;
  6. use Wexo\Relewise\Service\Model\Items\Filtering\Condition\ContainsCondition;
  7. use Wexo\Relewise\Service\Model\Items\Filtering\Filter\Product\ProductDataFilter;
  8. use Wexo\Relewise\Service\Model\Items\Filtering\Filter\Product\VariantDataFilter;
  9. use Wexo\Relewise\Api\Data\FilterDataInterface;
  10. use Wexo\Relewise\Core\Content\Relewise\Event\RelewiseRequestEvent;
  11. use Wexo\Relewise\Service\Registry\RelewiseModelRegistry;
  12. use Wexo\Relewise\Service\RelewiseConfigService;
  13. class RelewiseRequestSubscriber implements EventSubscriberInterface
  14. {
  15.     /**
  16.      * @var RequestStack
  17.      */
  18.     protected $requestStack;
  19.     /**
  20.      * @var RelewiseConfigService
  21.      */
  22.     protected $configService;
  23.     /**
  24.      * @param RequestStack $requestStack
  25.      * @param RelewiseConfigService $configService
  26.      */
  27.     public function __construct(
  28.         RequestStack $requestStack,
  29.         RelewiseConfigService $configService
  30.     ) {
  31.         $this->requestStack $requestStack;
  32.         $this->configService $configService;
  33.     }
  34.     /**
  35.      * @return array
  36.      */
  37.     public static function getSubscribedEvents(): array
  38.     {
  39.         return [
  40.             RelewiseRequestEvent::class => [
  41.                 ['fillRelewiseModel'100],
  42.                 ['addDefaultFilters'50]
  43.             ]
  44.         ];
  45.     }
  46.     /**
  47.      * @param RelewiseRequestEvent $event
  48.      */
  49.     public function fillRelewiseModel(RelewiseRequestEvent $event): void
  50.     {
  51.         $model $event->getModel();
  52.         $request $this->requestStack->getMainRequest();
  53.         RelewiseModelRegistry::fillRelewiseModel($model$model->getSalesChannelContext(), $request);
  54.     }
  55.     /**
  56.      * @param RelewiseRequestEvent $event
  57.      * @return void
  58.      */
  59.     public function addDefaultFilters(RelewiseRequestEvent $event): void
  60.     {
  61.         $model $event->getModel();
  62.         if (!$salesChannelContext $model->getSalesChannelContext()) {
  63.             return;
  64.         }
  65.         // We do not want to add filters on export models. The export will take care of filters
  66.         if ($model instanceof ExportInterface || !$model instanceof FilterDataInterface) {
  67.             return;
  68.         }
  69.         $salesChannelId $salesChannelContext->getSalesChannelId();
  70.         $enableDefaultFilters $this->configService->isEnabledDefaultFilters($salesChannelId);
  71.         if (!$enableDefaultFilters) {
  72.             return;
  73.         }
  74.         // Relewise will ignore filters that are not filtering on the type of item they return
  75.         // Therefore these filters will not affect anything to do with content
  76.         $filter = new ProductDataFilter('SalesChannels');
  77.         $filter->addCondition(new ContainsCondition('String'$salesChannelId));
  78.         $model->addFilter($filter);
  79.         $filter = new VariantDataFilter('SalesChannels');
  80.         $filter->addCondition(new ContainsCondition('String'$salesChannelId));
  81.         $model->addFilter($filter);
  82.     }
  83. }