src/Form/RegisterUserType.php line 20

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Component\Captcha\Form\CaptchaType;
  4. use App\Component\Configuration\Util\Config;
  5. use App\Entity\User;
  6. use App\Util\TokenGenerator;
  7. use Symfony\Component\Form\AbstractType;
  8. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  9. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  10. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  11. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  12. use Symfony\Component\Form\Extension\Core\Type\TextType;
  13. use Symfony\Component\Form\FormBuilderInterface;
  14. use Symfony\Component\Form\FormEvent;
  15. use Symfony\Component\Form\FormEvents;
  16. use Symfony\Component\OptionsResolver\OptionsResolver;
  17. class RegisterUserType extends AbstractType
  18. {
  19.     public function __construct(
  20.         private readonly Config $config,
  21.     ) {
  22.     }
  23.     public function buildForm(FormBuilderInterface $builder, array $options)
  24.     {
  25.         if ($this->config->get('site_user_register_with_first_and_last_name')) {
  26.             $builder
  27.                 ->add('firstName'TextType::class, [
  28.                     'required' => true,
  29.                 ])
  30.                 ->add('lastName'TextType::class, [
  31.                     'required' => true,
  32.                 ])
  33.             ;
  34.         }
  35.         $builder->add('email'EmailType::class, [
  36.             'required' => true,
  37.         ]);
  38.         if ($this->config->get('site_user_register_with_username')) {
  39.             $builder->add('username'TextType::class, [
  40.                 'required' => true,
  41.             ]);
  42.         } else {
  43.             $builder->add('username'HiddenType::class);
  44.         }
  45.         if ($this->config->get('site_user_register_with_city')) {
  46.             $builder->add('city'TextType::class, [
  47.                 'required' => true,
  48.             ]);
  49.         }
  50.         if ($this->config->get('site_user_register_with_password')) {
  51.             $builder->add('plainPassword'RepeatedType::class, [
  52.                 'type' => PasswordType::class,
  53.                 'required' => true,
  54.                 'options' => ['attr' => ['class' => 'password-field']],
  55.                 'first_options' => ['label' => 'Password'],
  56.                 'second_options' => ['label' => 'Repeat password'],
  57.             ]);
  58.         } else {
  59.             $builder->add('plainPassword'HiddenType::class);
  60.         }
  61.         $builder->add('captcha'CaptchaType::class);
  62.         $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
  63.             /** @var User $user */
  64.             $user $event->getData();
  65.             if (!$user->getUsername()) {
  66.                 $event->setData($user->setUsername($user->getEmail()));
  67.             }
  68.             if (!$user->getPlainPassword()) {
  69.                 $event->setData($user->setPlainPassword(TokenGenerator::generateToken()));
  70.                 // If password was generated: send a reset password mail
  71.                 $event->setData($user->setPasswordRequestedAt(new \DateTime()));
  72.             }
  73.         });
  74.     }
  75.     public function configureOptions(OptionsResolver $resolver)
  76.     {
  77.         $resolver->setDefaults([
  78.             'data_class' => User::class,
  79.             'translation_domain' => 'user_data',
  80.         ]);
  81.     }
  82. }