<?php
namespace Plugin\CustomerClassOnlyPage4\EventSubscriber\Admin;
use Eccube\Repository\PageRepository;
use Plugin\CustomerClassOnlyPage4\Exception\PageException;
use Plugin\CustomerClassOnlyPage4\Repository\PageCustomerClassRepository;
use Plugin\CustomerClassOnlyPage4\Request\Context;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\KernelEvents;
class DeletePageSubscriber implements EventSubscriberInterface
{
/**
* @var Context
*/
private $context;
/**
* @var PageRepository
*/
private $pageRepository;
/**
* @var PageCustomerClassRepository
*/
private $pageCustomerClassRepository;
public function __construct(
Context $context,
PageRepository $pageRepository,
PageCustomerClassRepository $pageCustomerClassRepository
)
{
$this->context = $context;
$this->pageRepository = $pageRepository;
$this->pageCustomerClassRepository = $pageCustomerClassRepository;
}
/**
* @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("admin_content_page_delete")) {
return;
}
$Page = $this->pageRepository->findOneBy([
'id' => $event->getRequest()->get('id'),
]);
$PageCustomerClasses = $this->pageCustomerClassRepository->findBy(['Page' => $Page]);
if($PageCustomerClasses) {
throw new HttpException(400, "会員種別が登録されているので削除できません。");
}
}
}