<?php
namespace Plugin\CustomerClassOnlyPage4\EventSubscriber\Front;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
/**
* Class ProductListSubscriber
* @package Plugin\CustomerClassOnlyPage4\EventSubscriber\Front
*/
class ProductListSubscriber 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("product_list")) {
return;
}
// category_idがない場合、PostgreSQLでエラーが出る問題回避
if (!$event->getRequest()->get('category_id')) {
return;
}
$Category = $this->categoryRepository->find($event->getRequest()->get('category_id'));
// 特定会員限定カテゴリとして登録されているか探す
$CategoryCustomerClass = $this->categoryCustomerClassRepository->findOneBy([
"Category" => $Category
]);
// 特定会員限定カテゴリとして登録されていなかったら表示
if (is_null($CategoryCustomerClass)) {
return;
}
if ($this->authorizationChecker->isGranted('ROLE_USER')) {
// 特定会員として登録されているか探す
$CustomerCustomerClass = $this->customerCustomerClassRepository->findOneBy([
'Customer' => $this->context->getCurrentUser(),
]);
if ($CustomerCustomerClass) {
// 特定会員限定ページと紐付いている会員かどうか探す
$CategoryCustomerClass = $this->categoryCustomerClassRepository->findOneBy([
'Category' => $Category,
'CustomerClass' => $CustomerCustomerClass->getCustomerClass(),
]);
// 特定会員限定カテゴリと紐付いている会員だったら表示
if ($CategoryCustomerClass) {
return;
}
}
}
$this->redirectToErrorPage($event);
}
}