app/Plugin/ScheduleDx/EventSubscriber/AdminProductEventSubscriber.php line 91

Open in your IDE?
  1. <?php
  2. /**
  3.  * Copyright(c) 2018 SYSTEM_KD
  4.  * Date: 2018/09/30
  5.  */
  6. namespace Plugin\ScheduleDx\EventSubscriber;
  7. use Eccube\Entity\Product;
  8. use Eccube\Event\EccubeEvents;
  9. use Eccube\Event\EventArgs;
  10. use Eccube\Event\TemplateEvent;
  11. use Plugin\ScheduleDx\Service\ScheduleService;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\Form\FormBuilderInterface;
  14. /**
  15.  * [管理]商品
  16.  *
  17.  * Class AdminProductEventSubscriber
  18.  * @package Plugin\ScheduleDx\EventSubscriber
  19.  */
  20. class AdminProductEventSubscriber implements EventSubscriberInterface
  21. {
  22.     protected $scheduleService;
  23.     public function __construct(
  24.         ScheduleService $scheduleService
  25.     )
  26.     {
  27.         $this->scheduleService $scheduleService;
  28.     }
  29.     /**
  30.      * 商品更新完了
  31.      *
  32.      * @param EventArgs $event
  33.      */
  34.     public function onAdminProductEditComplete(EventArgs $event)
  35.     {
  36.         // 商品登録完了時処理
  37.         $Product $event->getArgument('Product');
  38.         /** @var FormBuilderInterface $form */
  39.         $form $event->getArgument('form');
  40.         $ScheduleTime $form->get('schedule_time')->getData();
  41.         $this->scheduleService->updateScheduleTime($Product$ScheduleTime);
  42.     }
  43.     /**
  44.      * 商品コピー完了
  45.      *
  46.      * @param EventArgs $event
  47.      */
  48.     public function onAdminProductCopyComplete(EventArgs $event)
  49.     {
  50.         // 商品コピー完了時
  51.         /** @var Product $Product */
  52.         $Product $event->getArgument('CopyProduct');
  53.         $scheduleTime $Product->getScheduleTime();
  54.         if (empty($scheduleTime->getId())) {
  55.             return;
  56.         }
  57.         // 公開日時が設定されている場合
  58.         $newScheduleTime $scheduleTime->copy();
  59.         $this->scheduleService->linkScheduleTime($Product$newScheduleTime);
  60.     }
  61.     /**
  62.      * 商品一覧
  63.      *
  64.      * @param TemplateEvent $event
  65.      */
  66.     public function onTemplateProductIndex(TemplateEvent $event)
  67.     {
  68.         $event->addSnippet('@ScheduleDx/admin/Product/index_add.twig');
  69.     }
  70.     /**
  71.      * 商品登録
  72.      *
  73.      * @param TemplateEvent $event
  74.      */
  75.     public function onTemplateProductProduct(TemplateEvent $event)
  76.     {
  77.         // 表示情報追加
  78.         $event->addSnippet('@ScheduleDx/admin/Product/product_ex.twig');
  79.         $id $event->getParameter('id');
  80.         $scheduleFromMsg trans('schedule.time_empty');
  81.         $scheduleToMsg trans('schedule.time_empty');
  82.         $scheduleType "";
  83.         if (!is_null($id)) {
  84.             // 商品が登録状態の場合
  85.             /** @var Product $product */
  86.             $product $event->getParameter('Product');
  87.             $scheduleMsg $this->scheduleService->getActiveScheduleTimeToString($product);
  88.             $scheduleFromMsg $scheduleMsg['scheduleFromMsg'];
  89.             $scheduleToMsg $scheduleMsg['scheduleToMsg'];
  90.             $ScheduleTime $product->getScheduleTime();
  91.             if ($ScheduleTime) {
  92.                 $scheduleType $ScheduleTime->getScheduleType();
  93.             }
  94.         }
  95.         $event->setParameter('scheduleType'$scheduleType);
  96.         $event->setParameter('scheduleFromMsg'$scheduleFromMsg);
  97.         $event->setParameter('scheduleToMsg'$scheduleToMsg);
  98.     }
  99.     /**
  100.      * Returns an array of event names this subscriber wants to listen to.
  101.      *
  102.      * The array keys are event names and the value can be:
  103.      *
  104.      *  * The method name to call (priority defaults to 0)
  105.      *  * An array composed of the method name to call and the priority
  106.      *  * An array of arrays composed of the method names to call and respective
  107.      *    priorities, or 0 if unset
  108.      *
  109.      * For instance:
  110.      *
  111.      *  * array('eventName' => 'methodName')
  112.      *  * array('eventName' => array('methodName', $priority))
  113.      *  * array('eventName' => array(array('methodName1', $priority), array('methodName2')))
  114.      *
  115.      * @return array The event names to listen to
  116.      */
  117.     public static function getSubscribedEvents()
  118.     {
  119.         return [
  120.             // 商品登録完了
  121.             EccubeEvents::ADMIN_PRODUCT_EDIT_COMPLETE => ['onAdminProductEditComplete'],
  122.             // 商品コピー完了
  123.             EccubeEvents::ADMIN_PRODUCT_COPY_COMPLETE => ['onAdminProductCopyComplete'],
  124.             // 商品一覧
  125.             '@admin/Product/index.twig' => ['onTemplateProductIndex'],
  126.             // 商品詳細
  127.             '@admin/Product/product.twig' => ['onTemplateProductProduct'],
  128.         ];
  129.     }
  130. }