src/Admin/Sonata/SonataUserAdmin.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\Admin\Sonata;
  3. use App\Admin\DefaultAdmin;
  4. use Sonata\AdminBundle\Datagrid\DatagridMapper;
  5. use Sonata\AdminBundle\Datagrid\ListMapper;
  6. use Sonata\AdminBundle\FieldDescription\FieldDescriptionInterface;
  7. use Sonata\AdminBundle\Form\FormMapper;
  8. use Sonata\AdminBundle\Show\ShowMapper;
  9. use Sonata\UserBundle\Form\Type\RolesMatrixType;
  10. use Sonata\UserBundle\Model\UserManagerInterface;
  11. use Sonata\UserBundle\Security\RolesBuilder\ExpandableRolesBuilderInterface;
  12. use Symfony\Component\Form\Extension\Core\Type\TextType;
  13. class SonataUserAdmin extends DefaultAdmin
  14. {
  15.     protected UserManagerInterface          $userManager;
  16.     protected                               $classnameLabel 'user';
  17.     private ExpandableRolesBuilderInterface $rolesBuilder;
  18.     public function __construct(UserManagerInterface            $userManager,
  19.                                 ExpandableRolesBuilderInterface $rolesBuilder,
  20.                                 ?string                         $code null,
  21.                                 ?string                         $class null,
  22.                                 ?string                         $baseControllerName null)
  23.     {
  24.         parent::__construct($code$class$baseControllerName);
  25.         $this->userManager $userManager;
  26.         $this->rolesBuilder $rolesBuilder;
  27.     }
  28.     protected function preUpdate(object $object): void
  29.     {
  30.         $this->userManager->updatePassword($object);
  31.     }
  32.     protected function configureFormOptions(array &$formOptions): void
  33.     {
  34.         $formOptions['validation_groups'] = ['Default'];
  35.         if (!$this->hasSubject() || null === $this->getSubject()->getId()) {
  36.             $formOptions['validation_groups'][] = 'Registration';
  37.         } else {
  38.             $formOptions['validation_groups'][] = 'Profile';
  39.         }
  40.     }
  41.     protected function configureListFields(ListMapper $list): void
  42.     {
  43.         $list
  44.             ->addIdentifier('username')
  45.             ->add('email')
  46.             ->add('enabled'null, ['editable' => true])
  47.             ->add('createdAt');
  48.         if ($this->isGranted('ROLE_ALLOWED_TO_SWITCH')) {
  49.             $list
  50.                 ->add('impersonating'FieldDescriptionInterface::TYPE_STRING, [
  51.                     'virtual_field' => true,
  52.                     'template'      => '@SonataUser/Admin/Field/impersonating.html.twig',
  53.                 ]);
  54.         }
  55.         $this->addListActions($list);
  56.     }
  57.     protected function configureDatagridFilters(DatagridMapper $filter): void
  58.     {
  59.         $filter
  60.             ->add('id')
  61.             ->add('username')
  62.             ->add('email');
  63.     }
  64.     protected function configureShowFields(ShowMapper $show): void
  65.     {
  66.         $show
  67.             ->add('username')
  68.             ->add('email');
  69.     }
  70.     protected function configureFormFields(FormMapper $form): void
  71.     {
  72.         $form
  73.             ->with('general', ['class' => 'col-md-4'])
  74.             ->add('username')
  75.             ->add('email')
  76.             ->add('plainPassword'TextType::class, [
  77.                 'required' => (!$this->hasSubject() || null === $this->getSubject()->getId()),
  78.             ])
  79.             ->add('enabled'null)
  80.             ->end()
  81.             ->end();
  82.         $form->tab('Security')
  83.             ->add('roles'RolesMatrixType::class, [
  84.                 'expanded' => true,
  85.                 'multiple' => true,
  86.             ])
  87.             ->end();
  88.     }
  89.     protected function configureExportFields(): array
  90.     {
  91.         // Avoid sensitive properties to be exported.
  92.         return array_filter(
  93.             parent::configureExportFields(),
  94.             static fn(string $v): bool => !\in_array($v, ['password''salt'], true)
  95.         );
  96.     }
  97. }