app/Plugin/ApexSignboard/Event.php line 94

Open in your IDE?
  1. <?php
  2. namespace Plugin\ApexSignboard;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Eccube\Entity\Order;
  5. use Eccube\Event\TemplateEvent;
  6. use Plugin\ApexSignboard\Entity\OrderItemTrait;
  7. use Plugin\ApexSignboard\Repository\Master\MtbSignboardTypeRepository;
  8. use Plugin\ApexSignboard\Service\SignboardService;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\Form\FormFactoryInterface;
  11. use Symfony\Component\HttpFoundation\RedirectResponse;
  12. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  13. use Symfony\Component\HttpKernel\KernelEvents;
  14. use Symfony\Component\Routing\RouterInterface;
  15. class Event implements EventSubscriberInterface
  16. {
  17.     public function __construct(
  18.         EntityManagerInterface $entityManager,
  19.         FormFactoryInterface $formFactory,
  20.         MtbSignboardTypeRepository $mtbSignboardTypeRepository,
  21.         SignboardService $signboardService,
  22.         RouterInterface $router
  23.     ) {
  24.         $this->entityManager $entityManager;
  25.         $this->formFactory $formFactory;
  26.         $this->mtbSignboardTypeRepository $mtbSignboardTypeRepository;
  27.         $this->signboardService $signboardService;
  28.         $this->router $router;
  29.     }
  30.     
  31.     /**
  32.      * @return array
  33.      */
  34.     public static function getSubscribedEvents()
  35.     {
  36.         return [
  37. //            KernelEvents::RESPONSE => 'onResponse',
  38. //            'Shopping/index.twig' => 'shopping',
  39. //            'Shopping/confirm.twig' => 'shopping',
  40. //            'Mypage/history.twig' => 'onRenderMypageHistory',
  41.             '@admin/Order/edit.twig' => 'onRenderAdminOrderEdit',
  42.         ];
  43.     }
  44.     /**
  45.      * @param TemplateEvent $event
  46.      */
  47.     public function shopping(TemplateEvent $event)
  48.     {
  49.         $parameters $event->getParameters();
  50.         /** @var Order $Order */
  51.         $Order $parameters['Order'];
  52.         $Signboards $this->signboardService->getSignboards($Order);
  53.         $carrying_date_max $this->signboardService->getCarryingDateMax($Order);
  54.         foreach ($Signboards as $Signboard){
  55.             if($Signboard->getId() == null){
  56.                 // 立て札情報がなければ登録画面にリダイレクト
  57.                 $this->redirect_url $this->router->generate('apex_signboard_shopping');
  58.                 return;
  59.             }
  60.             if(!is_null($carrying_date_max) && !is_null($Signboard->getCarryingDate()) && $Signboard->getCarryingDate() > $carrying_date_max){
  61.                 // オリジナルボードの持ち込み日が配達日の2日前よりも後の場合は入力画面にリダイレクト
  62.                 $this->redirect_url $this->router->generate('apex_signboard_shopping');
  63.                 return;
  64.             }
  65.         }
  66.         $parameters['Signboards'] = $Signboards;
  67.         $event->setParameters($parameters);
  68.         $event->addSnippet('@ApexSignboard/default/shopping.twig');
  69.     }
  70.     public function onResponse(ResponseEvent $event)
  71.     {
  72.         // $this->redirect_url が設定されている場合はリダイレクトする
  73.         if(isset($this->redirect_url)){
  74.             $response = new RedirectResponse($this->redirect_url);
  75.             $event->setResponse($response);
  76.         }
  77.     }
  78.     /**
  79.      * [order/{id}/edit]表示の時のEvent Fork.
  80.      *
  81.      * @param TemplateEvent $event
  82.      */
  83.     public function onRenderAdminOrderEdit(TemplateEvent $event)
  84.     {
  85.         $parameters $event->getParameters();
  86.         if (is_null($parameters['Order'])) {
  87.             return;
  88.         }
  89.         /** @var Order $Order */
  90.         $Order $parameters['Order'];
  91.         $Signboards = [];
  92.         /* @var OrderItemTrait $orderDetail  */
  93.         foreach ($Order->getProductOrderItems() as $orderDetail) {
  94.             // 商品ごと・個数ごとに立て札のデータを取得
  95.             for($i=0$i<$orderDetail->getQuantity(); $i++){
  96.                 // 立て札情報を取得
  97.                 $Signboards[] = $orderDetail->getSignboards()->get($i);
  98.             }
  99.         }
  100.         $parameters['Signboards'] = $Signboards;
  101.         $event->setParameters($parameters);
  102.         // add twig
  103.         $event->addSnippet('@ApexSignboard/admin/order_edit_signboard.twig');
  104.     }
  105. }