<?php
namespace App\Form;
use App\Entity\User;
use App\Entity\Organization;
use App\Entity\UserType as EntityUserType;
use App\Repository\UserTypeRepository;
use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\ChoiceFilterType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Contracts\Translation\TranslatorInterface;
class UserType extends AbstractType
{
/**
* @var Security
*/
private TranslatorInterface $translator;
private Security $security;
private User $user;
public function __construct(Security $security, TranslatorInterface $translator)
{
$this->translator = $translator;
$this->security = $security;
$this->user = $security->getUser() ?? new User();
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
// dd( $options );
$_ = $this->translator;
$organization = $this->security->getUser()?->getOrganization();
/* repos */
$qbUserType = function (UserTypeRepository $repository) {
$queryBuilder = $repository->createQueryBuilder('ut')
->orderBy('ut.type', 'ASC');
return $queryBuilder;
};
$roles = [
'Usuario' => 'ROLE_USER',
'Encargado' => 'ROLE_MANAGER'];
$adminRoles = [
'Tester' => 'ROLE_TESTER',
'Administrador' => 'ROLE_ADMIN'];
$this->security->isGranted('ROLE_ADMIN') and
$roles = array_merge( $roles, $adminRoles );
/* builder */
$builder
->add('email', EmailType::class, [
'required' => true,
'attr' => [
'autocomplete' => 'off',
'placeholder' => 'select.email'
],
])
->add('secondEmail', EmailType::class, [
'attr' => array(
'class' => 'form-control',
'placeHolder' => $_->trans('select.alternativeEmail'),
),
'required' => false,
'label' => "User.alternativeEmail",
])
->add('enabled', CheckboxType::class, [
'required' => false,
'label' => 'User.enabled'
])
->add('demo', null, ['required' => false])
->add('roles', ChoiceType::class, [
'attr' => [ 'class' => 'selectize' ],
'choice_translation_domain' => 'messages',
'choices' => $roles,
'label' => 'Roles',
'multiple' => true,
])
->add('userType', EntityType::class, [/*{{{*/
'attr' => [ 'class' => 'selectize' ],
//'required' => true,
'placeholder' => 'select.userType',
'class' => EntityUserType::class,
'query_builder' => $qbUserType,
'label' => 'User type',
])/*}}}*/
->add('organization', EntityType::class, [/*{{{*/
'disabled' => (!$this->user->isAdmin()),
'class' => Organization::class,
'label' => 'Form.organizationLabel',
'attr' => [
'class' => 'filters selectize','placeholder' => $_->trans('select.organization')
]
])/*}}}*/
->add('isOrganization', CheckboxType::class, [
'required' => false,
'label' => '',
])
/* aca manda el formulario de profile entero */
->add('profile', ProfileType::class )
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
}