src/Form/Frontend/RegistrationType.php line 149

Open in your IDE?
  1. <?php
  2. namespace App\Form\Frontend;
  3. use App\Entity\Gos\Country;
  4. use App\Entity\Gos\User;
  5. use App\Entity\Gos\UserPosition;
  6. use App\Utils\Geolocation;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Doctrine\ORM\EntityRepository;
  9. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  10. use Symfony\Component\Form\AbstractType;
  11. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  12. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  13. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  14. use Symfony\Component\Form\Extension\Core\Type\TelType;
  15. use Symfony\Component\Form\Extension\Core\Type\TextType;
  16. use Symfony\Component\Form\FormBuilderInterface;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\RequestStack;
  19. use Symfony\Component\OptionsResolver\OptionsResolver;
  20. use Symfony\Component\Validator\Constraints\NotBlank;
  21. use Symfony\Contracts\Translation\TranslatorInterface;
  22. class RegistrationType extends AbstractType
  23. {
  24.     protected EntityManagerInterface $em;
  25.     protected                        $geolocation;
  26.     protected TranslatorInterface    $translator;
  27.     protected ?Request               $request;
  28.     public function __construct(
  29.         TranslatorInterface $translator,
  30.         EntityManagerInterface $em,
  31.         Geolocation $geolocation,
  32.         RequestStack $requestStack
  33.     )
  34.     {
  35.         $this->em           $em;
  36.         $this->translator   $translator;
  37.         $this->geolocation  $geolocation->geolocation();
  38.         $this->request      $requestStack->getCurrentRequest();
  39.     }
  40.     public function buildForm(FormBuilderInterface $builder, array $options): void
  41.     {
  42.         $hideExtra $options['hideExtraFields'];
  43.         $phoneRequired $options['phoneRequired'];
  44.         $portalSettingsId $options['portalSettingsId'];
  45.         $isLeading $options['isLeading'];
  46.         $isEnglishLead $options['isEnglishLead'];
  47.         $builder
  48.             ->remove('username')
  49.             ->add(
  50.                 'firstName',
  51.                 $hideExtra HiddenType::class : TextType::class,
  52.                 [
  53.                     'label'       => $this->translator->trans('form.login.firstName') .  '*',
  54.                     'constraints' => [
  55.                         new NotBlank()
  56.                     ]
  57.                 ]
  58.             )
  59.             ->add(
  60.                 'lastName',
  61.                 $hideExtra HiddenType::class : TextType::class,
  62.                 [
  63.                     'label'       => $this->translator->trans('form.login.lastName') .  '*'
  64.                 ]
  65.             )
  66.             ->add(
  67.                 'email',
  68.                 EmailType::class,
  69.                 [
  70.                     'label'       => $this->translator->trans('form.login.email') .  '*',
  71.                     'constraints' => [
  72.                         new NotBlank()
  73.                     ]
  74.                 ]
  75.             )
  76.             ->add(
  77.                 'phoneNumber',
  78.                 $hideExtra || $options['phoneHidden'] ? HiddenType::class : TelType::class,
  79.                 [
  80.                     'label'    =>
  81.                         $this->translator->trans('form.login.phoneNumber') .
  82.                             ($isLeading
  83.                                 ? (!$isEnglishLead ? ($phoneRequired '*' '**') : ' (optional)')
  84.                                 : ($phoneRequired '' ' ' $this->translator->trans('form.login.optional'))
  85.                             ),
  86.                     'required' => (bool)$phoneRequired
  87.                 ]
  88.             )
  89.             ->add(
  90.                 'position',
  91.                 EntityType::class,
  92.                 array(
  93.                     'class'         => UserPosition::class,
  94.                     'label'         => $this->translator->trans('form.registration.position') . ($isLeading '*' ''),
  95.                     'multiple'      => false,
  96.                     'required'      => false,
  97.                     'choice_label'  => 'name',
  98.                     'attr'          => ['class' => 'form-control'],
  99.                     'query_builder' => function (EntityRepository $er) use ($builder$portalSettingsId) {
  100.                         return $er->createQueryBuilder('p')
  101.                             ->leftJoin('p.portalSettings''portal')
  102.                             ->where('portal.id = :portalId')
  103.                             ->setParameter('portalId'$portalSettingsId);
  104.                     }
  105.                 )
  106.             )
  107.             ->add('password',
  108.                 PasswordType::class,
  109.                 [
  110.                     'required' => false
  111.                 ]
  112.             );
  113.         if ($options['requiredNPWZ'] == true)
  114.         {
  115.             $builder->add('npwz'TextType::class, [
  116.                 'mapped' => false,
  117.                 'required' => true,
  118.                 'label' => 'NPWZ' . ($isLeading '*' '')
  119.             ]);
  120.         }
  121.         if ($options['is_from_application'] == true)
  122.         {
  123.             $builder->add('plainPassword',
  124.                 PasswordType::class,
  125.                 ['required' => false]
  126.             );
  127.         }
  128.         if ($options['is_uniqskills_portal'] == 'uniqskills_register' || $options['show_country'])
  129.         {
  130.             $builder->add('country',
  131.                 EntityType::class,
  132.                 [
  133.                     'class' => Country::class,
  134.                     'placeholder' => 'uniqskills.form.user.country',
  135.                     'empty_data' => false,
  136.                     'choice_label' => 'name',
  137.                     'label' => 'uniqskills.form.user.country',
  138.                     'data' => $this->getCountry(),
  139.                     'required' => false,
  140.                     'query_builder' => function (EntityRepository $er) {
  141.                         return $er->createQueryBuilder('c')
  142.                             ->orderBy('c.name''ASC');
  143.                     },
  144.                 ]
  145.             );
  146.         }
  147.     }
  148.     private function getCountry()
  149.     {
  150.         $countryName $this->request->getLocale() === 'en' 'United Kingdom' $this->checkClient('country');
  151.         return $this->em->getRepository(Country::class)
  152.             ->findOneBy(['name' => $countryName]);
  153.     }
  154.     private function checkClient($type)
  155.     {
  156.         $data $this->geolocation;
  157.         if (is_array($data) && array_key_exists($type$data))
  158.             return $data[$type];
  159.     }
  160.     public function configureOptions(OptionsResolver $resolver): void
  161.     {
  162.         $resolver->setDefaults([
  163.             'data_class'        => User::class,
  164.             'csrf_protection'   => true,
  165.             'phoneRequired'     => false,
  166.             'phoneHidden'       => false,
  167.             'hideExtraFields'   => false,
  168.             'is_uniqskills_portal' => false,
  169.             'portalSettingsId'     => null,
  170.             'show_country'         => false,
  171.             'is_from_application'  => false,
  172.             'requiredNPWZ'         => false,
  173.             'isLeading'            => false,
  174.             'isEnglishLead'        => false
  175.         ]);
  176.     }
  177.     public function getParent(): string
  178.     {
  179.         return 'FOS\UserBundle\Form\Type\RegistrationFormType';
  180.     }
  181.     public function getBlockPrefix(): string
  182.     {
  183.         return 'app_user_registration';
  184.     }
  185.     public function getName(): string
  186.     {
  187.         return $this->getBlockPrefix();
  188.     }
  189. }