app/Customize/EventListener/MailMagazineEventListener.php line 54

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.ec-cube.co.jp/
  8.  *
  9.  * For the full copyright and license information, please view the LICENSE
  10.  * file that was distributed with this source code.
  11.  */
  12. namespace Customize\EventListener;
  13. use Customize\Service\MailMagazineService;
  14. use Eccube\Event\EventArgs;
  15. use Eccube\Request\Context;
  16. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  17. use Symfony\Component\HttpFoundation\Cookie;
  18. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  19. use Symfony\Component\HttpKernel\KernelEvents;
  20. use Customize\Event\LmEvents;
  21. /**
  22.  * @inheritDoc
  23.  */
  24. class MailMagazineEventListener implements EventSubscriberInterface
  25. {
  26.     /**
  27.      * @var Context
  28.      */
  29.     private $requestContext;
  30.     /**
  31.      * @var MailMagazineService
  32.      */
  33.     private $mailMagazineService;
  34.     /**
  35.      * @inheritDoc
  36.      */
  37.     public function __construct(
  38.         Context $context,
  39.         MailMagazineService $mailMagazineService
  40.     ) {
  41.         $this->requestContext $context;
  42.         $this->mailMagazineService $mailMagazineService;
  43.     }
  44.     public function onKernelRequest(ResponseEvent $event)
  45.     {
  46.         if ($event->isMasterRequest()) {
  47.             if ($this->requestContext->isFront()) {
  48.                 if ($hashKey $this->mailMagazineService->retrieveHashKey($event->getRequest())) {
  49.                     // メールマガジンが開封されたイベントを発火
  50.                     $this->mailMagazineService->fireOpenedIfSo($event->getRequest(), $hashKey);
  51.                     // メールマガジンのリンクがクリックされたイベントを発火
  52.                     $this->mailMagazineService->fireClickedIfSo($event->getRequest(), $hashKey);
  53.                     //
  54.                     $cookie = new Cookie(MailMagazineService::COOKIE_NAME$hashKeytime() + MailMagazineService::COOKIE_EXPIRESMailMagazineService::COOKIE_PATH);
  55.                     $response $event->getResponse();
  56.                     $response->headers->setCookie($cookie);
  57.                     $event->setResponse($response);
  58.                 }
  59.             }
  60.         }
  61.     }
  62.     /**
  63.      * メールマガジンのリンクが開封されたイベント
  64.      *
  65.      * @param EventArgs $event
  66.      * @return void
  67.      */
  68.     public function onMailMagazineOpened(EventArgs $event)
  69.     {
  70.         if ($event->hasArgument('md_hash_key') && $hashKey $event->getArgument('md_hash_key')) {
  71.             //
  72.             $this->mailMagazineService->saveMailMagazineAsOpened($hashKey);
  73.         }
  74.     }
  75.     /**
  76.      * メールマガジンのリンクがクリックされたイベント
  77.      *
  78.      * @param EventArgs $event
  79.      * @return void
  80.      */
  81.     public function onMailMagazineClicked(EventArgs $event)
  82.     {
  83.         if ($event->hasArgument('md_hash_key') && $hashKey $event->getArgument('md_hash_key')) {
  84.             //
  85.             $this->mailMagazineService->saveMailMagazineAsClicked($hashKey);
  86.         }
  87.     }
  88.     /**
  89.      * メールマガジンの購読が中止されたイベント
  90.      *
  91.      * @param EventArgs $event
  92.      * @return void
  93.      */
  94.     public function onMailMagazineAborted(EventArgs $event)
  95.     {
  96.         if ($event->hasArgument('md_hash_key') && $hashKey $event->getArgument('md_hash_key')) {
  97.             //
  98.             $this->mailMagazineService->saveMailMagazineAsAborted($hashKey);
  99.         }
  100.     }
  101.     /**
  102.      * メールマガジンのリンクがコンバージョンされたイベント
  103.      *
  104.      * @param EventArgs $event
  105.      * @return void
  106.      */
  107.     public function onMailMagazineConverted(EventArgs $event)
  108.     {
  109.         if ($event->hasArgument('md_hash_key') && $hashKey $event->getArgument('md_hash_key')) {
  110.             //
  111.             $this->mailMagazineService->saveMailMagazineAsConverted($hashKey);
  112.         }
  113.     }
  114.     /**
  115.      * @inheritDoc
  116.      */
  117.     public static function getSubscribedEvents()
  118.     {
  119.         return [
  120.             KernelEvents::RESPONSE => [
  121.                 // SecurityServiceProviderで、認証処理が完了した後に実行.
  122.                 ['onKernelRequest'6],
  123.             ],
  124.             LmEvents::MAIL_MAGAZINE_OPENED => 'onMailMagazineOpened',
  125.             LmEvents::MAIL_MAGAZINE_CLICKED => 'onMailMagazineClicked',
  126.             LmEvents::MAIL_MAGAZINE_ABORTED => 'onMailMagazineAborted',
  127.             LmEvents::MAIL_MAGAZINE_CONVERTED => 'onMailMagazineConverted',
  128.         ];
  129.     }
  130. }