<?php
declare(strict_types=1);
namespace ImnxxNwbProductApi\Subscriber;
use Exception;
use Shopware\Storefront\Page\PageLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Shopware\Storefront\Page\GenericPageLoadedEvent;
use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
use Shopware\Storefront\Framework\Routing\Router;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\ContainsFilter;
use Shopware\Core\System\SystemConfig\SystemConfigService;
class TeacherPriceSubscriber implements EventSubscriberInterface {
private $router;
private $productRepository;
private $systemConfigService;
public function __construct(
Router $router,
EntityRepository $productRepository,
SystemConfigService $systemConfigService,
) {
$this->router = $router;
$this->productRepository = $productRepository;
$this->systemConfigService = $systemConfigService;
}
public static function getSubscribedEvents(): array {
return [
ProductPageLoadedEvent::class => 'onProductPageLoaded',
GenericPageLoadedEvent::class => 'onPageLoaded'
];
}
public function onPageLoaded(PageLoadedEvent $event) {
$event->getPage()->assign(['topsellers' => $this->systemConfigService->get('ImnxxNwbProductApi.config.topsellers', $event->getSalesChannelContext()->getSalesChannelId())]);
}
public function onProductPageLoaded(ProductPageLoadedEvent $event) {
if(
(
strpos($event->getPage()->getProduct()->getProductNumber(), 'Referendar') !== false &&
strpos($event->getSalesChannelContext()->getCurrentCustomerGroup()->getName(), 'Referendar') === false
) ||
(
strpos($event->getPage()->getProduct()->getProductNumber(), 'Lehrenden') !== false &&
strpos($event->getSalesChannelContext()->getCurrentCustomerGroup()->getName(), 'Weiterbildung') === false
)
) {
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('parentId', $event->getPage()->getProduct()->getParentId()));
$criteria->addFilter(new ContainsFilter('productNumber', 'Ladenpreis'));
$criteria->addFilter(new ContainsFilter('productNumber',
explode('.', $event->getPage()->getProduct()->getProductNumber())[0]
));
$productId = $this->productRepository->searchIds($criteria, $event->getContext())->getIds();
if(isset($productId[0])) {
$url = $this->router->generate('frontend.detail.page', ['productId' => $productId[0]]);
$response = new RedirectResponse($url);
$response->send();
}
}
}
}