app/Customize/Event/NewProductEvent.php line 52

Open in your IDE?
  1. <?php
  2. namespace Customize\Event;
  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 Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Form\FormFactoryInterface;
  10. use Symfony\Component\Security\Core\Security;
  11. class NewProductEvent implements EventSubscriberInterface
  12. {
  13.     /**
  14.      * @var FormFactoryInterface
  15.      */
  16.     protected $formFactory;
  17.     /**
  18.      * @var ProductRepository
  19.      */
  20.     protected $productRepository;
  21.     protected CartService $cartService;
  22.     
  23.     protected Security $security;
  24.     protected CustomerFavoriteProductRepository $customerFavoriteProductRepository;
  25.     public function __construct(
  26.         FormFactoryInterface $formFactory,
  27.         ProductRepository $productRepository,
  28.         CartService $cartService,
  29.         Security $security,
  30.         CustomerFavoriteProductRepository $customerFavoriteProductRepository
  31.     ) {
  32.         $this->formFactory $formFactory;
  33.         $this->productRepository $productRepository;
  34.         $this->cartService $cartService;
  35.         $this->customerFavoriteProductRepository $customerFavoriteProductRepository;
  36.         $this->security $security;
  37.     }
  38.     public static function getSubscribedEvents()
  39.     {
  40.         return [
  41.             'Block/new_product.twig' => 'onNewProduct',
  42.         ];
  43.     }
  44.     public function onNewProduct(TemplateEvent $event)
  45.     {
  46.         $parameters $event->getParameters();
  47.         $Products $this->productRepository->findBy([],['id' => 'DESC'], 6);
  48.         $ids = [];
  49.         $itemInCart = [];
  50.         $isFavorite = [];
  51.         $Customer $this->security->getUser();
  52.         foreach ($Products as $Product) {
  53.             $ids[] = $Product->getId();
  54.         }
  55.         $ProductsAndClassCategories $this->productRepository->findProductsWithSortedClassCategories($ids'p.id');
  56.         
  57.         $forms = [];
  58.         foreach ($Products as $key => $Product) {
  59.             /* @var $builder \Symfony\Component\Form\FormBuilderInterface */
  60.             $builder $this->formFactory->createNamedBuilder(
  61.                 '',
  62.                 AddCartType::class,
  63.                 null,
  64.                 [
  65.                     'product' => $ProductsAndClassCategories[$Product->getId()],
  66.                     'allow_extra_fields' => true,
  67.                 ]
  68.             );
  69.             $addCartForm $builder->getForm();
  70.             $forms[$Product->getId()] = $addCartForm->createView();
  71.             if ($Customer) {
  72.                 $isFavorite[$Product->getId()] = $this->customerFavoriteProductRepository->isFavorite($Customer$Product);
  73.             }
  74.         }
  75.         
  76.         $Carts $this->cartService->getCarts();
  77.         foreach ($Carts as $key => $Cart) {
  78.             $CartItems $Cart->getCartItems();
  79.             foreach ($CartItems as $key => $CartItem) {
  80.                 $itemInCart[$CartItem->getProductClass()->getProduct()->getId()] = $CartItem->getQuantity();
  81.             }
  82.         }
  83.         $parameters['newForms'] = $forms;
  84.         $parameters['Products'] = $Products;
  85.         $parameters['newItemInCart'] = $itemInCart;
  86.         $parameters['isNewItemFavorite'] = $isFavorite;
  87.         $event->setParameters($parameters);
  88.     }
  89. }