<?php
namespace Plugin\ReCaptcha;
use Eccube\Event\TemplateEvent;
use Plugin\ReCaptcha\Repository\RecaptchaRepository;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class Event implements EventSubscriberInterface
{
/**
* @var RecaptchaRepository
*/
protected $recaptchaRepository;
/**
* RecaptchaController constructor.
*
* @param RecaptchaRepository $recaptchaRepository
*/
public function __construct(RecaptchaRepository $recaptchaRepository)
{
$this->recaptchaRepository = $recaptchaRepository;
}
/**
* @inheritDoc
*/
public static function getSubscribedEvents()
{
return [
'Entry/index.twig' => 'entryTwig',
'Entry/confirm.twig' => 'entryConfirmTwig',
'Mypage/login.twig' => 'loginTwig',
'Mypage/change.twig' => 'changeTwig',
'Shopping/login.twig' => 'orderTwig',
'Shopping/index.twig' => 'orderTwig',
'Shopping/confirm.twig' => 'orderConfirmTwig',
'Contact/index.twig' => 'contactTwig',
'Contact/confirm.twig' => 'contactConfirmTwig',
];
}
/**
* @param TemplateEvent $event
*/
public function entryTwig(TemplateEvent $event)
{
$this->addEntryRecaptcha($event);
}
/**
* @param TemplateEvent $event
*/
public function entryConfirmTwig(TemplateEvent $event)
{
$this->addEntryRecaptcha($event, true);
}
/**
* @param TemplateEvent $event
*/
public function loginTwig(TemplateEvent $event)
{
$this->addLoginRecaptcha($event, true);
}
/**
* @param TemplateEvent $event
*/
public function changeTwig(TemplateEvent $event)
{
$this->addChangeRecaptcha($event, true);
}
/**
* @param TemplateEvent $event
*/
public function orderTwig(TemplateEvent $event)
{
$this->addOrderRecaptcha($event);
}
/**
* @param TemplateEvent $event
*/
public function orderConfirmTwig(TemplateEvent $event)
{
$this->addOrderRecaptcha($event, true);
}
/**
* @param TemplateEvent $event
*/
public function contactTwig(TemplateEvent $event)
{
$this->addContactRecaptcha($event);
}
/**
* @param TemplateEvent $event
*/
public function contactConfirmTwig(TemplateEvent $event)
{
$this->addContactRecaptcha($event, true);
}
/**
* @param TemplateEvent $event
*/
private function addEntryRecaptcha(TemplateEvent $event, $mode = false)
{
/** @var \Plugin\ReCaptcha\Entity\Recaptcha $Recaptcha */
$Recaptcha = $this->recaptchaRepository->get();
if ($Recaptcha->getSiteKey() && $Recaptcha->getSecretKey() && $Recaptcha->getEntryPageEnabled()) {
$event->addSnippet('@ReCaptcha/default/Entry/recaptcha_entry.twig');
if ($mode) {
$event->addSnippet('@ReCaptcha/common/mode.twig');
}
$event->setParameter('recaptcha_site_key', $Recaptcha->getSiteKey());
$event->setParameter('show_grecaptcha_badge', $Recaptcha->getShowGrecapthaBadgeEnabled());
}
}
/**
* @param TemplateEvent $event
*/
private function addLoginRecaptcha(TemplateEvent $event, $mode = false)
{
/** @var \Plugin\ReCaptcha\Entity\Recaptcha $Recaptcha */
$Recaptcha = $this->recaptchaRepository->get();
if ($Recaptcha->getSiteKey() && $Recaptcha->getSecretKey() && $Recaptcha->getLoginPageEnabled()) {
$event->addSnippet('@ReCaptcha/common/extension.twig');
$event->addSnippet('@ReCaptcha/default/Mypage/recaptcha_login.twig');
if ($mode) {
$event->addSnippet('@ReCaptcha/common/mode.twig');
}
$event->setParameter('recaptcha_site_key', $Recaptcha->getSiteKey());
$event->setParameter('show_grecaptcha_badge', $Recaptcha->getShowGrecapthaBadgeEnabled());
}
}
/**
* @param TemplateEvent $event
*/
private function addChangeRecaptcha(TemplateEvent $event, $mode = false)
{
/** @var \Plugin\ReCaptcha\Entity\Recaptcha $Recaptcha */
$Recaptcha = $this->recaptchaRepository->get();
if ($Recaptcha->getSiteKey() && $Recaptcha->getSecretKey() && $Recaptcha->getChangeMypageEnabled()) {
$event->addSnippet('@ReCaptcha/common/extension.twig');
$event->addSnippet('@ReCaptcha/default/Mypage/recaptcha_change.twig');
if ($mode) {
$event->addSnippet('@ReCaptcha/common/mode.twig');
}
$event->setParameter('recaptcha_site_key', $Recaptcha->getSiteKey());
$event->setParameter('show_grecaptcha_badge', $Recaptcha->getShowGrecapthaBadgeEnabled());
}
}
/**
* @param TemplateEvent $event
*/
private function addOrderRecaptcha(TemplateEvent $event, $mode = false)
{
/** @var \Plugin\ReCaptcha\Entity\Recaptcha $Recaptcha */
$Recaptcha = $this->recaptchaRepository->get();
if ($Recaptcha->getSiteKey() && $Recaptcha->getSecretKey() && $Recaptcha->getOrderPageEnabled()) {
$event->addSnippet('@ReCaptcha/common/extension.twig');
$event->addSnippet('@ReCaptcha/default/Shopping/recaptcha_order.twig');
if ($mode) {
$event->addSnippet('@ReCaptcha/common/mode.twig');
}
$event->setParameter('recaptcha_site_key', $Recaptcha->getSiteKey());
$event->setParameter('show_grecaptcha_badge', $Recaptcha->getShowGrecapthaBadgeEnabled());
}
}
/**
* @param TemplateEvent $event
*/
private function addContactRecaptcha(TemplateEvent $event, $mode = false)
{
/** @var \Plugin\ReCaptcha\Entity\Recaptcha $Recaptcha */
$Recaptcha = $this->recaptchaRepository->get();
if ($Recaptcha->getSiteKey() && $Recaptcha->getSecretKey() && $Recaptcha->getContactPageEnabled()) {
$event->addSnippet('@ReCaptcha/common/extension.twig');
$event->addSnippet('@ReCaptcha/default/Contact/recaptcha_contact.twig');
if ($mode) {
$event->addSnippet('@ReCaptcha/common/mode.twig');
}
$event->setParameter('recaptcha_site_key', $Recaptcha->getSiteKey());
$event->setParameter('show_grecaptcha_badge', $Recaptcha->getShowGrecapthaBadgeEnabled());
}
}
}