src/Form/UserType.php line 27

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\User;
  4. use App\Entity\Region;
  5. use Symfony\Component\Form\AbstractType;
  6. use Symfony\Component\Form\FormBuilderInterface;
  7. use Symfony\Component\OptionsResolver\OptionsResolver;
  8. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  9. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  10. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  11. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  12. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  13. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  14. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  15. use Symfony\Component\Validator\Constraints as Assert;
  16. use Symfony\Component\Validator\Constraints\Callback;
  17. use Symfony\Component\Validator\Context\ExecutionContextInterface;
  18. use Doctrine\ORM\EntityRepository;
  19. class UserType extends AbstractType
  20. {
  21.     public function buildForm(FormBuilderInterface $builder, array $options): void
  22.     {
  23.         $userActual $options['userActual'];
  24.         $listaRoles = [
  25.                     'Evaluador - Admisibilidad' => 'ROLE_EVALUADOR_ADM',
  26.                     'Evaluador - Individual' => 'ROLE_EVALUADOR_IND',
  27.                     'Evaluador - Colectivo' => 'ROLE_EVALUADOR_COL',
  28.                     'Supervisor - Postulaciones' => 'ROLE_SUPERVISOR_POS',
  29.                     'Administrador - Usuarios' => 'ROLE_ADMINISTRADOR_USU',
  30.                     'Administrador - Convocatorias' => 'ROLE_ADMINISTRADOR_CON',
  31.                     'Administrador - Postulaciones' => 'ROLE_ADMINISTRADOR_POS',
  32.                     // ROLES PUNTO DE CULTURA
  33.                     'Punto Cultura - Evaluador - Admisibilidad' => 'ROLE_PU_EVALUADOR_ADM',
  34.                     'Punto Cultura - Evaluador - Colectivo' => 'ROLE_PU_EVALUADOR_COL',
  35.                     'Punto Cultura - Evaluador - Selección' => 'ROLE_PU_EVALUADOR_SEL',
  36.                     'Punto Cultura - Supervisor - Postulaciones' => 'ROLE_PU_SUPERVISOR_POS',
  37.                     'Punto Cultura - Administrador - Convocatorias' => 'ROLE_PU_ADMINISTRADOR_CON',
  38.         ];
  39.         $builder
  40.         //->add('email')
  41.         ->add('email',EmailType::class,[
  42.             'required' => true,
  43.             'attr' => ['maxlength' => 64]
  44.             ]
  45.         )
  46.         ->add('nombres')
  47.         ->add('activo',CheckboxType::class,[
  48.             'required' => false,
  49.             'label'=>'¿Cuenta activa?',
  50.         ])
  51.         ->add('super_admin',CheckboxType::class,[
  52.             'required' => false,
  53.             'label'=>'Super Administrador',
  54.         ])
  55.         // ->add('password')
  56.         // ->add('region')
  57.         ->add('changePassword'CheckboxType::class, [
  58.             'mapped' => false,
  59.             'required' => false,
  60.             'label' => '¿Cambiar contraseña?',
  61.         ])
  62.         ->add('plainPassword'RepeatedType::class, [
  63.             'type' => PasswordType::class,
  64.             'mapped' => false,
  65.             'required' => true,
  66.             'invalid_message' => 'Las contraseñas deben coincidir.',
  67.             'first_options'  => ['label' => 'Contraseña'],
  68.             'second_options' => ['label' => 'Repetir Contraseña'],
  69.             'constraints' => [
  70.                 new Callback(function ($valueExecutionContextInterface $context) {
  71.                     $form $context->getRoot();
  72.                     $changePassword $form->get('changePassword')->getData();
  73.                     if ($changePassword) {
  74.                         if (empty($value)) {
  75.                             $context->buildViolation('La contraseña no puede estar vacía.')
  76.                                 ->atPath('first')
  77.                                 ->addViolation();
  78.                         } elseif (strlen($value) < 6) {
  79.                             $context->buildViolation('La contraseña debe tener al menos 6 caracteres.')
  80.                                 ->atPath('first')
  81.                                 ->addViolation();
  82.                         }
  83.                     }
  84.                 }),
  85.             ],
  86.         ]);
  87.         if(!$userActual->isSuperAdmin()){
  88.             $listaRoles = [
  89.                 'Evaluador - Admisibilidad' => 'ROLE_EVALUADOR_ADM',
  90.                 'Evaluador - Individual' => 'ROLE_EVALUADOR_IND',
  91.                 'Evaluador - Colectivo' => 'ROLE_EVALUADOR_COL',
  92.                 'Supervisor - Postulaciones' => 'ROLE_SUPERVISOR_POS',
  93.                 // ROLES PUNTO DE CULTURA
  94.                 'Punto Cultura - Evaluador - Admisibilidad' => 'ROLE_PU_EVALUADOR_ADM',
  95.                 'Punto Cultura - Evaluador - Colectivo' => 'ROLE_PU_EVALUADOR_COL',
  96.                 'Punto Cultura - Evaluador - Selección' => 'ROLE_PU_EVALUADOR_SEL',
  97.                 'Punto Cultura - Supervisor - Postulaciones' => 'ROLE_PU_SUPERVISOR_POS',
  98.             ];
  99.             $builder->add('regiones'EntityType::class,[
  100.                 'class' => Region::class,
  101.                 'choice_label' => 'nombre',
  102.                 'multiple' => true,
  103.                 'expanded' => true,
  104.                 'query_builder' => function (EntityRepository $er) use ($userActual) {
  105.                     return $er->createQueryBuilder('r')
  106.                         ->select('r')
  107.                         ->leftjoin('r.usuarios''u')
  108.                         ->addSelect('u')
  109.                         ->where('u.id = :userId')
  110.                         ->setParameter('userId'$userActual->getId());
  111.                 }
  112.                 ]);
  113.         } else {
  114.             $builder->add('regiones'EntityType::class, [
  115.                 'class' => Region::class,
  116.                 'choice_label' => 'nombre',
  117.                 'multiple' => true,
  118.                 'expanded' => true,
  119.                 'query_builder' => function (EntityRepository $er) {
  120.                     return $er->createQueryBuilder('r')
  121.                             ->orderBy('r.orden''ASC');
  122.                 },
  123.             ]);
  124.         }
  125.         $builder
  126.         ->add('rolesValue',ChoiceType::class,[
  127.             'mapped' => true,
  128.             'required' => true,
  129.             'expanded'  => true,
  130.             'multiple' => true,
  131.             'choices'  => $listaRoles,
  132.             ])
  133.         ->add('save'SubmitType::class);
  134.     }
  135.     public function configureOptions(OptionsResolver $resolver): void
  136.     {
  137.         $resolver->setDefaults([
  138.             'data_class' => User::class,
  139.             //'validation_groups' => false,
  140.             'empty_data'null,
  141.             'csrf_protection' => true,
  142.             // the name of the hidden HTML field that stores the token
  143.             'csrf_field_name' => '_token',
  144.             // an arbitrary string used to generate the value of the token
  145.             // using a different string for each form improves its security
  146.             'csrf_token_id'   => 'task_item',
  147.             'userActual' => User::class,
  148.         ]);
  149.     }
  150. }