<?php
namespace Plugin\CustomerClassOnlyPage4\EventSubscriber\Front;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
/**
* Class ProductDetailSubscriber
* @package Plugin\CustomerClassOnlyPage4\EventSubscriber\Front
*/
class ProductDetailSubscriber 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_detail")) {
return;
}
$Product = $this->productRepository->find($event->getRequest()->get('id'));
// 特定会員限定商品として登録されているか探す
$ProductCustomerClass = $this->productCustomerClassRepository->findOneBy([
'Product' => $Product,
]);
// 特定会員限定商品として登録されていなかったら表示
if (is_null($ProductCustomerClass)) {
return;
}
if ($this->authorizationChecker->isGranted('ROLE_USER')) {
// 特定会員として登録されているか探す
$CustomerCustomerClass = $this->customerCustomerClassRepository->findOneBy([
'Customer' => $this->context->getCurrentUser(),
]);
if ($CustomerCustomerClass) {
// 特定会員限定商品と紐付いている会員かどうか探す
$ProductCustomerClass = $this->productCustomerClassRepository->findOneBy([
'Product' => $Product,
'CustomerClass' => $CustomerCustomerClass->getCustomerClass(),
]);
// 特定会員限定商品と紐付いている会員だったら表示
if ($ProductCustomerClass) {
return;
}
}
}
$this->redirectToErrorPage($event);
}
}