src/EventListener/OrderItemListener.php line 34

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventListener;
  4. use App\Entity\Order\OrderItem;
  5. use App\Entity\Product\Product;
  6. use App\Entity\User\ShopUser;
  7. use App\Entity\UserLibrary;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
  10. use Sylius\Component\Core\Model\ProductVariant;
  11. use Sylius\Component\Taxonomy\Model\TaxonInterface;
  12. use Symfony\Component\DependencyInjection\ContainerInterface;
  13. use Symfony\Component\HttpFoundation\RedirectResponse;
  14. use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
  15. use Symfony\Component\Routing\RouterInterface;
  16. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  17. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  18. use Symfony\Component\Translation\Translator;
  19. use function filter_var;
  20. use function in_array;
  21. use const FILTER_VALIDATE_EMAIL;
  22. class OrderItemListener
  23. {
  24.     public function __construct(private EntityManagerInterface $entityManagerInterface, private FlashBagInterface $flashBag, private RouterInterface $router, private TokenStorageInterface $tokenStorage, private ContainerInterface $container)
  25.     {
  26.     }
  27.     public function onSyliusOrderAddCheck(ResourceControllerEvent $event): void
  28.     {
  29.         /**  @var Translator $translator **/
  30.         $translator $this->container->get('translator') ?? null;
  31.         /** @var OrderItem $orderItem */
  32.         $orderItem $event->getSubject();
  33.         /** @phpstan-ignore-next-line */
  34.         $orderItems $orderItem->getItems();
  35.         /** @var TokenInterface $token */
  36.         $token $this->tokenStorage->getToken();
  37.         if (! filter_var($token->getUser(), FILTER_VALIDATE_EMAIL)) {
  38.             $event->setResponse(new RedirectResponse($this->router->generate('sylius_shop_login')));
  39.             return;
  40.         }
  41.         /** @var ShopUser $shopUser */
  42.         $shopUser $token->getUser();
  43.         $userLibraryRepository $this->entityManagerInterface->getRepository(UserLibrary::class);
  44.         foreach ($orderItems as $key => $orderDetails) {
  45.             /** @var Product $product */
  46.             $product $orderDetails->getProduct();
  47.             /** @var  TaxonInterface $mainTaxon */
  48.             $mainTaxon $product->getMainTaxon();
  49.             // $packsCheck = ['story-welcome-packs', 'story-subscription-packs', 'story-default-packs', 'quiz-default-packs', 'special-events', 'special-events-story', 'special-events-quiz'];
  50.             $packsCheck = ['story-welcome-packs''story-subscription-packs''story-default-packs''quiz-default-packs'];
  51.             $getCode $mainTaxon->getCode() ? $mainTaxon->getCode() : '';
  52.             if (in_array($getCode$packsChecktrue)) {
  53.                 $this->flashBag->add('error''"' $product->getName() . '" ' $translator->trans('sylius.pages.content.errorMsgPack'));
  54.                 $event->setResponse(new RedirectResponse($this->router->generate('sylius_shop_cart_summary')));
  55.                 return;
  56.             }
  57.             //Get Library Data
  58.             $libraryItem $userLibraryRepository->findOneBy(['product' => $product->getId(), 'shopUser' => $shopUser->getId()]);
  59.             if (! $libraryItem || $libraryItem->getContentType() === '') {
  60.                 continue;
  61.             }
  62.             // Redirect to cart with message
  63.             $this->flashBag->add('error''"' $product->getName() . '" ' $translator->trans('sylius.pages.content.errorMsg'));
  64.             $event->setResponse(new RedirectResponse($this->router->generate('sylius_shop_cart_summary')));
  65.             return;
  66.         }
  67.     }
  68.     public function onSyliusOrderAddtoCart(ResourceControllerEvent $event): void
  69.     {
  70.         /** @var TokenInterface $token */
  71.         $token $this->tokenStorage->getToken();
  72.         if (! filter_var($token->getUser(), FILTER_VALIDATE_EMAIL)) {
  73.             return;
  74.         }
  75.         /** @var OrderItem $orderItem */
  76.         $orderItem $event->getSubject();
  77.         /** @var ProductVariant $productVarriant */
  78.         $productVarriant $orderItem->getVariant();
  79.         /** @var Product $product */
  80.         $product $productVarriant->getProduct();
  81.         /** @var ShopUser $shopUser */
  82.         $shopUser $token->getUser();
  83.         if (! $shopUser || $shopUser->getId() === '') {
  84.             return;
  85.         }
  86.         $userLibraryRepository $this->entityManagerInterface->getRepository(UserLibrary::class);
  87.         //Get Cart Product Taxon
  88.         /** @var  TaxonInterface $productMainTaxon */
  89.         $productMainTaxon $product $product->getMainTaxon() : '';
  90.         $libraryItem $userLibraryRepository->findOneBy(['product' => $product->getId(), 'shopUser' => $shopUser->getId()]);
  91.         if (! $libraryItem || $libraryItem->getContentType() === '') {
  92.             return;
  93.         }
  94.         $event->stop('sylius.pages.content.errorMsg');
  95.     }
  96. }