app/Plugin/RefineProductListFavorite42/Controller/ProductListFavoriteController.php line 88

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of Refine
  4.  *
  5.  * Copyright(c) 2024 Refine Co.,Ltd. All Rights Reserved.
  6.  *
  7.  * https://www.re-fine.jp/
  8.  *
  9.  * For the full copyright and license information, please view the LICENSE
  10.  * file that was distributed with this source code.
  11.  */
  12. namespace Plugin\RefineProductListFavorite42\Controller;
  13. use Eccube\Controller\AbstractController;
  14. use Eccube\Entity\Product;
  15. use Eccube\Event\EccubeEvents;
  16. use Eccube\Event\EventArgs;
  17. use Eccube\Repository\CustomerFavoriteProductRepository;
  18. use Eccube\Repository\ProductRepository;
  19. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  23. /**
  24.  * Class ProductListFavoriteController.
  25.  */
  26. class ProductListFavoriteController extends AbstractController
  27. {
  28.     /**
  29.      * @var ProductRepository
  30.      */
  31.     protected $productRepository;
  32.     /**
  33.      * @var CustomerFavoriteProductRepository
  34.      *
  35.      * @param CustomerFavoriteProductRepository $customerFavoriteProductRepository
  36.      */
  37.     protected $customerFavoriteProductRepository;
  38.     /**
  39.      * ProductListFavoriteController constructor.
  40.      *
  41.      * @param ProductRepository $productRepository
  42.      * @param CustomerFavoriteProductRepository $customerFavoriteProductRepository
  43.      */
  44.     public function __construct(
  45.         ProductRepository $productRepository,
  46.         CustomerFavoriteProductRepository $customerFavoriteProductRepository
  47.     ) {
  48.         $this->productRepository $productRepository;
  49.         $this->customerFavoriteProductRepository $customerFavoriteProductRepository;
  50.     }
  51.     /**
  52.      * お気に入り追加
  53.      *
  54.      * @Route("/product_list_add_favorite", name="product_list_add_favorite")
  55.      * @param Request $request
  56.      * @return \Symfony\Component\HttpFoundation\RedirectResponse
  57.      */
  58.     public function addFavorite(Request $request)
  59.     {
  60.         /** @var \Eccube\Entity\Product $Product */
  61.         $Product $this->productRepository->find($request->get('id'));
  62.         if ($this->isGranted('ROLE_USER')) {
  63.             $Customer $this->getUser();
  64.             $this->customerFavoriteProductRepository->addFavorite($Customer$Product);
  65.             $this->session->getFlashBag()->set('product_detail.just_added_favorite'$Product->getId());
  66.             return $this->redirectToRoute('product_list', [
  67.                 'mode' => $request->get('mode'),
  68.                 'category_id' => $request->get('category_id'),
  69.                 'name' => $request->get('name'),
  70.                 'pageno' => $request->get('pageno'),
  71.                 'disp_number' => $request->get('disp_number'),
  72.                 'orderby' => $request->get('orderby'),
  73.             ]);
  74.         } else {
  75.             // 非会員の場合、ログイン画面を表示
  76.             // ログイン後の画面遷移先を設定
  77.             $this->setLoginTargetPath($this->generateUrl('product_list_add_favorite', ['id' => $Product->getId()], UrlGeneratorInterface::ABSOLUTE_URL));
  78.             $this->session->getFlashBag()->set('eccube.add.favorite'true);
  79.             $event = new EventArgs(
  80.                 [
  81.                     'Product' => $Product,
  82.                 ],
  83.                 $request
  84.             );
  85.             $this->eventDispatcher->dispatch($eventEccubeEvents::FRONT_PRODUCT_FAVORITE_ADD_COMPLETE);
  86.             return $this->redirectToRoute('mypage_login');
  87.         }
  88.     }
  89.     /**
  90.      * お気に入り削除
  91.      *
  92.      * @Route("/product_list_delete_favorite", name="product_list_delete_favorite")
  93.      * @param Request $request
  94.      * @return \Symfony\Component\HttpFoundation\RedirectResponse
  95.      */
  96.     public function deleteFavorite(Request $request)
  97.     {
  98.         /** @var \Eccube\Entity\Product $Product */
  99.         $Product $this->productRepository->find($request->get('id'));
  100.         
  101.         if ($Product && $this->isGranted('ROLE_USER')) {
  102.             /** @var \Eccube\Entity\Customer $Customer */
  103.             $Customer $this->getUser();
  104.             /** @var \Eccube\Entity\CustomerFavoriteProduct $CustomerFavoriteProduct */
  105.             $CustomerFavoriteProduct =
  106.                 $this->customerFavoriteProductRepository->findOneBy(['Customer' => $Customer'Product' => $Product]);
  107.             if ($CustomerFavoriteProduct) {
  108.                 $this->customerFavoriteProductRepository->delete($CustomerFavoriteProduct);
  109.                 $this->session->getFlashBag()->set('favorite_delete_button.deleted'$Product->getId());
  110.             } else {
  111.                 $this->session->getFlashBag()->set('favorite_delete_button.already_deleted'$Product->getId());
  112.             }
  113.         } else {
  114.             $this->session->getFlashBag()->set('favorite_delete_button.none_product'$Product->getId());
  115.         }
  116.         return $this->redirectToRoute('product_list', [
  117.             'mode' => $request->get('mode'),
  118.             'category_id' => $request->get('category_id'),
  119.             'name' => $request->get('name'),
  120.             'pageno' => $request->get('pageno'),
  121.             'disp_number' => $request->get('disp_number'),
  122.             'orderby' => $request->get('orderby'),
  123.         ]);
  124.     }
  125. }