src/Profile/Form/Type/Auth/RegisterType.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\Profile\Form\Type\Auth;
  3. use App\Profile\Model\Profile;
  4. use Pimcore\Model\DataObject\Service;
  5. use Pimcore\Tool;
  6. use Symfony\Component\Form\AbstractType;
  7. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  8. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  9. use Symfony\Component\Form\Extension\Core\Type\CountryType;
  10. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  11. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  12. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  13. use Symfony\Component\Form\Extension\Core\Type\TextType;
  14. use Symfony\Component\Form\FormBuilderInterface;
  15. use Symfony\Component\Form\FormEvent;
  16. use Symfony\Component\Form\FormEvents;
  17. use Symfony\Component\Intl\Languages;
  18. use Symfony\Component\Validator\Constraints\Length;
  19. use Symfony\Component\Validator\Constraints\NotBlank;
  20. use Symfony\Contracts\Translation\TranslatorInterface;
  21. class RegisterType extends AbstractType
  22. {
  23.   protected $translator;
  24.   public function __construct(TranslatorInterface $translator)
  25.   {
  26.     $this->translator $translator;
  27.   }
  28.   public function buildForm(FormBuilderInterface $builder, array $options)
  29.   {
  30.     $user = new Profile();
  31.     $genderOptions array_flip(Service::getOptionsForSelectField($user'gender'));
  32.     $customerOptions array_flip(Service::getOptionsForSelectField($user'profileType'));
  33.     $titleOptions array_flip(Service::getOptionsForSelectField($user'title'));
  34.     $profileTypeData $builder->getData()->getProfileType();
  35.     $profileType $profileTypeData $profileTypeData $customerOptions['person'];
  36.     $languages array_filter(Languages::getNames(), fn ($key) => in_array($keyTool::getValidLanguages()), ARRAY_FILTER_USE_KEY);
  37.     $builder
  38.       ->add('profileType'ChoiceType::class, [
  39.         'choices' => $customerOptions,
  40.         'data' => $profileType,
  41.         'required' => true,
  42.         'label' => 'auth.form.register.label.profileType',
  43.         'expanded' => true,
  44.       ])
  45.       ->add('country'CountryType::class, [
  46.         'preferred_choices' => ['DE''FR''GB''AT''CH'],
  47.       ])
  48.       ->add('gender'ChoiceType::class, [
  49.         'choices' => $genderOptions,
  50.         'data' => 'unknown',
  51.         'required' => true,
  52.         'label' => 'auth.form.register.label.gender',
  53.       ])
  54.       ->add('title'ChoiceType::class, [
  55.         'choices' => $titleOptions,
  56.         'required' => false,
  57.       ])
  58.       ->add('firstname'TextType::class, [
  59.         'required' => true,
  60.         'label' => 'auth.form.register.label.firstname',
  61.         'attr' => ['autocomplete' => 'given-name'],
  62.         'constraints' => [new NotBlank()],
  63.       ])
  64.       ->add('lastname'TextType::class, [
  65.         'required' => true,
  66.         'label' => 'auth.form.register.label.lastname',
  67.         'attr' => ['autocomplete' => 'family-name'],
  68.         'constraints' => [new NotBlank()],
  69.       ])
  70.       ->add('email'EmailType::class, [
  71.         'required' => true,
  72.         'label' => 'auth.form.register.label.email',
  73.         'attr' => ['autocomplete' => 'username'],
  74.         ])
  75.       ->add('password'RepeatedType::class, [
  76.         'type' => PasswordType::class,
  77.         'invalid_message' => 'auth.form.register.error.password.matching',
  78.         'required' => true,
  79.         'constraints' => [new Length(['min' => 6])],
  80.         'error_mapping' => [
  81.             '.' => 'second',
  82.         ],
  83.         'first_options' => [
  84.           'label' => 'auth.form.register.label.password',
  85.           'attr' => ['autocomplete' => 'new-password'],
  86.         ],
  87.         'second_options' => [
  88.           'label' => 'auth.form.register.label.password.repeat',
  89.           'attr' => ['autocomplete' => 'new-password'],
  90.           ],
  91.       ])->add('preferredLanguage'ChoiceType::class, [
  92.         'choices' => array_flip($languages),
  93.         'required' => true,
  94.         'label' => 'auth.form.register.label.preferredLanguage',
  95.       ])
  96.       ->add('accept_privacy'CheckboxType::class, [
  97.         'label' => 'auth.form.register.label.accept_privacy',
  98.         'label_html' => true,
  99.         'required' => true,
  100.       ])
  101.       ->add('accept_termsofuse'CheckboxType::class, [
  102.         'label' => 'auth.form.register.label.accept_termsofuse',
  103.         'label_html' => true,
  104.         'required' => true,
  105.       ])
  106.       ->add('accept_oflegalage'CheckboxType::class, [
  107.         'label' => 'auth.form.register.label.accept_oflegalage',
  108.         'label_html' => true,
  109.         'required' => true,
  110.       ])
  111.       ->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) {
  112.         $form $event->getForm();
  113.         $profileType $event->getData()?->getProfileType();
  114.         if ($profileType == 'company') {
  115.           $form->add('vat'TextType::class, [
  116.             'required' => true,
  117.             'constraints' => [new NotBlank()],
  118.           ]);
  119.           $form->add('company'TextType::class, [
  120.             'required' => true,
  121.             'constraints' => [new NotBlank()],
  122.           ]);
  123.         }
  124.       })
  125.     ;
  126.   }
  127. }