src/Form/UserType.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\User;
  4. use App\Entity\Organization;
  5. use App\Entity\UserType as EntityUserType;
  6. use App\Repository\UserTypeRepository;
  7. use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\ChoiceFilterType;
  8. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  9. use Symfony\Component\Form\AbstractType;
  10. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  11. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  12. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  13. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  14. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  15. use Symfony\Component\Form\FormBuilderInterface;
  16. use Symfony\Component\OptionsResolver\OptionsResolver;
  17. use Symfony\Component\Security\Core\Security;
  18. use Symfony\Component\Validator\Constraints\Length;
  19. use Symfony\Component\Validator\Constraints\NotBlank;
  20. use Symfony\Contracts\Translation\TranslatorInterface;
  21. class UserType extends AbstractType
  22. {
  23.     /**
  24.      * @var Security
  25.      */
  26.     private TranslatorInterface $translator;
  27.     private Security $security;
  28.     private User $user;
  29.     public function __construct(Security $securityTranslatorInterface $translator)
  30.     {
  31.         $this->translator $translator;
  32.         $this->security $security;
  33.         $this->user $security->getUser() ?? new User();
  34.     }
  35.     public function buildForm(FormBuilderInterface $builder, array $options)
  36.     {
  37.             // dd( $options );
  38.         $_ $this->translator;
  39.         $organization $this->security->getUser()?->getOrganization();
  40.         /* repos */
  41.         $qbUserType = function (UserTypeRepository $repository) {
  42.             $queryBuilder $repository->createQueryBuilder('ut')
  43.                 ->orderBy('ut.type''ASC');
  44.             return $queryBuilder;
  45.         };
  46.         $roles = [
  47.             'Usuario' => 'ROLE_USER',
  48.             'Encargado' => 'ROLE_MANAGER'];
  49.         $adminRoles = [
  50.             'Tester' => 'ROLE_TESTER',
  51.             'Administrador' => 'ROLE_ADMIN'];
  52.         $this->security->isGranted('ROLE_ADMIN') and
  53.             $roles array_merge$roles$adminRoles );
  54.         /* builder */
  55.         $builder
  56.             ->add('email'EmailType::class, [
  57.                 'required' => true,
  58.                 'attr' => [
  59.                     'autocomplete' => 'off',
  60.                     'placeholder' => 'select.email'
  61.                 ],
  62.             ])
  63.             ->add('secondEmail'EmailType::class, [
  64.                 'attr' => array(
  65.                     'class' => 'form-control',
  66.                     'placeHolder' => $_->trans('select.alternativeEmail'),
  67.                 ),
  68.                 'required' => false,
  69.                 'label' => "User.alternativeEmail",
  70.             ])
  71.             ->add('enabled'CheckboxType::class, [
  72.                     'required' => false,
  73.                     'label' => 'User.enabled'
  74.             ])
  75.             ->add('demo'null, ['required' => false])
  76.             ->add('roles'ChoiceType::class, [
  77.                 'attr' => [ 'class' => 'selectize' ],
  78.                 'choice_translation_domain' => 'messages',
  79.                 'choices' => $roles,
  80.                 'label' => 'Roles',
  81.                 'multiple' => true,
  82.             ])
  83.             ->add('userType'EntityType::class, [/*{{{*/
  84.                 'attr' => [ 'class' => 'selectize' ],
  85.                 //'required' => true,
  86.                 'placeholder' => 'select.userType',
  87.                 'class' => EntityUserType::class,
  88.                 'query_builder' => $qbUserType,
  89.                 'label' => 'User type',
  90.             ])/*}}}*/
  91.             ->add('organization'EntityType::class, [/*{{{*/
  92.                 'disabled' => (!$this->user->isAdmin()),
  93.                 'class' => Organization::class,
  94.                 'label' => 'Form.organizationLabel',
  95.                 'attr' => [
  96.                     'class' => 'filters selectize','placeholder' => $_->trans('select.organization')
  97.                 ]
  98.             ])/*}}}*/
  99.             ->add('isOrganization'CheckboxType::class, [
  100.                 'required' => false,
  101.                 'label' => '',
  102.             ])
  103.             /* aca manda el formulario de profile entero */
  104.             ->add('profile'ProfileType::class )
  105.     ;
  106.     }
  107.     public function configureOptions(OptionsResolver $resolver)
  108.     {
  109.         $resolver->setDefaults([
  110.             'data_class' => User::class,
  111.         ]);
  112.     }
  113. }