You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
4.4KB

  1. <?php
  2. namespace Lc\SovBundle\Controller\User;
  3. use EasyCorp\Bundle\EasyAdminBundle\Collection\EntityCollection;
  4. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  5. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  6. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  7. use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext;
  8. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeCrudActionEvent;
  9. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityDeletedEvent;
  10. use EasyCorp\Bundle\EasyAdminBundle\Exception\ForbiddenActionException;
  11. use EasyCorp\Bundle\EasyAdminBundle\Exception\InsufficientEntityPermissionException;
  12. use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
  13. use EasyCorp\Bundle\EasyAdminBundle\Field\EmailField;
  14. use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
  15. use EasyCorp\Bundle\EasyAdminBundle\Security\Permission;
  16. use Lc\SovBundle\Container\User\UserContainer;
  17. use Lc\SovBundle\Controller\AbstractAdminController;
  18. use Lc\SovBundle\Definition\ActionDefinition;
  19. use Lc\SovBundle\Definition\ApplicationDefinition;
  20. use Lc\SovBundle\Definition\RolesDefinition;
  21. use Lc\SovBundle\Definition\RolesDefinitionInterface;
  22. use Lc\SovBundle\Doctrine\EntityManager;
  23. use Lc\SovBundle\Factory\User\UserFactory;
  24. use Lc\SovBundle\Translation\TranslatorAdmin;
  25. use Symfony\Component\HttpFoundation\RequestStack;
  26. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  27. abstract class UserAdminController extends AbstractAdminController
  28. {
  29. public function buildIndexActions(Actions $actions): void
  30. {
  31. parent::buildIndexActions($actions); // TODO: Change the autogenerated stub
  32. $actions->add(Crud::PAGE_INDEX, $this->getSwitchUserAction());
  33. }
  34. public function getSwitchUserAction(): Action
  35. {
  36. $switchAction = Action::new(
  37. ActionDefinition::SWITCH_USER,
  38. $this->get(TranslatorAdmin::class)->transAction(ActionDefinition::SWITCH_USER),
  39. 'fa fa-fw fa-user-secret'
  40. )
  41. ->linkToCrudAction(ActionDefinition::SWITCH_USER)
  42. ->setLabel($this->get(TranslatorAdmin::class)->transAction(ActionDefinition::SWITCH_USER))
  43. ->setCssClass('in-dropdown text-info action-confirm action_switch');
  44. return $switchAction;
  45. }
  46. public function overrideEntitiesActions(?EntityCollection $entities, string $pageName): void
  47. {
  48. parent::overrideEntitiesActions($entities, $pageName); // TODO: Change the autogenerated stub
  49. foreach ($entities as $entity) {
  50. foreach ($entity->getActions() as $action) {
  51. if ($action->getName() == ActionDefinition::SWITCH_USER) {
  52. $url = $this->generateUrl(
  53. $this->getParameter('lc_sov.homepage_route'),
  54. array('_switch_user' => $entity->getInstance()->getEmail())
  55. );
  56. $action->setLinkUrl($url);
  57. }
  58. }
  59. }
  60. }
  61. public function configureFields(string $pageName): iterable
  62. {
  63. return [
  64. EmailField::new('email'),
  65. TextField::new('lastname'),
  66. TextField::new('firstname'),
  67. ChoiceField::new('roles')
  68. ->allowMultipleChoices()
  69. ->autocomplete()
  70. ->setChoices($this->getUserContainer()->getRoleDefinition()->getRolesList())
  71. ];
  72. }
  73. public function createEntity(string $entityFqcn)
  74. {
  75. return $this->get(UserContainer::class)->getFactory()->create();
  76. }
  77. public function delete(AdminContext $context)
  78. {
  79. $eaBeforeCrudActionEventDelete = $this->eaBeforeCrudActionEventDelete($context);
  80. if(!is_null($eaBeforeCrudActionEventDelete)){
  81. return $eaBeforeCrudActionEventDelete;
  82. }
  83. $entityInstance = $context->getEntity()->getInstance();
  84. $event = new BeforeEntityDeletedEvent($entityInstance);
  85. $this->container->get('event_dispatcher')->dispatch($event);
  86. if ($event->isPropagationStopped()) {
  87. return $event->getResponse();
  88. }
  89. $entityInstance = $event->getEntityInstance();
  90. ApplicationDefinition::getSubscribedContainerServices();
  91. $metas = $this->getEntityManager()->getMetadataFactory()->getAllMetadata();
  92. foreach ($metas as $meta) {
  93. $entities[] = $meta->getName();
  94. }
  95. foreach ($entities as $entity){
  96. dump($entity);
  97. dump($context->getCrudControllers());
  98. }
  99. die();
  100. }
  101. }