app/Customize/EventListener/KarteEventListener.php line 216

Open in your IDE?
  1. <?php
  2. namespace Customize\EventListener;
  3. use Customize\Event\LmEvents;
  4. use Customize\Service\AutoLoadService;
  5. use Customize\Service\Karte\KarteService;
  6. use Eccube\Entity\Customer;
  7. use Eccube\Entity\Order;
  8. use Eccube\Event\EccubeEvents;
  9. use Eccube\Event\EventArgs;
  10. use Eccube\Event\TemplateEvent;
  11. use Customize\Service\CartService;
  12. use Lm\Engine\EC\Entity\GoodsWithRelated;
  13. use Lm\Entity\OrderHeader;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\RequestStack;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  19. use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
  20. use Symfony\Component\HttpKernel\KernelEvents;
  21. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  22. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  23. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  24. use Symfony\Component\Security\Http\Logout\LogoutHandlerInterface;
  25. use Twig\Environment;
  26. class KarteEventListener implements EventSubscriberInterfaceLogoutHandlerInterface
  27. {
  28.     const SESSION_FRONT_SIGNUP 'karte.front.signup';
  29.     const SESSION_FRONT_LOGIN 'karte.front.login';
  30.     const SESSION_FRONT_LOGOUT 'karte.front.logout';
  31.     const SESSION_FRONT_FAVORITE_ADD 'karte.front.favorite.add';
  32.     const SESSION_FRONT_FAVORITE_DELETE 'karte.front.favorite.delete';
  33.     /**
  34.      * @var RequestStack
  35.      */
  36.     private $requestStack;
  37.     /**
  38.      * @var SessionInterface
  39.      */
  40.     private $session;
  41.     /**
  42.      * @var TokenStorageInterface
  43.      */
  44.     private $tokenStorage;
  45.     private $karteService;
  46.     private $cartService;
  47.     /**
  48.      * @var Environment
  49.      */
  50.     private $twig;
  51.     /**
  52.      * @var AutoLoadService
  53.      */
  54.     private $autoLoadService;
  55.     public function __construct(RequestStack          $requestStack,
  56.                                 SessionInterface      $session,
  57.                                 KarteService          $karteService,
  58.                                 CartService           $cartService,
  59.                                 TokenStorageInterface $tokenStorage,
  60.                                 Environment           $twig,
  61.                                 AutoLoadService       $autoLoadService)
  62.     {
  63.         //
  64.         $this->requestStack $requestStack;
  65.         $this->session $session;
  66.         $this->tokenStorage $tokenStorage;
  67.         $this->karteService $karteService;
  68.         $this->cartService $cartService;
  69.         $this->twig $twig;
  70.         $this->autoLoadService $autoLoadService;
  71.     }
  72.     public function onKernelResponse(FilterResponseEvent $event)
  73.     {
  74.         //
  75.         $response $event->getResponse();
  76.         $request $event->getRequest();
  77.         //
  78.         if (!$event->isMasterRequest()) {
  79.             //
  80.             return;
  81.         }
  82.         //
  83.         if ($request->isXmlHttpRequest()) {
  84.             return;
  85.         }
  86.         //
  87.         if ($this->autoLoadService->GetNarikawariSession(false)) {
  88.             return;
  89.         }
  90.         //
  91.         $this->injectIndex($response);
  92.     }
  93.     protected function injectIndex(Response $response)
  94.     {
  95.         //
  96.         $content $response->getContent();
  97.         //
  98.         $content preg_replace_callback("/<head[^>]*?>/", function ($matches) {
  99.             //
  100.             return "{$matches[0]}\n\n{$this->twig->render('Karte/index.twig')}";
  101.         }, $content);
  102.         //
  103.         $response->setContent($content);
  104.     }
  105.     /**
  106.      * @inheritDoc
  107.      */
  108.     public static function getSubscribedEvents()
  109.     {
  110.         return [
  111.             //
  112.             KernelEvents::RESPONSE => 'onKernelResponse',
  113.             //
  114.             'Entry/activate.twig' => 'onEntryActivate',
  115.             'Shopping/index.twig' => 'onEntryActivate',
  116.             'Mypage/index.twig' => 'onEntryActivate',
  117.             'Top/index.twig' => 'onEntryActivate',
  118.             'security.interactive_login' => 'onInteractiveLogin',
  119.             //'Page/sub-category.twig' => 'onProductList',
  120.             'Item/detail.twig' => 'onProductDetail',
  121.             'Mypage/favorite.twig' => 'onFavoriteUpdate',
  122.             'Cart/index.twig' => 'onTrackInformationOfCart'// for event Cart
  123.             'Shopping/complete.twig' => 'onPurchaseCompleted'// for event Purchase
  124.             'Estimate/index.twig' => 'onQuotation'// for event Quotation simulation
  125.             'Mypage/update.twig' => 'onMyPageUpdateInformation'// for event User attribute information
  126.             'Mypage/withdraw_complete.twig' => 'onMyPageUpdateInformation'// for event User attribute information
  127.             'Mitsumori/index.twig' => 'onQuotation'// for event create Quotation
  128.             'Contact/complete.twig' => 'onEntryActivate'// for event email inquiry
  129.             EccubeEvents::FRONT_ENTRY_INDEX_COMPLETE => 'onEccubeFrontEntryIndexComplete',
  130.             LmEvents::FRONT_PRODUCT_FAVORITE_ADD_COMPLETE => 'onLmFrontFavoriteAddComplete',
  131.             LmEvents::FRONT_PRODUCT_FAVORITE_DELETE_COMPLETE => 'onLmFrontFavoriteDeleteComplete',
  132.             LmEvents::SESSION_FRONT_PRODUCT_USER_CART_STEP2_REGISTER_COMPLETED => 'onCartStep2RegisterCompleted',
  133.             LmEvents::SESSION_FRONT_PRODUCT_CART_ADD_PRODUCT => 'onAddProduct',
  134.             LmEvents::SESSION_FRONT_PRODUCT_CART_DELETE_PRODUCT => 'onDeleteProduct',
  135.             LmEvents::SESSION_FRONT_SEND_QUOTATION_BY_EMAIL => 'onSendQuotationByEmail',
  136.             LmEvents::SESSION_FRONT_SEND_QUOTATION_BY_FAX => 'onSendQuotationByFax',
  137.         ];
  138.     }
  139.     public function onEntryActivate(TemplateEvent $event)
  140.     {
  141.         $parameter $event->hasParameter('Karte') ? $event->getParameter('Karte') : [];
  142.         /**
  143.          * @var Customer $customer
  144.          */
  145.         if (($customer $this->tokenStorage->getToken()->getUser())
  146.             && ($customer instanceof Customer)
  147.             && ($lmCustomer $customer->getLmCustomer())) {
  148.             $parameter += [
  149.                 'customer' => $lmCustomer,
  150.             ];
  151.         }
  152.         if ($this->session->remove(self::SESSION_FRONT_SIGNUP)) {
  153.             $event->addSnippet('Karte/signup.twig');
  154.             if ($lmCustomer) {
  155.                 $event->addSnippet('Karte/identify.twig');
  156.             }
  157.         }
  158.         if ($this->session->remove(self::SESSION_FRONT_LOGIN)) {
  159.             $parameter += [
  160.                 'login' => [
  161.                     'status' => true,
  162.                 ],
  163.             ];
  164.             $event->addSnippet('Karte/login.twig');
  165.             if ($lmCustomer) {
  166.                 $event->addSnippet('Karte/identify.twig');
  167.             }
  168.         }
  169.         if ($this->session->remove(self::SESSION_FRONT_LOGOUT)) {
  170.             $parameter += [
  171.                 'login' => [
  172.                     'status' => false,
  173.                 ],
  174.             ];
  175.             $event->addSnippet('Karte/login.twig');
  176.         }
  177.         if ($this->session->remove(LmEvents::SESSION_FRONT_PRODUCT_USER_CART_STEP2_REGISTER_COMPLETED)) {
  178.             $cart $this->cartService->getCart();
  179.             if (!empty($cart)) {
  180.                 $customer $cart->getCustomer();
  181.                 $parameter += $this->karteService->getAttributeForPersonalInfomation($customer);
  182.                 $event->addSnippet('Karte/attribute.twig');
  183.             }
  184.         }
  185.         if ($email $this->session->remove(LmEvents::SESSION_FRONT_MYPAGE_EMAIL_INQUIRY)) {
  186.             $parameter += [
  187.                 'email_inquiry' => [
  188.                     'email' => $email
  189.                 ]
  190.             ];
  191.             $event->addSnippet('Karte/email_inquiry.twig');
  192.         }
  193.         if (!empty($parameter)) {
  194.             $event->setParameter('Karte'$parameter);
  195.         }
  196.     }
  197.     public function onEccubeFrontEntryIndexComplete(EventArgs $event)
  198.     {
  199.         $this->session->set(self::SESSION_FRONT_SIGNUPtrue);
  200.     }
  201.     public function onInteractiveLogin(InteractiveLoginEvent $event)
  202.     {
  203.         $this->session->set(self::SESSION_FRONT_LOGINtrue);
  204.         $this->session->set(LmEvents::SESSION_FRONT_PRODUCT_CART_STEP2_LOGIN_COMPLETEDtrue);
  205.     }
  206.     /**
  207.      * @inheritDoc
  208.      */
  209.     public function logout(Request $requestResponse $responseTokenInterface $token)
  210.     {
  211.         //
  212.         $this->session->set(self::SESSION_FRONT_LOGOUTtrue);
  213.     }
  214.     public function onProductList(TemplateEvent $event)
  215.     {
  216.         //
  217.         $karte $event->hasParameter('Karte') ? $event->getParameter('Karte') : [];
  218.         //
  219.         if ($request $this->requestStack->getCurrentRequest()) {
  220.             //
  221.             $karte['list_url'] = $request->getPathInfo();
  222.         }
  223.         //
  224.         if (!empty($karte)) {
  225.             //
  226.             $event->setParameter('Karte'$karte);
  227.         }
  228.         //
  229.         $event->addSnippet('Karte/view_list.twig');
  230.     }
  231.     public function onProductDetail(TemplateEvent $event)
  232.     {
  233.         //
  234.         $karte $event->hasParameter('Karte') ? $event->getParameter('Karte') : [];
  235.         //
  236.         if ($request $this->requestStack->getCurrentRequest()) {
  237.             //
  238.             $karte['item_url'] = $request->getPathInfo();
  239.         }
  240.         //
  241.         if (!empty($karte)) {
  242.             //
  243.             $event->setParameter('Karte'$karte);
  244.         }
  245.         //
  246.         $event->addSnippet('Karte/view_item.twig');
  247.     }
  248.     public function onFavoriteUpdate(TemplateEvent $event)
  249.     {
  250.         //
  251.         $karte $event->hasParameter('Karte') ? $event->getParameter('Karte') : [];
  252.         //
  253.         if (!isset($karte['favorite'])) {
  254.             //
  255.             $karte['favorite'] = [];
  256.         }
  257.         //
  258.         if ($goodsList $event->getParameter('data')) {
  259.             //
  260.             $karte['favorite']['items'] = array_map(function ($goods) {
  261.                 //
  262.                 if ($_goods = new GoodsWithRelated($goods['goods_id'])) {
  263.                     //
  264.                     return [
  265.                         'item_id' => $_goods->getGoodsId(),
  266.                         'name' => $_goods->getGoodsName(),
  267.                         'item_url' => "/item/{$_goods->getItemId()}.html"// TODO:
  268.                         "l_category_name" => $_goods->getMainCategory()->getMainCategoryName(),
  269.                         "s_category_name" => $_goods->getMainCategory()->getCategoryName(),
  270.                         "l_category_cd" => $_goods->getMainCategory()->getMainCategoryWebname(),
  271.                         "s_category_cd" => $_goods->getMainCategory()->getCategoryWebname(),
  272.                     ];
  273.                 }
  274.             }, $goodsList);
  275.             //
  276.             $karte['favorite']['status'] = !empty($karte['favorite']['items']);
  277.             $karte['favorite']['quantity'] = count($karte['favorite']['items']);
  278.         }
  279.         //
  280.         if ($added $this->session->remove(self::SESSION_FRONT_FAVORITE_ADD)) {
  281.             //
  282.             $karte['favorite']['added_item_id'] = $added['goods_id'];
  283.         }
  284.         //
  285.         if ($deleted $this->session->remove(self::SESSION_FRONT_FAVORITE_DELETE)) {
  286.             //
  287.             $karte['favorite']['deleted_item_id'] = $deleted['goods_id'];
  288.         }
  289.         //
  290.         if (!empty($karte)) {
  291.             //
  292.             $event->setParameter('Karte'$karte);
  293.         }
  294.         //
  295.         $event->addSnippet('Karte/favorite.twig');
  296.     }
  297.     public function onLmFrontFavoriteAddComplete(EventArgs $event)
  298.     {
  299.         $this->session->set(self::SESSION_FRONT_FAVORITE_ADD$event->getArguments());
  300.     }
  301.     public function onLmFrontFavoriteDeleteComplete(EventArgs $event)
  302.     {
  303.         $this->session->set(self::SESSION_FRONT_FAVORITE_DELETE$event->getArguments());
  304.     }
  305.     public function onAddProduct(EventArgs $event)
  306.     {
  307.         $this->session->set(LmEvents::SESSION_FRONT_PRODUCT_CART_ADD_PRODUCT$event->getArguments());
  308.     }
  309.     public function onDeleteProduct(EventArgs $event)
  310.     {
  311.         $this->session->set(LmEvents::SESSION_FRONT_PRODUCT_CART_DELETE_PRODUCT$event->getArguments());
  312.     }
  313.     public function onSendQuotationByEmail(EventArgs $event)
  314.     {
  315.         $this->session->set(LmEvents::SESSION_FRONT_SEND_QUOTATION_BY_EMAIL$event->getArguments());
  316.     }
  317.     public function onSendQuotationByFax(EventArgs $event)
  318.     {
  319.         $this->session->set(LmEvents::SESSION_FRONT_SEND_QUOTATION_BY_FAX$event->getArguments());
  320.     }
  321.     public function onTrackInformationOfCart(TemplateEvent $event)
  322.     {
  323.         $karte $event->hasParameter('Karte') ? $event->getParameter('Karte') : [];
  324.         $cart $this->cartService->getCart();
  325.         if ($this->session->remove(LmEvents::SESSION_FRONT_QUOTATION_SIMULATION)) {
  326.             if (!empty($cart)) {
  327.                 $karte['quotation_simulation'] = $this->karteService->getAttributesForCart($cart);
  328.                 $event->addSnippet('Karte/quotation_simulation.twig');
  329.             }
  330.         }
  331.         if ($this->session->remove(LmEvents::SESSION_FRONT_PRODUCT_CART)) {
  332.             if (!empty($cart)) {
  333.                 $data $this->karteService->getAttributesForCart($cart);
  334.                 if (!empty($data)) {
  335.                     $karte['cart'] = $data;
  336.                     $event->addSnippet('Karte/cart.twig');
  337.                 }
  338.             }
  339.         }
  340.         if (!empty($karte)) {
  341.             $event->setParameter('Karte'$karte);
  342.         }
  343.     }
  344.     public function onQuotation(TemplateEvent $event) {
  345.         $karte $event->hasParameter('Karte') ? $event->getParameter('Karte') : [];
  346.         if ($this->session->remove(LmEvents::SESSION_FRONT_QUOTATION_CREATE)) {
  347.             $cart $this->cartService->getCart();
  348.             if (!empty($cart)) {
  349.                 $karte['quotation_create'] = $this->karteService->getAttributesForCart($cart);
  350.                 $event->addSnippet('Karte/quotation_create.twig');
  351.             }
  352.         }
  353.         if ($dataQuotationSendByEmail $this->session->remove(LmEvents::SESSION_FRONT_SEND_QUOTATION_BY_EMAIL)) {
  354.             if (!empty($dataQuotationSendByEmail)) {
  355.                 $karte['quotation_by_email'] = $dataQuotationSendByEmail;
  356.                 $event->addSnippet('Karte/quotation_by_email.twig');
  357.             }
  358.         }
  359.         if ($dataQuotationSendByFax $this->session->remove(LmEvents::SESSION_FRONT_SEND_QUOTATION_BY_FAX)) {
  360.             if (!empty($dataQuotationSendByFax)) {
  361.                 $karte['quotation_by_fax'] = $dataQuotationSendByFax;
  362.                 $event->addSnippet('Karte/quotation_by_fax.twig');
  363.             }
  364.         }
  365.         if (!empty($karte)) {
  366.             $event->setParameter('Karte'$karte);
  367.         }
  368.     }
  369.     public function onPurchaseCompleted(TemplateEvent $event)
  370.     {
  371.         /**
  372.          * @var Order $order
  373.          * @var OrderHeader $orderHeader
  374.          */
  375.         $karte $event->hasParameter('Karte') ? $event->getParameter('Karte') : [];
  376.         if (!isset($karte['cart'])) {
  377.             $karte['cart'] = [];
  378.         }
  379.         // get variable from view purchase completed
  380.         $dataLayer $event->getParameter('dataLayer');
  381.         //
  382.         if (!($orderHeader $event->getParameter('orderHeader'))) {
  383.             return;
  384.         } else if ($orderHeader->getOhType() === OrderHeader::TYPE_SAMPLE || $orderHeader->getOhType() === OrderHeader::TYPE_CATALOG) {
  385.             return;
  386.         }
  387.         //
  388.         if (!($Order $event->getParameter('Order'))) {
  389.             return;
  390.         }
  391.         //
  392.         if (empty($dataLayer[1])) {
  393.             return;
  394.         }
  395.         $order $event->getParameter('Order');
  396.         $customer $order->getCustomer();
  397.         $karte['buy'] = $this->karteService->getAttributesForPurchase($event$dataLayer);
  398.         $karte['buy_stats'] = $this->karteService->getAttributesForUserPurchaseInfomation($customer);
  399.         $event->addSnippet('Karte/buy_stats.twig');
  400.         $event->addSnippet('Karte/buy.twig');
  401.         if (!empty($karte)) {
  402.             $event->setParameter('Karte'$karte);
  403.         }
  404.     }
  405.     public function onCartStep2RegisterCompleted(EventArgs $event)
  406.     {
  407.         $this->session->set(LmEvents::SESSION_FRONT_PRODUCT_USER_CART_STEP2_REGISTER_COMPLETED$event->getArguments());
  408.     }
  409.     public function onMyPageUpdateInformation(TemplateEvent $event)
  410.     {
  411.         $parameter $event->hasParameter('Karte') ? $event->getParameter('Karte') : [];
  412.         if (in_array(true, [$this->session->remove(LmEvents::SESSION_FRONT_PRODUCT_CART_STEP2_LOGIN_COMPLETED), $this->session->remove(LmEvents::SESSION_FRONT_MYPAGE_USER_UPDATE_INFOMATION)])) {
  413.             /**
  414.              * @var Customer $customer
  415.              */
  416.             $customer $this->tokenStorage->getToken()->getUser();
  417.             $parameter $this->karteService->getAttributeForPersonalInfomation($customernull);
  418.         }
  419.         if ($dataUserUnsubscribe $this->session->remove(LmEvents::SESSION_FRONT_MYPAGE_USER_UNSUBSCRIBE)) {
  420.             $customer $dataUserUnsubscribe['customer'];
  421.             $unsubscribeDate $dataUserUnsubscribe['unsubscribeDate'];
  422.             $parameter $this->karteService->getAttributeForPersonalInfomation($customer$unsubscribeDate);
  423.         }
  424.         if (!empty($parameter)) {
  425.             $event->addSnippet('Karte/attribute.twig');
  426.             $event->setParameter('Karte'$parameter);
  427.         }
  428.     }
  429. }