custom/plugins/FourtwosixThemeCustomization/src/Subscriber/CheckoutConfirmSubscriber.php line 32

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace FourtwosixThemeCustomization\Subscriber;
  4. use FourtwosixThemeCustomization\FourtwosixThemeCustomization as Plugin;
  5. use Shopware\Core\Checkout\Cart\Cart;
  6. use Shopware\Storefront\Framework\Routing\Router;
  7. use Shopware\Storefront\Page\Checkout\Confirm\CheckoutConfirmPageLoadedEvent;
  8. use Shopware\Storefront\Page\PageLoadedEvent;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\HttpFoundation\RedirectResponse;
  11. class CheckoutConfirmSubscriber implements EventSubscriberInterface
  12. {
  13.     /** @var Router $router */
  14.     private Router $router;
  15.     public function __construct(Router $router)
  16.     {
  17.         $this->router $router;
  18.     }
  19.     public static function getSubscribedEvents(): array
  20.     {
  21.         return [
  22.             CheckoutConfirmPageLoadedEvent::class => 'onCheckoutConfirm'
  23.         ];
  24.     }
  25.     public function onCheckoutConfirm(PageLoadedEvent $event)
  26.     {
  27.         $customerGroupId $event->getSalesChannelContext()->getCurrentCustomerGroup()->getId();
  28.         if (
  29.             $customerGroupId !== Plugin::CUSTOMER_GROUP_TRADER_ID &&
  30.             $customerGroupId !== Plugin::CUSTOMER_GROUP_FOREIGN_TRADER_ID
  31.         ) {
  32.             return;
  33.         }
  34.         $cart $event->getPage()->getCart();
  35.         $manufacturerIds = [
  36.             Plugin::MANUFACTURER_PLATINLUX_ID,
  37.             Plugin::MANUFACTURER_LUCIDE_ID,
  38.         ];
  39.         if ($this->containsManufacturers($cart$manufacturerIds)) {
  40.             return;
  41.         }
  42.         $path $this->router->generate('frontend.checkout.cart.page');
  43.         $this->redirectTo($path);
  44.     }
  45.     private function containsManufacturers(Cart &$cart, array &$manufacturerIds): bool
  46.     {
  47.         foreach ($cart->getLineItems()->getElements() as $product) {
  48.             foreach ($manufacturerIds as $manufacturerId) {
  49.                 if ($product->getPayload()['manufacturerId'] === $manufacturerId) {
  50.                     return true;
  51.                 }
  52.             }
  53.         }
  54.         return false;
  55.     }
  56.     private function redirectTo(string &$path)
  57.     {
  58.         $response = new RedirectResponse($path '?missing_products=1'307);
  59.         $response->send();
  60.     }
  61. }