custom/plugins/HydrokulturNimbitsCustomChanges/src/Subscriber/StorefrontSubscriber.php line 77

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Nimbits\NimbitsCustomChanges\Subscriber;
  3. use Shopware\Storefront\Page\Product\ProductPageCriteriaEvent;
  4. use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Twig\Environment;
  7. use Nimbits\NimbitsCustomChanges\Setting\Service\SettingService;
  8. use Shopware\Storefront\Pagelet\Footer\FooterPageletLoadedEvent;
  9. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  10. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  11. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  12. use Shopware\Core\Framework\DataAbstractionLayer\Search\EntitySearchResult;
  13. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\AndFilter;
  14. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
  15. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  16. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\MultiFilter;
  17. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\NotFilter;
  18. use Shopware\Core\Framework\DataAbstractionLayer\Search\Parser\QueryStringParser;
  19. use Shopware\Core\Framework\Struct\ArrayEntity;
  20. class StorefrontSubscriber implements EventSubscriberInterface
  21. {
  22.     private $settingsService;
  23.     /**
  24.      * @var EntityRepositoryInterface
  25.      */
  26.     private $productRepository;
  27.     public function __construct(
  28.         SettingService            $settingsService,
  29.         EntityRepositoryInterface $productRepository
  30.     )
  31.     {
  32.         $this->settingsService $settingsService;
  33.         $this->productRepository $productRepository;
  34.     }
  35.     public static function getSubscribedEvents(): array
  36.     {
  37.         // Return the events to listen to as array like this:  <event to listen to> => <method to execute>
  38.         return [
  39.             FooterPageletLoadedEvent::class => 'onFooterLoaded',
  40.             ProductPageLoadedEvent::class => 'onProductPageLoadedEvent',
  41.         ];
  42.     }
  43.     public function onProductPageLoadedEvent(ProductPageLoadedEvent $event)
  44.     {
  45.         $freeShipping false;
  46.         $rentRequest false;
  47.         $event->getPage()->getProduct()->getId();
  48.         $additions $this->productRepository->search(
  49.             (new Criteria())
  50.                 ->addFilter(new EqualsAnyFilter('id', [$event->getPage()->getProduct()->getId()]))
  51.                 ->addAssociation('tags'),
  52.             $event->getContext());
  53.         foreach ($additions->getElements() as $element) {
  54.             foreach ($element->getTags()->getElements() as $tag) {
  55.                 if($tag->getName() === "Versandkostenfrei") {
  56.                     $freeShipping true;
  57.                 }
  58.                 if($tag->getName() === "Mietanfrage") {
  59.                     $rentRequest true;
  60.                 }
  61.             }
  62.             $event->getPage()->addExtension('nimbitsFreeShipping', new ArrayEntity(['freeShipping' => $freeShipping]) );
  63.             $event->getPage()->addExtension('nimbitsRentRequest', new ArrayEntity(['rentRequest' => $rentRequest]) );
  64.         }
  65.     }
  66.     public function onFooterLoaded(FooterPageletLoadedEvent $event)
  67.     {
  68.         $event->getPagelet()->addExtension('nimbitsCustomChangesSettings',
  69.             $this->settingsService->getSettingsAsStruct($event->getSalesChannelContext()->getSalesChannel()->getId())
  70.         );
  71.     }
  72. }
  73. ?>