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

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