<?php
namespace Customize\EventListener;
use Customize\Service\Google\ReCaptchaService;
use Eccube\Event\TemplateEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Twig\Environment;
class GoogleEventListener implements EventSubscriberInterface
{
/**
* @var Environment
*/
private $reCaptchaService;
public function __construct(ReCaptchaService $reCaptchaService)
{
$this->reCaptchaService = $reCaptchaService;
}
/**
* @inheritDoc
*/
public static function getSubscribedEvents()
{
return [
KernelEvents::VIEW => 'onKernelView',
'Contact/index.twig' => 'onContactIndex',
'Contact/confirm.twig' => 'onContactConfirm',
'Entry/index.twig' => 'onEntryIndex',
'Entry/confirm.twig' => 'onEntryIndex',
'Forgot/index.twig' => 'onForgotIndex',
'Mail/question.twig' => 'onMailQuestionIndex',
'Mail/question_confirm.twig' => 'onMailQuestionConfirm',
];
}
/**
* Add path_info to controller result
*
* @param ViewEvent $event
* @return void
*/
public function onKernelView(ViewEvent $event) {
$controllerResult = $event->getControllerResult();
$request = $event->getRequest();
$pathInfo = $request->getPathInfo();
$controllerResult['path_info'] = $pathInfo;
$event->setControllerResult($controllerResult);
}
public function injectReCaptcha(TemplateEvent $event)
{
$event->addSnippet('Google/reCAPTCHA.twig');
}
public function onContactIndex(TemplateEvent $event)
{
$pathInfo = $event->getParameter('path_info');
if ($this->reCaptchaService->shouldProcessReCaptcha($pathInfo)) {
$this->injectReCaptcha($event);
$event->addSnippet('Google/Contact/index.twig');
}
}
public function onContactConfirm(TemplateEvent $event)
{
$pathInfo = $event->getParameter('path_info');
if ($this->reCaptchaService->shouldProcessReCaptcha($pathInfo)) {
$this->injectReCaptcha($event);
$event->addSnippet('Google/Contact/confirm.twig');
}
}
public function onEntryIndex(TemplateEvent $event)
{
$pathInfo = $event->getParameter('path_info');
if ($this->reCaptchaService->shouldProcessReCaptcha($pathInfo)) {
$this->injectReCaptcha($event);
$event->addSnippet('Google/Entry/index.twig');
}
}
public function onForgotIndex(TemplateEvent $event)
{
$pathInfo = $event->getParameter('path_info');
if ($this->reCaptchaService->shouldProcessReCaptcha($pathInfo))
{
$this->injectReCaptcha($event);
$event->addSnippet('Google/Forgot/index.twig');
}
}
public function onMailQuestionIndex(TemplateEvent $event)
{
$pathInfo = $event->getParameter('path_info');
if ($this->reCaptchaService->shouldProcessReCaptcha($pathInfo))
{
$this->injectReCaptcha($event);
$event->addSnippet('Google/MailQuestion/index.twig');
}
}
public function onMailQuestionConfirm(TemplateEvent $event)
{
$pathInfo = $event->getParameter('path_info');
if ($this->reCaptchaService->shouldProcessReCaptcha($pathInfo))
{
$this->injectReCaptcha($event);
$event->addSnippet('Google/MailQuestion/confirm.twig');
}
}
}