app/Plugin/PinpointSaleDx/EventSubscriber/BlockEvent.php line 57

Open in your IDE?
  1. <?php
  2. namespace Plugin\PinpointSaleDx\EventSubscriber;
  3. use Eccube\Event\TemplateEvent;
  4. use Eccube\Form\Type\AddCartType;
  5. use Eccube\Repository\CustomerFavoriteProductRepository;
  6. use Eccube\Repository\ProductRepository;
  7. use Eccube\Service\CartService;
  8. use Plugin\PinpointSaleDx\Repository\ProductPinpointRepository;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\Form\FormFactoryInterface;
  11. use Symfony\Component\Security\Core\Security;
  12. class BlockEvent implements EventSubscriberInterface
  13. {
  14.     /**
  15.      * @var FormFactoryInterface
  16.      */
  17.     protected $formFactory;
  18.     /**
  19.      * @var ProductRepository
  20.      */
  21.     protected $productRepository;
  22.     protected Security $security;
  23.     protected CartService $cartService;
  24.     protected CustomerFavoriteProductRepository $customerFavoriteProductRepository;
  25.     protected ProductPinpointRepository $productPinpointRepository;
  26.     public function __construct(
  27.         FormFactoryInterface $formFactory,
  28.         ProductRepository $productRepository,
  29.         Security $security,
  30.         CartService $cartService,
  31.         CustomerFavoriteProductRepository $customerFavoriteProductRepository,
  32.         ProductPinpointRepository $productPinpointRepository
  33.     ) {
  34.         $this->formFactory $formFactory;
  35.         $this->productRepository $productRepository;
  36.         $this->security $security;
  37.         $this->cartService $cartService;
  38.         $this->customerFavoriteProductRepository $customerFavoriteProductRepository;
  39.         $this->productPinpointRepository $productPinpointRepository;
  40.     }
  41.     public static function getSubscribedEvents()
  42.     {
  43.         return [
  44.             'Block/product_sale_block.twig' => 'onProductSale',
  45.         ];
  46.     }
  47.     public function onProductSale(TemplateEvent $event)
  48.     {
  49.         $Customer $this->security->getUser();
  50.         $isFavorite = [];
  51.         $Products = [];
  52.         $PinpointProducts $this->productPinpointRepository->getSaleProducts();
  53.         
  54.         /** @var \Plugin\PinpointSaleDx\Entity\ProductPinpoint $PinpointProduct */
  55.         foreach ($PinpointProducts as $key => $PinpointProduct) {
  56.             $Products[] = $PinpointProduct->getProductClass()->getProduct();
  57.         }
  58.         $parameters $event->getParameters();
  59.         $ids = [];
  60.         $itemInCart = [];
  61.         foreach ($Products as $Product) {
  62.             $ids[] = $Product->getId();
  63.         }
  64.         $ProductsAndClassCategories $this->productRepository->findProductsWithSortedClassCategories($ids'p.id');
  65.         
  66.         $forms = [];
  67.         foreach ($Products as $key => $Product) {
  68.             /* @var $builder \Symfony\Component\Form\FormBuilderInterface */
  69.             $builder $this->formFactory->createNamedBuilder(
  70.                 '',
  71.                 AddCartType::class,
  72.                 null,
  73.                 [
  74.                     'product' => $ProductsAndClassCategories[$Product->getId()],
  75.                     'allow_extra_fields' => true,
  76.                 ]
  77.             );
  78.             $addCartForm $builder->getForm();
  79.             $forms[$Product->getId()] = $addCartForm->createView();
  80.             if ($Customer) {
  81.                 $isFavorite[$Product->getId()] = $this->customerFavoriteProductRepository->isFavorite($Customer$Product);
  82.             }
  83.         }
  84.         $Carts $this->cartService->getCarts();
  85.         foreach ($Carts as $key => $Cart) {
  86.             $CartItems $Cart->getCartItems();
  87.             foreach ($CartItems as $key => $CartItem) {
  88.                 $itemInCart[$CartItem->getProductClass()->getProduct()->getId()] = $CartItem->getQuantity();
  89.             }
  90.         }
  91.         
  92.         $parameters['sale_forms'] = $forms;
  93.         $parameters['SaleProducts'] = $Products;
  94.         $parameters['saleItemInCart'] = $itemInCart;
  95.         $parameters['isSaleFavorite'] = $isFavorite;
  96.         $event->setParameters($parameters);
  97.     }
  98. }