app/Plugin/DisableNonMember42/Event.php line 74

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of DisableNonMember42
  4.  * Copyright(c) U-Mebius Inc. All Rights Reserved.
  5.  * https://umebius.com/
  6.  * For the full copyright and license information, please view the LICENSE
  7.  * file that was distributed with this source code.
  8.  */
  9. namespace Plugin\DisableNonMember42;
  10. use Eccube\Controller\NonMemberShoppingController;
  11. use Eccube\Event\EccubeEvents;
  12. use Eccube\Event\EventArgs;
  13. use Eccube\Event\TemplateEvent;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. use Symfony\Component\HttpFoundation\RedirectResponse;
  16. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  17. use Symfony\Component\HttpKernel\KernelEvents;
  18. use Symfony\Component\Routing\RouterInterface;
  19. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  20. class Event implements EventSubscriberInterface
  21. {
  22.     /**
  23.      * @var AuthorizationCheckerInterface
  24.      */
  25.     protected $authorizationChecker;
  26.     /**
  27.      * @var RouterInterface
  28.      */
  29.     private $router;
  30.     public function __construct(
  31.         AuthorizationCheckerInterface $authorizationChecker,
  32.         RouterInterface $router
  33.     ) {
  34.         $this->authorizationChecker $authorizationChecker;
  35.         $this->router $router;
  36.     }
  37.     /**
  38.      * @return array
  39.      */
  40.     public static function getSubscribedEvents()
  41.     {
  42.         return [
  43.             KernelEvents::CONTROLLER => 'onKernelController',
  44.             EccubeEvents::FRONT_CART_BUYSTEP_COMPLETE => 'onFrontCartBuystepComplete',
  45.             'Shopping/login.twig' => 'onShoppingLoginTwigRender',
  46.         ];
  47.     }
  48.     public function onKernelController(ControllerEvent $event)
  49.     {
  50.         $controllers $event->getController();
  51.         if (!is_array($controllers)) {
  52.             return;
  53.         }
  54.         foreach ($controllers as $controller) {
  55.             if ($controller instanceof NonMemberShoppingController) {
  56.                 $event->setController(function () {
  57.                     return new RedirectResponse($this->router->generate('entry'));
  58.                 });
  59.                 break;
  60.             }
  61.         }
  62.     }
  63.     public function onFrontCartBuystepComplete(EventArgs $eventArgs)
  64.     {
  65.         // IS_AUTHENTICATED_REMEMBEREDの場合はShoppingControllerからリダイレクトされてくるのでROLE_USERにしておく
  66.         if (!$this->authorizationChecker->isGranted('ROLE_USER')) {
  67.             $response = new RedirectResponse($this->router->generate('shopping_login'));
  68.             $eventArgs->setResponse($response);
  69.         }
  70.     }
  71.     public function onShoppingLoginTwigRender(TemplateEvent $event)
  72.     {
  73.         $event->addAsset('@DisableNonMember42/shopping_login_css.twig');
  74.         $event->addSnippet('@DisableNonMember42/shopping_login.twig');
  75.     }
  76. }