custom/plugins/OkeonlineCustomizedProductCombinationDisabler/src/Storefront/Page/Product/ProductLoaderCriteriaEventSubscriber.php line 62

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Okeonline\CustomizedProductsCombinationDisabler\Storefront\Page\Product;
  3. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  4. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  7. use Shopware\Core\Framework\Struct\ArrayStruct;
  8. use Shopware\Core\System\SystemConfig\SystemConfigService;
  9. use Shopware\Storefront\Page\Product\ProductLoaderCriteriaEvent;
  10. use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. class ProductLoaderCriteriaEventSubscriber implements EventSubscriberInterface
  13. {
  14.     /**
  15.      * @var ProductPageLoadedEvent
  16.      */
  17.     private $event;
  18.     /**
  19.      * @var EntityRepository
  20.      */
  21.     private $productRepository;
  22.     /**
  23.      * @var EntityRepository
  24.      */
  25.     private $propertyGroupRepository;
  26.     /**
  27.      * @var EntityRepository
  28.      */
  29.     private $propertyGroupOptionRepository;
  30.     /**
  31.      * @var SystemConfigService
  32.      */
  33.     private $systemConfigService;
  34.     public function __construct(
  35.         EntityRepository $productRepository,
  36.         EntityRepository $propertyGroupRepository,
  37.         EntityRepository $propertyGroupOptionRepository,
  38.         SystemConfigService $systemConfigService
  39.     )
  40.     {
  41.         $this->productRepository $productRepository;
  42.         $this->propertyGroupRepository $propertyGroupRepository;
  43.         $this->propertyGroupOptionRepository $propertyGroupOptionRepository;
  44.         $this->systemConfigService $systemConfigService;
  45.     }
  46.     public static function getSubscribedEvents(): array
  47.     {
  48.         return [
  49.             'Shopware\Storefront\Page\Product\ProductPageLoadedEvent' => ['addExcludedCustomizedProductsCombinationsToPage'0]
  50.         ];
  51.     }
  52.     public function addExcludedCustomizedProductsCombinationsToPage(ProductPageLoadedEvent $event): void
  53.     {
  54.         $page $event->getPage();
  55.         $context $event->getContext();
  56.         $productId $page->getProduct()->getId();
  57.         $context->setConsiderInheritance(true);
  58.         $context->setConsiderInheritance(true);
  59.         $criteria = new Criteria([$productId]);
  60.         $criteria->addAssociation('swagCustomizedProductsTemplate.exclusions.translated');
  61.         $criteria->addAssociation('swagCustomizedProductsTemplate.exclusions.conditions.templateOption.translated');
  62.         $criteria->addAssociation('swagCustomizedProductsTemplate.exclusions.conditions.templateExclusionOperator.translated');
  63.         $criteria->setLimit(1);
  64.         $product $this->productRepository->search($criteria$context)->first();
  65.         $swagProductTemplate $product->getExtensions()['swagCustomizedProductsTemplate'];
  66.         if(!$swagProductTemplate) return;
  67.         $productExclusions $swagProductTemplate->getExclusions();
  68.         $page->addExtension('customizedProductExclusions'$productExclusions);
  69.     }
  70. }