<?php
namespace Plugin\GmoPsKb4\EventDispatcher;
use Eccube\Entity\Customer;
use Eccube\Entity\Order;
use Eccube\Entity\Payment;
use Eccube\Event\TemplateEvent;
use Plugin\GmoPsKb4\Entity\Config;
use Plugin\GmoPsKb4\Form\Type\Admin\FixRequestType;
use Plugin\GmoPsKb4\Repository\ConfigRepository;
use Plugin\GmoPsKb4\Service\GmoPsKbService;
use Plugin\GmoPsKb4\Service\Method\GmoPsKb;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\FormFactoryInterface;
class EventSubscriber implements EventSubscriberInterface
{
/** @var FormFactoryInterface */
private $formFactory;
/** @var GmoPsKbService */
private $gmoPsKbService;
/** @var Config */
private $config;
public function __construct(
FormFactoryInterface $formFactory,
GmoPsKbService $gmoPsKbService,
ConfigRepository $configRepository
)
{
$this->formFactory = $formFactory;
$this->gmoPsKbService = $gmoPsKbService;
$this->config = $configRepository->get();
}
public static function getSubscribedEvents()
{
return [
'Mypage/_navi.twig' => 'onTwigMypageNavi',
'Mypage/index.twig' => 'onTwigMypageNavi',
'Mypage/history.twig' => 'onTwigMypageNavi',
'Mypage/favorite.twig' => 'onTwigMypageNavi',
'Mypage/change.twig' => 'onTwigMypageNavi',
'Mypage/change_complete.twig' => 'onTwigMypageNavi',
'Mypage/delivery.twig' => 'onTwigMypageNavi',
'Mypage/delivery_edit.twig' => 'onTwigMypageNavi',
'Mypage/withdraw.twig' => 'onTwigMypageNavi',
'@GmoPsKb4/Mypage/index.twig' => 'onTwigMypageNavi',
'@GmoPsKb4/Mypage/examination.twig' => 'onTwigMypageNavi',
'@GmoPsKb4/Mypage/examination_confirm.twig' => 'onTwigMypageNavi',
'@GmoPsKb4/Mypage/examination_complete.twig' => 'onTwigMypageNavi',
'Shopping/index.twig' => 'onTwigShoppingIndex',
'@admin/Order/edit.twig' => 'onTwigAdminOrderEdit',
'@admin/Customer/edit.twig' => 'onTwigAdminCustomerEdit',
];
}
public function onTwigMypageNavi(TemplateEvent $event)
{
$event->setParameter('gmops_kb_mypage', $this->config->getCreditFacility() && $this->config->getCreditFacilityCustomer());
$event->addSnippet('@GmoPsKb4/Mypage/_navi.twig');
}
public function onTwigShoppingIndex(TemplateEvent $event)
{
$event->addSnippet('@GmoPsKb4/Shopping/_index.twig');
}
public function onTwigAdminOrderEdit(TemplateEvent $event)
{
$event->addSnippet('@GmoPsKb4/admin/Order/_edit.twig');
/** @var Order $order */
$order = $event->getParameter('Order');
// Order が存在しない場合は非表示
if (!$order || !$order->getId()) {
$event->setParameter('gmops_kb_disp', false);
return;
}
// GMO掛け払い情報が存在せず、決済がGMO掛け払い以外の場合には非表示
/** @var Payment $payment */
$payment = $order->getPayment();
if ((!$order->getKbOrderPayments() || $order->getKbOrderPayments()->count() === 0) && (!$payment || $payment->getMethodClass() !== GmoPsKb::class)) {
$event->setParameter('gmops_kb_disp', false);
return;
}
$form = $this->formFactory->create(FixRequestType::class);
$event->setParameter('gmops_kb_disp', true);
$event->setParameter('fix_request_form', $form->createView());
}
public function onTwigAdminCustomerEdit(TemplateEvent $event)
{
$event->addSnippet('@GmoPsKb4/admin/Customer/_edit.twig');
$event->setParameter('gmops_kb_config', $this->config);
}
}