custom/plugins/ImnxxNwbProductApi/src/Subscriber/TeacherPriceSubscriber.php line 43

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace ImnxxNwbProductApi\Subscriber;
  4. use Exception;
  5. use Shopware\Storefront\Page\PageLoadedEvent;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Shopware\Storefront\Page\GenericPageLoadedEvent;
  8. use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
  9. use Shopware\Storefront\Framework\Routing\Router;
  10. use Symfony\Component\HttpFoundation\RedirectResponse;
  11. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  12. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  13. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  14. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\ContainsFilter;
  15. use Shopware\Core\System\SystemConfig\SystemConfigService;
  16. class TeacherPriceSubscriber implements EventSubscriberInterface {
  17.     private $router;
  18.     private $productRepository;
  19.     private $systemConfigService;
  20.     public function __construct(
  21.         Router $router,
  22.         EntityRepository $productRepository,
  23.         SystemConfigService $systemConfigService,
  24.     ) {
  25.         $this->router $router;
  26.         $this->productRepository $productRepository;
  27.         $this->systemConfigService $systemConfigService;
  28.     }
  29.     public static function getSubscribedEvents(): array {
  30.         return [
  31.             ProductPageLoadedEvent::class => 'onProductPageLoaded',
  32.             GenericPageLoadedEvent::class => 'onPageLoaded'
  33.         ];
  34.     }
  35.     public function onPageLoaded(PageLoadedEvent $event) {
  36.         $event->getPage()->assign(['topsellers' => $this->systemConfigService->get('ImnxxNwbProductApi.config.topsellers'$event->getSalesChannelContext()->getSalesChannelId())]);
  37.     }
  38.     public function onProductPageLoaded(ProductPageLoadedEvent $event) {
  39.         if(
  40.             (
  41.                 strpos($event->getPage()->getProduct()->getProductNumber(), 'Referendar') !== false &&
  42.                 strpos($event->getSalesChannelContext()->getCurrentCustomerGroup()->getName(), 'Referendar') === false
  43.             ) ||
  44.             (
  45.                 strpos($event->getPage()->getProduct()->getProductNumber(), 'Lehrenden') !== false &&
  46.                 strpos($event->getSalesChannelContext()->getCurrentCustomerGroup()->getName(), 'Weiterbildung') === false
  47.             )
  48.         ) {
  49.             $criteria = new Criteria();
  50.             $criteria->addFilter(new EqualsFilter('parentId'$event->getPage()->getProduct()->getParentId()));
  51.             $criteria->addFilter(new ContainsFilter('productNumber''Ladenpreis'));
  52.             $criteria->addFilter(new ContainsFilter('productNumber'
  53.                 explode('.'$event->getPage()->getProduct()->getProductNumber())[0]
  54.             ));
  55.             $productId $this->productRepository->searchIds($criteria$event->getContext())->getIds();
  56.             if(isset($productId[0])) {
  57.                 $url $this->router->generate('frontend.detail.page', ['productId' => $productId[0]]);
  58.                 $response = new RedirectResponse($url);
  59.                 $response->send();
  60.             }
  61.         }
  62.     }
  63. }