app/Plugin/VeriTrans4G2/Service/Cart/IndexExtensionService.php line 36

Open in your IDE?
  1. <?php
  2. /*
  3.  * Copyright (c) 2018 VeriTrans Inc., a Digital Garage company. All rights reserved.
  4.  * http://www.veritrans.co.jp/
  5.  */
  6. namespace Plugin\VeriTrans4G2\Service\Cart;
  7. use Eccube\Event\TemplateEvent;
  8. use Symfony\Component\DependencyInjection\ContainerInterface;
  9. use Plugin\VeriTrans4G2\Entity\Vt4gSubscOrderItem;
  10. /**
  11.  * カート画面 拡張用クラス
  12.  */
  13. class IndexExtensionService
  14. {
  15.     /**
  16.      * エンティティーマネージャー
  17.      */
  18.     private $em;
  19.     /**
  20.      * VT用固定値配列
  21.      */
  22.     private $vt4gConst;
  23.     /**
  24.      * @var Symfony\Component\Security\Core\Authorization\AuthorizationChecker
  25.      */
  26.     private $authorizationChecker;
  27.     /**
  28.      * コンストラクタ
  29.      * @param ContainerInterface $container
  30.      */
  31.     public function __construct(ContainerInterface $container)
  32.     {
  33.         $this->em $container->get('doctrine.orm.entity_manager');
  34.         $this->vt4gConst $container->getParameter('vt4g_plugin.const');
  35.         $this->authorizationChecker $container->get('security.authorization_checker');
  36.     }
  37.     /**
  38.      * カート レンダリング前の処理です。
  39.      *
  40.      * @param TemplateEvent $event
  41.      */
  42.     public function onCartRenderBefore(TemplateEvent $event)
  43.     {
  44.         // 継続課金商品重複購入フラグ
  45.         $subscProductDuplicateWarnFlg false;
  46.         $Carts $event->getParameter('Carts');
  47.         // ベリトランス会員ログイン済 かつ カートに商品が存在する場合
  48.         if ($this->authorizationChecker->isGranted('ROLE_USER') && count($Carts)) {
  49.             $customerId $Carts[0]->getCustomer()->getId();
  50.             // ベリトランス会員である場合
  51.             if (!is_null($customerId)) {
  52.                 // カートに入っている商品(規格)で継続課金注文明細を検索する
  53.                 $qb $this->em->getRepository(Vt4gSubscOrderItem::class)->createQueryBuilder('som');
  54.                 $qb->select()
  55.                     // 親と結合して会員IDで絞り込む
  56.                     ->innerJoin('\Plugin\VeriTrans4G2\Entity\Vt4gSubscOrder''so''WITH''so.order_id = som.order_id')
  57.                     ->where// 会員IDで絞り込み
  58.                             $qb->expr()->eq('so.customer_id'$customerId)
  59.                     )
  60.                     ->andWhere// 継続課金ステータスが継続の注文明細を検
  61.                             $qb->expr()->eq('som.subsc_status'$this->vt4gConst['VTG4_SUBSC_STATUS_SUBSC'])
  62.                     );
  63.                 // カートの商品規格をor条件にセットする
  64.                 $orConditions $qb->expr()->orX();
  65.                 foreach($Carts as $cart) {
  66.                     $productClasses $cart->getItems()->getProductClasses();
  67.                     foreach($productClasses as $productClass) {
  68.                         $orConditions->add(
  69.                             $qb->expr()->eq('som.product_class_id'$productClass->getProductClass()->getId())
  70.                             );
  71.                     }
  72.                 }
  73.                 // or条件のまとまりをand条件でクエリに設定
  74.                 $qb->andWhere($orConditions);
  75.                 $result $qb->getQuery()->setMaxResults(1)->getOneOrNullResult();
  76.                 if (!is_null($result)) {
  77.                     // 一件でもあれば
  78.                     $subscProductDuplicateWarnFlg true;
  79.                 }
  80.             }
  81.         }
  82.         $event->setParameter('subscProductDuplicateWarnFlg'$subscProductDuplicateWarnFlg);
  83.     }
  84. }