app/Plugin/KokokaraSelect/EventSubscriber/AdminProductEventSubscriber.php line 95

Open in your IDE?
  1. <?php
  2. /**
  3.  * Copyright(c) 2020 SYSTEM_KD
  4.  * Date: 2020/05/10
  5.  */
  6. namespace Plugin\KokokaraSelect\EventSubscriber;
  7. use Eccube\Entity\Product;
  8. use Eccube\Event\TemplateEvent;
  9. use Plugin\KokokaraSelect\Service\KsOrderService;
  10. use Plugin\KokokaraSelect\Service\KsSelectItemService;
  11. use Plugin\KokokaraSelect\Service\KsService;
  12. use Plugin\KokokaraSelect\Service\TwigRenderService\EventSubscriber\TwigRenderTrait;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. class AdminProductEventSubscriber implements EventSubscriberInterface
  15. {
  16.     use TwigRenderTrait;
  17.     /** @var KsSelectItemService */
  18.     protected $ksSelectItemService;
  19.     /** @var KsService */
  20.     protected $ksService;
  21.     /** @var KsOrderService */
  22.     protected $ksOrderService;
  23.     public function __construct(
  24.         KsSelectItemService $ksSelectItemService,
  25.         KsService $ksService,
  26.         KsOrderService $ksOrderService
  27.     )
  28.     {
  29.         $this->ksSelectItemService $ksSelectItemService;
  30.         $this->ksService $ksService;
  31.         $this->ksOrderService $ksOrderService;
  32.     }
  33.     /**
  34.      * 商品編集テンプレート
  35.      *
  36.      * @param TemplateEvent $event
  37.      * @throws \Doctrine\ORM\NonUniqueResultException
  38.      */
  39.     public function onTemplateProductProduct(TemplateEvent $event)
  40.     {
  41.         $this->initRenderService($event);
  42.         // エリア追加
  43.         $this->createInsertBuilder()
  44.             ->find('.c-primaryCol > div')
  45.             ->eq(0)
  46.             ->setTargetId('kokokara_select_block')
  47.             ->setInsertModeAfter();
  48.         /** @var Product $product */
  49.         $product $event->getParameter('Product');
  50.         // 構成要素判定
  51.         $ksSelectItemSetting false;
  52.         if ($product) {
  53.             // 規格が設定された商品は、選択商品設定を表示しない
  54.             if ($product->hasProductClass()) {
  55.                 return;
  56.             }
  57.             $ksSelectItemSetting $this->ksSelectItemService->isSetting($product);
  58.         }
  59.         $event->setParameter('KsSelectItemSetting'$ksSelectItemSetting);
  60.         // 販売済み判定
  61.         if (!$this->ksService->isKsProduct($product)
  62.             && $this->ksOrderService->isBuyIngProduct($product)) {
  63.             $ksSelectItemBuyIng true;
  64.         } else {
  65.             $ksSelectItemBuyIng false;
  66.         }
  67.         $event->setParameter('KsSelectItemBuyIng'$ksSelectItemBuyIng);
  68.         $this->addTwigRenderSnippet(
  69.             '@KokokaraSelect/admin/Product/edit/kokokara_select_area.twig'
  70.         );
  71.     }
  72.     /**
  73.      * 商品一覧テンプレート
  74.      *
  75.      * @param TemplateEvent $event
  76.      */
  77.     public function onTemplateProductIndex(TemplateEvent $event)
  78.     {
  79.         $this->initRenderService($event);
  80.         // 選択商品対象表示
  81.         $child $this->twigRenderService
  82.             ->eachChildBuilder()
  83.             ->findAndDataKey('#ex-product-''kokokara_select_product_id')
  84.             ->find('td')
  85.             ->eq(3)
  86.             ->targetFindThis()
  87.             ->setInsertModeAppend();
  88.         $this->twigRenderService
  89.             ->eachBuilder()
  90.             ->find('.kokokara_select_info')
  91.             ->each($child->build());
  92.         $this->twigRenderService->addSupportSnippet(
  93.             '@KokokaraSelect/admin/Product/index/kokokara_select_info.twig',
  94.             nulltrue
  95.         );
  96.     }
  97.     /**
  98.      * @return array
  99.      */
  100.     public static function getSubscribedEvents()
  101.     {
  102.         return [
  103.             // 商品登録
  104.             '@admin/Product/product.twig' => ['onTemplateProductProduct'],
  105.             // 商品一覧
  106.           '@admin/Product/index.twig' => ['onTemplateProductIndex'10],
  107.         ];
  108.     }
  109. }