custom/static-plugins/marketing-tools/src/Subscriber/ProductListingResultEventSubscriber.php line 48

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Wexo\MarketingTools\Subscriber;
  3. use Shopware\Core\Content\Product\Events\ProductListingResultEvent;
  4. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Wexo\MarketingTools\Helper\MarketingToolsHelper;
  9. /**
  10.  * Class ProductListingResultEventSubscriber
  11.  * @package Wexo\MarketingTools\Subscriber
  12.  */
  13. class ProductListingResultEventSubscriber implements EventSubscriberInterface
  14. {
  15.     /** @var EntityRepositoryInterface */
  16.     protected $categoryBannerRepository;
  17.     /** @var MarketingToolsHelper */
  18.     protected $helper;
  19.     /**
  20.      * ProductListingResultEventSubscriber constructor.
  21.      * @param EntityRepositoryInterface $entityRepository
  22.      * @param MarketingToolsHelper $helper
  23.      */
  24.     public function __construct(EntityRepositoryInterface $entityRepositoryMarketingToolsHelper $helper)
  25.     {
  26.         $this->categoryBannerRepository $entityRepository;
  27.         $this->helper $helper;
  28.     }
  29.     /**
  30.      * @return string[]
  31.      */
  32.     public static function getSubscribedEvents(): array
  33.     {
  34.         return [
  35.             ProductListingResultEvent::class => 'onProductListing'
  36.         ];
  37.     }
  38.     /**
  39.      * @param ProductListingResultEvent $event
  40.      */
  41.     public function onProductListing(ProductListingResultEvent $event): void
  42.     {
  43.         $navigationId $event->getResult()->getCurrentFilter('navigationId');
  44.         $criteria $this->helper->getValidationCriteria($event->getSalesChannelContext());
  45.         $criteria->addFilter(new EqualsFilter('categories.categoryId'$navigationId));
  46.         $criteria->addAssociation('categories.category');
  47.         $banners $this->categoryBannerRepository->search($criteria$event->getContext());
  48.         $currentPage $event->getResult()->getPage();
  49.         $banners $banners->filter(function ($item) use ($currentPage$navigationId) {
  50.             $pages $item->getPages();
  51.             $pageCondition in_array($currentPage$pages);
  52.             if ($item->getExclusionMode()) {
  53.                 $pageCondition = !in_array($currentPage$pages);
  54.             }
  55.             return $pageCondition;
  56.         });
  57.         $banners_end $banners->filter(function ($item) use ($banners) {
  58.             $condition $item->getStartFromEnd();
  59.             if ($condition) {
  60.                 $banners->getEntities()->remove($item->getId());
  61.             }
  62.             return $condition;
  63.         });
  64.         $event->getResult()->addExtension('banners'$banners->getEntities());
  65.         $event->getResult()->addExtension('banners_end'$banners_end->getEntities());
  66.     }
  67. }