X-Git-Url: https://git.rapsys.eu/packbundle/blobdiff_plain/371738010baf06170c7b82495080884f9f782574..HEAD:/Form/CaptchaType.php diff --git a/Form/CaptchaType.php b/Form/CaptchaType.php index c3a5f69..9d9db16 100644 --- a/Form/CaptchaType.php +++ b/Form/CaptchaType.php @@ -11,6 +11,7 @@ namespace Rapsys\PackBundle\Form; +use Rapsys\PackBundle\RapsysPackBundle; use Rapsys\PackBundle\Util\ImageUtil; use Rapsys\PackBundle\Util\SluggerUtil; @@ -36,8 +37,9 @@ class CaptchaType extends AbstractType { * @param ?ImageUtil $image The image instance * @param ?SluggerUtil $slugger The slugger instance * @param ?TranslatorInterface $translator The translator instance + * @param bool $enable Use captcha */ - public function __construct(protected ?ImageUtil $image = null, protected ?SluggerUtil $slugger = null, protected ?TranslatorInterface $translator = null) { + public function __construct(protected ?ImageUtil $image = null, protected ?SluggerUtil $slugger = null, protected ?TranslatorInterface $translator = null, protected bool $enable = false) { } /** @@ -49,13 +51,13 @@ class CaptchaType extends AbstractType { //With image, slugger and translator if (!empty($options['captcha']) && $this->image !== null && $this->slugger !== null && $this->translator !== null) { //Set captcha - $captcha = $this->image->getCaptcha((new \DateTime('-1 year'))->getTimestamp()); + $captcha = $this->image->getCaptcha(); //Add captcha token $builder->add('_captcha_token', HiddenType::class, ['data' => $captcha['token'], 'empty_data' => $captcha['token'], 'mapped' => false]); //Add captcha - $builder->add('captcha', IntegerType::class, ['label_attr' => ['class' => 'captcha'], 'label' => ''.htmlentities($captcha['equation']).'', 'label_html' => true, 'mapped' => false, 'translation_domain' => false]); + $builder->add('captcha', IntegerType::class, ['label_attr' => ['class' => 'captcha'], 'label' => ''.htmlentities($captcha['equation']).'', 'label_html' => true, 'mapped' => false, 'translation_domain' => false, 'required' => true]); //Add event listener on captcha $builder->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'validateCaptcha']); @@ -70,7 +72,7 @@ class CaptchaType extends AbstractType { parent::configureOptions($resolver); //Set defaults - $resolver->setDefaults(['captcha' => false]); + $resolver->setDefaults(['captcha' => $this->enable, 'error_bubbling' => true, 'translation_domain' => RapsysPackBundle::getAlias()]); //Add extra captcha option $resolver->setAllowedTypes('captcha', 'boolean'); @@ -94,6 +96,8 @@ class CaptchaType extends AbstractType { //Without captcha if (empty($data['captcha'])) { //Add error on captcha + //XXX: we need to add error on form + //XXX: see https://github.com/symfony/symfony/issues/35831 $form->addError(new FormError($this->translator->trans('Captcha is empty'))); //Reset captcha token @@ -104,6 +108,8 @@ class CaptchaType extends AbstractType { //With invalid captcha } elseif ($this->slugger->hash($data['captcha']) !== $data['_captcha_token']) { //Add error on captcha + //XXX: we need to add error on form + //XXX: see https://github.com/symfony/symfony/issues/35831 $form->addError(new FormError($this->translator->trans('Captcha is invalid'))); //Reset captcha token