custom/plugins/TwigelSportPlugins/src/Subscriber/PageSubscriber.php line 70

Open in your IDE?
  1. <?php
  2. namespace Twigel\SportPlugin\Subscriber;
  3. use Shopware\Core\Framework\Context;
  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 Shopware\Core\System\SalesChannel\Entity\SalesChannelRepository;
  8. use Shopware\Core\System\SystemConfig\SystemConfigService;
  9. use Shopware\Storefront\Page\GenericPageLoadedEvent;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. class PageSubscriber implements EventSubscriberInterface
  12. {
  13.     /**
  14.      * @var SystemConfigService
  15.      */
  16.     private SystemConfigService $config;
  17.     /**
  18.      * @var EntityRepositoryInterface
  19.      */
  20.     private EntityRepositoryInterface $twigelCareerRepository;
  21.     /**
  22.      * @var EntityRepositoryInterface
  23.      */
  24.     private EntityRepositoryInterface $countryRepository;
  25.     /**
  26.      * @var SalesChannelRepository
  27.      */
  28.     private SalesChannelRepository $categoryRepository;
  29.     /**
  30.      * @var EntityRepositoryInterface
  31.      */
  32.     private EntityRepositoryInterface $promotionRepository;
  33.     public function __construct(
  34.         SystemConfigService       $config,
  35.         EntityRepositoryInterface $twigelCareerRepository,
  36.         EntityRepositoryInterface $countryRepository,
  37.         SalesChannelRepository $categoryRepository,
  38.         EntityRepositoryInterface $promotionRepository
  39.     )
  40.     {
  41.         $this->config $config;
  42.         $this->twigelCareerRepository $twigelCareerRepository;
  43.         $this->countryRepository $countryRepository;
  44.         $this->categoryRepository $categoryRepository;
  45.         $this->promotionRepository $promotionRepository;
  46.     }
  47.     /**
  48.      * @return string[]
  49.      */
  50.     public static function getSubscribedEvents(): array
  51.     {
  52.         return [
  53.             GenericPageLoadedEvent::class => 'onLoad'
  54.         ];
  55.     }
  56.     /**
  57.      * @param GenericPageLoadedEvent $event
  58.      * @return void
  59.      */
  60.     public function onLoad(GenericPageLoadedEvent $event)
  61.     {
  62.         $config $this->config->get('TwigelSportPlugin')['config'];
  63.         if (array_key_exists('careerCategory'$config)) {
  64.             $careerCategoryId $config['careerCategory'];
  65.             if ($event->getPage()->getHeader()) {
  66.                 if ($careerCategoryId == $event->getPage()->getHeader()->getNavigation()->getActive()->getId()) {
  67.                     $careers $this->twigelCareerRepository->search(new Criteria(), Context::createDefaultContext())->getElements();
  68.                     $event->getPage()->assign(['careers' => $careers]);
  69.                 }
  70.             }
  71.         }
  72.         if (array_key_exists('countryCategory'$config)) {
  73.             $countryCategoryIds $config['countryCategory'];
  74.             if ($event->getPage()->getHeader()) {
  75.                 if (in_array($event->getPage()->getHeader()->getNavigation()->getActive()->getId(), $countryCategoryIds)) {
  76.                     $countries $this->countryRepository->search(new Criteria(), $event->getContext())->getElements();
  77.                     $event->getPage()->assign(['countries' => $countries]);
  78.                 }
  79.             }
  80.         }
  81.         if (array_key_exists('model'$config) && array_key_exists('year'$config) && array_key_exists('make'$config)) {
  82.             $event->getPage()->assign(['search' => ['model' => $config['model'], 'year' => $config['year'], 'make' => $config['make']]]);
  83.         }
  84.         if (array_key_exists('mainCategory'$config)){
  85.             $mainCategoryId $config["mainCategory"];
  86.             if($event->getPage()->getHeader()){
  87.                 if($event->getPage()->getHeader()->getNavigation()->getActive()->getId() === $mainCategoryId){
  88.                     $bundleCategories $config['bundleCategories'];
  89.                     $criteria = new Criteria($bundleCategories);
  90.                     $criteria->addAssociations(['products''products.cover',"products.manufacturer"]);
  91.                     $products $this->categoryRepository->search($criteria$event->getSalesChannelContext())->getElements();
  92.                     if ($products){
  93.                         $categories = [];
  94.                         foreach ($products as $product){
  95.                             $categories[$product->getName()] = $product->getProducts();
  96.                         }
  97.                         $event->getPage()->assign(['categories'=> $categories]);
  98.                     }else{
  99.                         $event->getPage()->assign(['categories'=> []]);
  100.                     }
  101.                 }
  102.             }
  103.         }
  104.         if (array_key_exists('bundelEnable'$config) && $config['bundelEnable'] && array_key_exists('mainCategory'$config)){
  105.             $mainCategoryId $config["mainCategory"];
  106.             if($event->getPage()->getHeader()){
  107.                 if($event->getPage()->getHeader()->getNavigation()->getActive()->getId() === $mainCategoryId){
  108.                     if (array_key_exists('bundlePromotion'$config)){
  109.                         $promotionId $config['bundlePromotion'];
  110.                         $criteria = new Criteria([$promotionId]);
  111.                         $criteria->addAssociations(['discounts''cartRules''orderRules']);
  112.                         $promotion $this->promotionRepository->search($criteria$event->getContext())->first();
  113.                         if ($promotion){
  114.                             $event->getPage()->assign(['bundlePromotion' => $promotion]);
  115.                         }else{
  116.                             $event->getPage()->assign(['bundlePromotion' => []]);
  117.                         }
  118.                     }
  119.                 }
  120.             }
  121.         }
  122.     }
  123. }