app/Plugin/CustomerReview42/Controller/ReviewController.php line 70

Open in your IDE?
  1. <?php
  2. namespace Plugin\CustomerReview42\Controller;
  3. use Plugin\CustomerReview42\Repository\CustomerReviewConfigRepository;
  4. use Plugin\CustomerReview42\Repository\CustomerReviewListRepository;
  5. use Plugin\CustomerReview42\Form\Type\SearchReviewType;
  6. use Eccube\Controller\AbstractController;
  7. use Eccube\Entity\Master\ProductStatus;
  8. use Eccube\Entity\BaseInfo;
  9. use Eccube\Entity\Product;
  10. use Eccube\Repository\BaseInfoRepository;
  11. use Eccube\Repository\ProductRepository;
  12. use Knp\Component\Pager\PaginatorInterface;
  13. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  14. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. class ReviewController extends AbstractController
  19. {
  20.     /**
  21.      * @var BaseInfo
  22.      */
  23.     protected $BaseInfo;
  24.     /**
  25.      * @var ProductRepository
  26.      */
  27.     protected $productRepository;
  28.     /**
  29.      * @var CustomerReviewConfigRepository
  30.      */
  31.     protected $customerReviewConfigRepository;
  32.     /**
  33.      * @var CustomerReviewListRepository
  34.      */
  35.     protected $customerReviewListRepository;
  36.     /**
  37.      * ReviewController constructor.
  38.      *
  39.      * @param BaseInfoRepository $baseInfoRepository
  40.      * @param ProductRepository $productRepository
  41.      * @param CustomerReviewConfigRepository $customerReviewConfigRepository
  42.      * @param CustomerReviewListRepository $customerReviewListRepository
  43.      */
  44.     public function __construct(
  45.         BaseInfoRepository $baseInfoRepository,
  46.         ProductRepository $productRepository,
  47.         CustomerReviewConfigRepository $customerReviewConfigRepository,
  48.         CustomerReviewListRepository $customerReviewListRepository
  49.     ) {
  50.         $this->BaseInfo $baseInfoRepository->get();
  51.         $this->productRepository $productRepository;
  52.         $this->customerReviewConfigRepository $customerReviewConfigRepository;
  53.         $this->customerReviewListRepository $customerReviewListRepository;
  54.     }
  55.     /**
  56.      * レビュー一覧画面.
  57.      *
  58.      * @Route("/review/list/{id}", name="review_list", requirements={"id" = "\d+"})
  59.      * @Template("@CustomerReview42/list.twig")
  60.      * @ParamConverter("Product", options={"repository_method" = "findWithSortedClassCategories"})
  61.      */
  62.     public function index(Request $requestProduct $ProductPaginatorInterface $paginator)
  63.     {
  64.         $Config $this->customerReviewConfigRepository->get();
  65.         $ViewMax $Config->getReviewMax();
  66.         if (!$this->checkVisibility($Product)) {
  67.             throw new NotFoundHttpException();
  68.         }
  69.         $builder $this->formFactory->createNamedBuilder(''SearchReviewType::class);
  70.         
  71.         if ($request->getMethod() === 'GET') {
  72.             $builder->setMethod('GET');
  73.         }
  74.         $searchForm $builder->getForm();
  75.         $searchForm->handleRequest($request);
  76.         $searchData $searchForm->getData();
  77.         $searchData['product_id']  = $Product->getId();
  78.         $qb $this->customerReviewListRepository->getQueryBuilderBySearchData($searchData);
  79.         $query $qb->getQuery()
  80.             ->useResultCache(true$this->eccubeConfig['eccube_result_cache_lifetime_short']);
  81.         $pagination $paginator->paginate(
  82.             $query,
  83.             !empty($searchData['pageno']) ? $searchData['pageno'] : 1,
  84.             $ViewMax $ViewMax 4294967295
  85.         );
  86.         return [
  87.             'Product' => $Product,
  88.             'pagination' => $pagination,
  89.             'search_form' => $searchForm->createView(),
  90.             'review_config' => $Config,
  91.         ];
  92.     }
  93.     /**
  94.      * 閲覧可能な商品かどうかを判定
  95.      *
  96.      * @param Product $Product
  97.      *
  98.      * @return boolean 閲覧可能な場合はtrue
  99.      */
  100.     private function checkVisibility(Product $Product)
  101.     {
  102.         $is_admin $this->session->has('_security_admin');
  103.         // 管理ユーザの場合はステータスやオプションにかかわらず閲覧可能.
  104.         if (!$is_admin) {
  105.             // 在庫なし商品の非表示オプションが有効な場合.
  106.             if ($this->BaseInfo->isOptionNostockHidden()) {
  107.                 if (!$Product->getStockFind()) {
  108.                     return false;
  109.                 }
  110.             }
  111.             // 公開ステータスでない商品は表示しない.
  112.             if ($Product->getStatus()->getId() !== ProductStatus::DISPLAY_SHOW) {
  113.                 return false;
  114.             }
  115.         }
  116.         return true;
  117.     }
  118. }