userpicker: fix role type: adapt on both allowed types

This commit is contained in:
Julien Fastré 2021-12-15 22:05:55 +01:00
parent 46ecab24c2
commit 75dda5b999

View File

@ -16,6 +16,7 @@ use Chill\MainBundle\Entity\User;
use Chill\MainBundle\Repository\UserACLAwareRepositoryInterface; use Chill\MainBundle\Repository\UserACLAwareRepositoryInterface;
use Chill\MainBundle\Repository\UserRepository; use Chill\MainBundle\Repository\UserRepository;
use Chill\MainBundle\Security\Authorization\AuthorizationHelper; use Chill\MainBundle\Security\Authorization\AuthorizationHelper;
use Chill\MainBundle\Templating\Entity\UserRender;
use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\Options; use Symfony\Component\OptionsResolver\Options;
@ -47,16 +48,20 @@ class UserPickerType extends AbstractType
protected UserRepository $userRepository; protected UserRepository $userRepository;
private UserRender $userRender;
public function __construct( public function __construct(
AuthorizationHelper $authorizationHelper, AuthorizationHelper $authorizationHelper,
TokenStorageInterface $tokenStorage, TokenStorageInterface $tokenStorage,
UserRepository $userRepository, UserRepository $userRepository,
UserACLAwareRepositoryInterface $userACLAwareRepository UserACLAwareRepositoryInterface $userACLAwareRepository,
UserRender $userRender
) { ) {
$this->authorizationHelper = $authorizationHelper; $this->authorizationHelper = $authorizationHelper;
$this->tokenStorage = $tokenStorage; $this->tokenStorage = $tokenStorage;
$this->userRepository = $userRepository; $this->userRepository = $userRepository;
$this->userACLAwareRepository = $userACLAwareRepository; $this->userACLAwareRepository = $userACLAwareRepository;
$this->userRender = $userRender;
} }
public function configureOptions(OptionsResolver $resolver) public function configureOptions(OptionsResolver $resolver)
@ -74,14 +79,19 @@ class UserPickerType extends AbstractType
->setAllowedTypes('having_permissions_group_flag', ['string', 'null']) ->setAllowedTypes('having_permissions_group_flag', ['string', 'null'])
->setDefault('class', User::class) ->setDefault('class', User::class)
->setDefault('placeholder', 'Choose an user') ->setDefault('placeholder', 'Choose an user')
->setDefault('choice_label', static function (User $u) { ->setDefault('choice_label', function (User $u) {
return $u->getUsername(); return $this->userRender->renderString($u, []);
}) })
->setDefault('scope', null) ->setDefault('scope', null)
->setAllowedTypes('scope', [Scope::class, 'array', 'null']) ->setAllowedTypes('scope', [Scope::class, 'array', 'null'])
->setNormalizer('choices', function (Options $options) { ->setNormalizer('choices', function (Options $options) {
if ($options['role'] instanceof Role) {
$role = $options['role']->getRole();
} else {
$role = $options['role'];
}
$users = $this->userACLAwareRepository $users = $this->userACLAwareRepository
->findUsersByReachedACL($options['role']->getRole(), $options['center'], $options['scope'], true); ->findUsersByReachedACL($role, $options['center'], $options['scope'], true);
if (null !== $options['having_permissions_group_flag']) { if (null !== $options['having_permissions_group_flag']) {
return $this->userRepository return $this->userRepository