X-Git-Url: https://git.rapsys.eu/packbundle/blobdiff_plain/177b09c72785e869d93602ac47524a31dd64a94b..7958c95fb124a29b4970ef8ec72f78ee4f5a71ea:/Form/CaptchaType.php
diff --git a/Form/CaptchaType.php b/Form/CaptchaType.php
index 2ff22ba..f8cf3d0 100644
--- a/Form/CaptchaType.php
+++ b/Form/CaptchaType.php
@@ -11,17 +11,19 @@
 
 namespace Rapsys\PackBundle\Form;
 
+use Rapsys\PackBundle\RapsysPackBundle;
 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
@@ -32,11 +34,11 @@ class CaptchaType extends AbstractType {
 	/**
 	 * Constructor
 	 *
-	 * @param ImageUtil $image
-	 * @param SluggerUtil $slugger
-	 * @param TranslatorInterface $translator The translator instance
+	 * @param ?ImageUtil $image The image instance
+	 * @param ?SluggerUtil $slugger The slugger instance
+	 * @param ?TranslatorInterface $translator The translator instance
 	 */
-	public function __construct(protected ImageUtil $image, protected SluggerUtil $slugger, protected TranslatorInterface $translator) {
+	public function __construct(protected ?ImageUtil $image = null, protected ?SluggerUtil $slugger = null, protected ?TranslatorInterface $translator = null) {
 	}
 
 	/**
@@ -45,18 +47,35 @@ class CaptchaType extends AbstractType {
 	 * Build form
 	 */
 	public function buildForm(FormBuilderInterface $builder, array $options): void {
-		//Set captcha
-		$captcha = $this->image->getCaptcha((new \DateTime('-1 year'))->getTimestamp());
+		//With image, slugger and translator
+		if (!empty($options['captcha']) && $this->image !== null && $this->slugger !== null && $this->translator !== null) {
+			//Set captcha
+			$captcha = $this->image->getCaptcha();
 
-		//Add captcha token
-		$builder->add('_captcha_token', HiddenType::class, ['data' => $captcha['token'], 'empty_data' => $captcha['token']]);
+			//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']).']('.htmlentities($captcha['src']).') ', 'label_html' => true, 'translation_domain' => false]);
+			//Add captcha
+			$builder->add('captcha', IntegerType::class, ['label_attr' => ['class' => 'captcha'], 'label' => '
', 'label_html' => true, 'translation_domain' => false]);
+			//Add captcha
+			$builder->add('captcha', IntegerType::class, ['label_attr' => ['class' => 'captcha'], 'label' => '!['.htmlentities($captcha['equation']).']('.htmlentities($captcha['src']).') ', 'label_html' => true, 'mapped' => false, 'translation_domain' => false]);
 
-		//Add event listener on captcha
-		$builder->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'validateCaptcha']);
-    }
+			//Add event listener on captcha
+			$builder->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'validateCaptcha']);
+		}
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function configureOptions(OptionsResolver $resolver): void {
+		//Call parent configure options
+		parent::configureOptions($resolver);
+
+		//Set defaults
+		$resolver->setDefaults(['captcha' => false, 'error_bubbling' => true, 'translation_domain' => RapsysPackBundle::getAlias()]);
+
+		//Add extra captcha option
+		$resolver->setAllowedTypes('captcha', 'boolean');
+	}
 
 	/**
 	 * Validate captcha
', 'label_html' => true, 'mapped' => false, 'translation_domain' => false]);
 
-		//Add event listener on captcha
-		$builder->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'validateCaptcha']);
-    }
+			//Add event listener on captcha
+			$builder->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'validateCaptcha']);
+		}
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function configureOptions(OptionsResolver $resolver): void {
+		//Call parent configure options
+		parent::configureOptions($resolver);
+
+		//Set defaults
+		$resolver->setDefaults(['captcha' => false, 'error_bubbling' => true, 'translation_domain' => RapsysPackBundle::getAlias()]);
+
+		//Add extra captcha option
+		$resolver->setAllowedTypes('captcha', 'boolean');
+	}
 
 	/**
 	 * Validate captcha