app/Plugin/ProductReview4/ProductReviewEvent.php line 69

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) LOCKON CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.lockon.co.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\ProductReview4;
  13. use Eccube\Entity\Product;
  14. use Eccube\Event\TemplateEvent;
  15. use Eccube\Repository\Master\ProductStatusRepository;
  16. use Plugin\ProductReview4\Entity\ProductReviewStatus;
  17. use Plugin\ProductReview4\Repository\ProductReviewConfigRepository;
  18. use Plugin\ProductReview4\Repository\ProductReviewRepository;
  19. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  20. use Symfony\Component\Validator\Constraints\Length;
  21. class ProductReviewEvent implements EventSubscriberInterface
  22. {
  23.     /**
  24.      * @var ProductReviewConfigRepository
  25.      */
  26.     protected $productReviewConfigRepository;
  27.     /**
  28.      * @var ProductReviewRepository
  29.      */
  30.     protected $productReviewRepository;
  31.     /**
  32.      * ProductReview constructor.
  33.      *
  34.      * @param ProductReviewConfigRepository $productReviewConfigRepository
  35.      * @param ProductStatusRepository $productStatusRepository
  36.      * @param ProductReviewRepository $productReviewRepository
  37.      */
  38.     public function __construct(
  39.         ProductReviewConfigRepository $productReviewConfigRepository,
  40.         ProductStatusRepository $productStatusRepository,
  41.         ProductReviewRepository $productReviewRepository
  42.     ) {
  43.         $this->productReviewConfigRepository $productReviewConfigRepository;
  44.         $this->productStatusRepository $productStatusRepository;
  45.         $this->productReviewRepository $productReviewRepository;
  46.     }
  47.     /**
  48.      * @return array
  49.      */
  50.     public static function getSubscribedEvents()
  51.     {
  52.         return [
  53.             'KokokaraSelect/Resource/template/default/Product/list.twig' => 'detail',
  54.             'Product/detail.twig' => 'detail',
  55.             '@KokokaraSelect/default/Product/list.twig' => 'detail',
  56.         ];
  57.     }
  58.     /**
  59.      * @param TemplateEvent $event
  60.      */
  61.     public function detail(TemplateEvent $event)
  62.     {
  63.         $event->addSnippet('@ProductReview4/default/review.twig');
  64.         $Config $this->productReviewConfigRepository->get();
  65.         /** @var Product $Product */
  66.         $Product $event->getParameter('Product');
  67.         // Page指定
  68.         if (!isset($_GET['page'])) {
  69.             $_GET['page'] = 1;
  70.         }
  71.         $ProductReviews $this->productReviewRepository->findBy(['Status' => ProductReviewStatus::SHOW'Product' => $Product], ['id' => 'DESC'], $Config->getReviewMax(), (($_GET['page']-1)*$Config->getReviewMax()));
  72.         $qb $this->productReviewRepository->createQueryBuilder('r');
  73.         //$qb->select('a')->from('Plugin\ProductReview4\Entity\ProductReview','a');
  74.         $qb->where('r.Product = :product_id')->setParameter('product_id'$Product->getId());
  75.         $qb->andWhere('r.Status = 1');
  76.         $qb->andwhere('r.pic1 is not null');
  77.         $qb->orderBy('r.id','desc');
  78.         $qb->setMaxResults(4);
  79.         $PicProductReviews $qb->getQuery()->getResult();
  80.         $recommend_avg 0;
  81.         $review_count 0;
  82.         if ($Product->getIsVariant()) {
  83.             $VariantCount 0;
  84.             foreach ($Product->getProductVariant() as $ProductVariant) {
  85.                 $childReviewData $this->productReviewRepository->getAvgAll($ProductVariant->getChildProduct());
  86.                 $childRecommendAvg $childReviewData['recommend_avg'];
  87.                 $childReviewCount $childReviewData['review_count'];
  88.                 if ($childReviewCount 0) {
  89.                     $recommend_avg += $childRecommendAvg $childReviewCount;
  90.                     $review_count += $childReviewCount;
  91.                     $VariantCount++;
  92.                 }
  93.                 $ProductReviews array_merge($ProductReviews$this->productReviewRepository->findBy(['Status' => ProductReviewStatus::SHOW'Product' => $ProductVariant->getChildProduct()], ['id' => 'DESC'], $Config->getReviewMax(), (($_GET['page']-1)*$Config->getReviewMax())));
  94.             }
  95.             if ($VariantCount == 0) {
  96.                 $recommend_avg 0;
  97.             }else{
  98.                 $recommend_avg $recommend_avg $review_count;
  99.             }
  100.             
  101.         }
  102.         else{
  103.             $recommend_avg $this->productReviewRepository->getAvgAll($Product)['recommend_avg'];
  104.             $review_count $this->productReviewRepository->getAvgAll($Product)['review_count'];
  105.         }
  106.         $avg round($recommend_avg);
  107.         $count intval($review_count);
  108.         $avg_f round($recommend_avg,1);
  109.         $parameters $event->getParameters();
  110.         usort($ProductReviews, function($a$b) {
  111.             return $b->getUpdateDate() <=> $a->getUpdateDate();
  112.         });
  113.         $ProductReviews array_slice($ProductReviews05);
  114.         $parameters['ProductReviews'] = $ProductReviews;
  115.         $parameters['ProductReviewAvg'] = $avg;
  116.         $parameters['ProductReviewAvg_F'] = $avg_f;
  117.         $parameters['ProductReviewCount'] = $count;
  118.         $parameters['ProductReviewPage'] = $_GET['page'];
  119.         $parameters['ProductReviewPageCount'] = ceil($count $Config->getReviewMax());
  120.         $parameters["PicProductReviews"] = $PicProductReviews;
  121.         $parameters["ReviewProduct"] = $Product;
  122.         $event->setParameters($parameters);
  123.     }
  124.     function getProductReviews($Product) {
  125.         $Config $this->productReviewConfigRepository->get();
  126.         $ProductReviews $this->productReviewRepository->findBy(['Status' => ProductReviewStatus::SHOW'Product' => $Product], ['id' => 'DESC'], $Config->getReviewMax(), (($_GET['page']-1)*$Config->getReviewMax()));
  127.         
  128.         return $ProductReviews;
  129.     }
  130. }