app/Customize/Controller/Block/ProductReviewController.php line 58

Open in your IDE?
  1. <?php
  2. namespace Customize\Controller\Block;
  3. use Customize\Entity\ProductReviewReference;
  4. use Customize\Repository\ProductReviewReferenceRepository;
  5. use Eccube\Controller\AbstractController;
  6. use Eccube\Entity\Product;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Plugin\ProductReview42Plus\Entity\ProductReview;
  9. use Plugin\ProductReview42Plus\Entity\ProductReviewStatus;
  10. use Plugin\ProductReview42Plus\Repository\ProductReviewRepository;
  11. use Plugin\ProductReview42Plus\Repository\ProductReviewConfigRepository;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. class ProductReviewController extends AbstractController
  17. {
  18.     /**
  19.      * @var ProductReviewConfigRepository
  20.      */
  21.     protected $productReviewConfigRepository;
  22.     /**
  23.      * @var ProductReviewRepository
  24.      */
  25.     protected $productReviewRepository;
  26.     /**
  27.      * @var ProductReviewReferenceRepository
  28.      */
  29.     private $productReviewReferenceRepository;
  30.     /**
  31.      * ProductReview constructor.
  32.      *
  33.      * @param ProductReviewConfigRepository $productReviewConfigRepository
  34.      * @param ProductReviewRepository $productReviewRepository
  35.      */
  36.     public function __construct(
  37.         ProductReviewConfigRepository $productReviewConfigRepository,
  38.         ProductReviewRepository $productReviewRepository,
  39.         ProductReviewReferenceRepository $productReviewReferenceRepository
  40.     ) {
  41.         $this->productReviewConfigRepository $productReviewConfigRepository;
  42.         $this->productReviewRepository $productReviewRepository;
  43.         $this->productReviewReferenceRepository $productReviewReferenceRepository;
  44.     }
  45.     /**
  46.      * @Route("/block/{id}/product_reviews", name="block_product_reviews", requirements={"id" = "\d+"}, methods={"GET"})
  47.      * @Template("Block/product_reviews.twig")
  48.      * @param Product $Product
  49.      * @return array
  50.      */
  51.     public function index(Product $Product): array
  52.     {
  53.         $Config $this->productReviewConfigRepository->get();
  54.         // review_max:5件
  55.         if($Config){
  56.             $limit $Config->getReviewMax();
  57.         } else{
  58.             $limit 5;
  59.         }
  60.         $ProductReviews $this->productReviewRepository->findDetailReview($Product$limit);
  61.         $rate $this->productReviewRepository->getAvgAll($Product);
  62.         $avg round($rate['recommend_avg']);
  63.         $count intval($rate['review_count']);
  64.         return [
  65.             'ProductReviews' => $ProductReviews,
  66.             'ProductReviewAvg' => $avg,
  67.             'ProductReviewCount' => $count,
  68.         ];
  69.     }
  70.     /**
  71.      * @Route("/review/reference", name="review_reference", requirements={"id" = "\d+"}, methods={"POST"})
  72.      * @param Request $request
  73.      * @return JsonResponse
  74.      */
  75.     public function reference(Request $request): JsonResponse
  76.     {
  77.         if (!$request->isXmlHttpRequest()) {
  78.             throw new BadRequestHttpException(); //API通信のみ受け付ける
  79.         }
  80.         $Customer $this->getUser();
  81.         if (empty($Customer)) {
  82.             return $this->json(['result' => false'message' => '申し訳ございません。会員のみレビュー参考機能が利用できます。']);
  83.         }
  84.         $this->entityManager->beginTransaction();
  85.         try {
  86.             $product_review_id $request->request->get('product_review_id');
  87.             $Review $this->productReviewRepository->findOneBy(['id' => $product_review_id]);
  88.             $Reference $this->productReviewReferenceRepository->findOneby(
  89.                 ['customer_id' => $Customer->getId(), 'product_review_id' => $product_review_id]);
  90.             if (empty($Reference)) {
  91.                 $Reference = new ProductReviewReference;
  92.                 $Reference->setProductReviewId($product_review_id);
  93.                 $Reference->setCustomerId($Customer->getId());
  94.                 $this->entityManager->persist($Reference);
  95.                 $Review->setReferenceCount($Review->getReferenceCount() + 1);
  96.             } else {
  97.                 $this->entityManager->remove($Reference);
  98.                 $Review->setReferenceCount($Review->getReferenceCount() - 1);
  99.             }
  100.             $this->entityManager->persist($Review);
  101.             $this->entityManager->flush();
  102.             $this->entityManager->commit();
  103.             return $this->json(['result' => true'message' => '参考になりました。ありがとうございます!']);
  104.         } catch (\Exception $e) {
  105.             $this->entityManager->rollback();
  106.             log_info($e->getMessage());
  107.             return $this->json(['result' => false'message' => '申し訳ありません。問題が発生しました']);
  108.         }
  109.     }
  110.     /**
  111.      * @Route("/review/report", name="review_report", requirements={"id" = "\d+"}, methods={"POST"})
  112.      * @param Request $request
  113.      * @return JsonResponse
  114.      */
  115.     public function report(Request $request): JsonResponse
  116.     {
  117.         if (!$request->isXmlHttpRequest()) {
  118.             throw new BadRequestHttpException(); //API通信のみ受け付ける
  119.         }
  120.         $this->entityManager->beginTransaction();
  121.         try {
  122.             $product_review_id $request->request->get('product_review_id');
  123.             $Review $this->productReviewRepository->findOneBy(['id' => $product_review_id]);
  124.             $Review->setReportFlg(true);
  125.             $this->entityManager->persist($Review);
  126.             $this->entityManager->flush();
  127.             $this->entityManager->commit();
  128.             return $this->json(['result' => true'message' => 'レポートになりました。ありがとうございます!']);
  129.         } catch (\Exception $e) {
  130.             $this->entityManager->rollback();
  131.             log_info($e->getMessage());
  132.             return $this->json(['result' => false'message' => '申し訳ありません。問題が発生しました']);
  133.         }
  134.     }
  135. }