app/Plugin/CustomerClassOnlyPage4/EventSubscriber/Front/UserDataSubscriber.php line 30

Open in your IDE?
  1. <?php
  2. namespace Plugin\CustomerClassOnlyPage4\EventSubscriber\Front;
  3. use Eccube\Entity\Page;
  4. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  5. use Symfony\Component\HttpKernel\KernelEvents;
  6. class UserDataSubscriber extends AbstractSubscriber
  7. {
  8.     /**
  9.      * @inheritDoc
  10.      */
  11.     public static function getSubscribedEvents()
  12.     {
  13.         // TODO: Implement getSubscribedEvents() method.
  14.         return [
  15.             KernelEvents::REQUEST => 'onKernelRequest'
  16.         ];
  17.     }
  18.     /**
  19.      * ユーザーページで特定会員チェック
  20.      *
  21.      * @param GetResponseEvent $event
  22.      */
  23.     public function onKernelRequest(GetResponseEvent $event)
  24.     {
  25.         // ユーザーページじゃなかったらスルー
  26.         if (!$this->context->isRoute("user_data")) {
  27.             return;
  28.         }
  29.         $Page $this->pageRepository->findOneBy([
  30.             'url' => $event->getRequest()->get('route'),
  31.             'edit_type' => Page::EDIT_TYPE_USER,
  32.         ]);
  33.         // 特定会員限定ページとして登録されているか探す
  34.         $PageCustomerClass $this->pageCustomerClassRepository->findOneBy([
  35.             'Page' => $Page,
  36.         ]);
  37.         // 特定会員限定ページとして登録されていなかったら表示
  38.         if (is_null($PageCustomerClass)) {
  39.             return;
  40.         }
  41.         if ($this->authorizationChecker->isGranted('ROLE_USER')) {
  42.             // 特定会員として登録されているか探す
  43.             $CustomerCustomerClass $this->customerCustomerClassRepository->findOneBy([
  44.                 'Customer' => $this->context->getCurrentUser(),
  45.             ]);
  46.             if ($CustomerCustomerClass) {
  47.                 // 特定会員限定ページと紐付いている会員かどうか探す
  48.                 $PageCustomerClass $this->pageCustomerClassRepository->findOneBy([
  49.                     'Page' => $Page,
  50.                     'CustomerClass' => $CustomerCustomerClass->getCustomerClass(),
  51.                 ]);
  52.                 // 特定会員限定ページと紐付いている会員だったら表示
  53.                 if ($PageCustomerClass) {
  54.                     return;
  55.                 }
  56.             }
  57.         }
  58.         $this->redirectToErrorPage($event);
  59.     }
  60. }