]> Raphaƫl G. Git Repositories - packbundle/blobdiff - Form/CaptchaType.php
Add captcha option
[packbundle] / Form / CaptchaType.php
index da087c081cf6b248104a37dfd2fbab50fcc71c17..c3a5f69c4559e8d588ad40d62f5453dcc8f8c0a2 100644 (file)
@@ -14,14 +14,15 @@ namespace Rapsys\PackBundle\Form;
 use Rapsys\PackBundle\Util\ImageUtil;
 use Rapsys\PackBundle\Util\SluggerUtil;
 
-use Symfony\Contracts\Translation\TranslatorInterface;
 use Symfony\Component\Form\AbstractType;
 use Symfony\Component\Form\Extension\Core\Type\HiddenType;
 use Symfony\Component\Form\Extension\Core\Type\IntegerType;
 use Symfony\Component\Form\FormBuilderInterface;
-use Symfony\Component\Form\FormEvents;
-use Symfony\Component\Form\FormEvent;
 use Symfony\Component\Form\FormError;
+use Symfony\Component\Form\FormEvent;
+use Symfony\Component\Form\FormEvents;
+use Symfony\Component\OptionsResolver\OptionsResolver;
+use Symfony\Contracts\Translation\TranslatorInterface;
 
 /**
  * Captcha Type class definition
@@ -30,56 +31,50 @@ use Symfony\Component\Form\FormError;
  */
 class CaptchaType extends AbstractType {
        /**
-        * @var ImageUtil $image
-        */
-       private $image;
-
-       /**
-        * @var SluggerUtil $slugger
-        */
-       private $slugger;
-
-       /**
-        * @var Translator instance
+        * Constructor
+        *
+        * @param ?ImageUtil $image The image instance
+        * @param ?SluggerUtil $slugger The slugger instance
+        * @param ?TranslatorInterface $translator The translator instance
         */
-       private $translator;
+       public function __construct(protected ?ImageUtil $image = null, protected ?SluggerUtil $slugger = null, protected ?TranslatorInterface $translator = null) {
+       }
 
        /**
-        * Constructor
+        * {@inheritdoc}
         *
-        * @param ImageUtil $image
-        * @param SluggerUtil $slugger
-        * @param TranslatorInterface $translator The translator instance
+        * Build form
         */
-       public function __construct(ImageUtil $image, SluggerUtil $slugger, TranslatorInterface $translator) {
-               //Set image
-               $this->image = $image;
+       public function buildForm(FormBuilderInterface $builder, array $options): void {
+               //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());
+
+                       //Add captcha token
+                       $builder->add('_captcha_token', HiddenType::class, ['data' => $captcha['token'], 'empty_data' => $captcha['token'], 'mapped' => false]);
 
-               //Set slugger
-               $this->slugger = $slugger;
+                       //Add captcha
+                       $builder->add('captcha', IntegerType::class, ['label_attr' => ['class' => 'captcha'], 'label' => '<img src="'.htmlentities($captcha['src']).'" alt="'.htmlentities($captcha['equation']).'" />', 'label_html' => true, 'mapped' => false, 'translation_domain' => false]);
 
-               //Set translator
-               $this->translator = $translator;
+                       //Add event listener on captcha
+                       $builder->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'validateCaptcha']);
+               }
        }
 
        /**
-        * Build form
-        *
         * {@inheritdoc}
         */
-       public function buildForm(FormBuilderInterface $builder, array $options): void {
-               //Set captcha
-               $captcha = $this->image->getCaptcha((new \DateTime('-1 year'))->getTimestamp());
-
-               //Add captcha token
-               $builder->add('_captcha_token', HiddenType::class, ['data' => $captcha['token'], 'empty_data' => $captcha['token']]);
+       public function configureOptions(OptionsResolver $resolver): void {
+               //Call parent configure options
+               parent::configureOptions($resolver);
 
-               //Add captcha
-               $builder->add('captcha', IntegerType::class, ['label_attr' => ['class' => 'captcha'], 'label' => '<img src="'.htmlentities($captcha['src']).'" alt="'.htmlentities($captcha['equation']).'" />', 'label_html' => true, 'translation_domain' => false]);
+               //Set defaults
+               $resolver->setDefaults(['captcha' => false]);
 
-               //Add event listener on captcha
-               $builder->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'validateCaptcha']);
-    }
+               //Add extra captcha option
+               $resolver->setAllowedTypes('captcha', 'boolean');
+       }
 
        /**
         * Validate captcha