<?php
namespace Plugin\CustomerClassOnlyPage4\EventSubscriber\Front;
use Eccube\Entity\Page;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class UserDataSubscriber extends AbstractSubscriber
{
/**
* @inheritDoc
*/
public static function getSubscribedEvents()
{
// TODO: Implement getSubscribedEvents() method.
return [
KernelEvents::REQUEST => 'onKernelRequest'
];
}
/**
* ユーザーページで特定会員チェック
*
* @param GetResponseEvent $event
*/
public function onKernelRequest(GetResponseEvent $event)
{
// ユーザーページじゃなかったらスルー
if (!$this->context->isRoute("user_data")) {
return;
}
$Page = $this->pageRepository->findOneBy([
'url' => $event->getRequest()->get('route'),
'edit_type' => Page::EDIT_TYPE_USER,
]);
// 特定会員限定ページとして登録されているか探す
$PageCustomerClass = $this->pageCustomerClassRepository->findOneBy([
'Page' => $Page,
]);
// 特定会員限定ページとして登録されていなかったら表示
if (is_null($PageCustomerClass)) {
return;
}
if ($this->authorizationChecker->isGranted('ROLE_USER')) {
// 特定会員として登録されているか探す
$CustomerCustomerClass = $this->customerCustomerClassRepository->findOneBy([
'Customer' => $this->context->getCurrentUser(),
]);
if ($CustomerCustomerClass) {
// 特定会員限定ページと紐付いている会員かどうか探す
$PageCustomerClass = $this->pageCustomerClassRepository->findOneBy([
'Page' => $Page,
'CustomerClass' => $CustomerCustomerClass->getCustomerClass(),
]);
// 特定会員限定ページと紐付いている会員だったら表示
if ($PageCustomerClass) {
return;
}
}
}
$this->redirectToErrorPage($event);
}
}