From 92ed636499fe6d0c2df93a1bd01fa4de24fec742 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Mon, 17 May 2021 16:44:01 +0200 Subject: [PATCH] backports murph-skeleton --- core/Controller/User/UserAdminController.php | 155 +++++++++--------- core/Resources/translations/messages.fr.yaml | 2 + .../Resources/views/admin/crud/edit.html.twig | 35 ++-- .../views/admin/crud/index.html.twig | 18 ++ core/Resources/views/admin/crud/new.html.twig | 18 ++ .../Resources/views/admin/crud/show.html.twig | 18 ++ .../views/user/user_admin/edit.html.twig | 63 +------ .../views/user/user_admin/index.html.twig | 73 --------- .../views/user/user_admin/new.html.twig | 39 ----- .../views/user/user_admin/show.html.twig | 52 ------ 10 files changed, 156 insertions(+), 317 deletions(-) delete mode 100644 core/Resources/views/user/user_admin/index.html.twig delete mode 100644 core/Resources/views/user/user_admin/new.html.twig delete mode 100644 core/Resources/views/user/user_admin/show.html.twig diff --git a/core/Controller/User/UserAdminController.php b/core/Controller/User/UserAdminController.php index 6096cc0..529a622 100644 --- a/core/Controller/User/UserAdminController.php +++ b/core/Controller/User/UserAdminController.php @@ -2,105 +2,76 @@ namespace App\Core\Controller\User; -use App\Core\Controller\Admin\AdminController; +use App\Core\Controller\Admin\Crud\CrudController; +use App\Core\Crud\CrudConfiguration; +use App\Core\Crud\Field; +use App\Core\Entity\EntityInterface; use App\Core\Event\Account\PasswordRequestEvent; -use App\Core\Factory\UserFactory as EntityFactory; -use App\Core\Form\UserType as EntityType; +use App\Core\Factory\UserFactory as Factory; +use App\Core\Form\UserType as Type; use App\Core\Manager\EntityManager; use App\Entity\User as Entity; use App\Repository\UserRepositoryQuery as RepositoryQuery; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\Routing\Annotation\Route; -/** - * @Route("/admin/user") - */ -class UserAdminController extends AdminController +class UserAdminController extends CrudController { /** - * @Route("/{page}", name="admin_user_index", requirements={"page": "\d+"}) + * @Route("/admin/user/{page}", name="admin_user_index", methods={"GET"}, requirements={"page":"\d+"}) */ - public function index(int $page = 1, RepositoryQuery $query, Request $request): Response + public function index(int $page = 1, RepositoryQuery $query, Request $request, Session $session): Response { - $pager = $query->paginate($page); - - return $this->render('@Core/user/user_admin/index.html.twig', [ - 'pager' => $pager, - ]); + return $this->doIndex($page, $query, $request, $session); } /** - * @Route("/new", name="admin_user_new") + * @Route("/admin/user/new", name="admin_user_new", methods={"GET", "POST"}) */ - public function new( - EntityFactory $factory, - EntityManager $entityManager, - Request $request - ): Response { + public function new(Factory $factory, EntityManager $entityManager, Request $request): Response + { $entity = $factory->create($this->getUser()); - $form = $this->createForm(EntityType::class, $entity); - if ($request->isMethod('POST')) { - $form->handleRequest($request); - - if ($form->isValid()) { - $entityManager->create($entity); - $this->addFlash('success', 'The data has been saved.'); - - return $this->redirectToRoute('admin_user_edit', [ - 'entity' => $entity->getId(), - ]); - } - $this->addFlash('warning', 'The form is not valid.'); - } - - return $this->render('@Core/user/user_admin/new.html.twig', [ - 'form' => $form->createView(), - 'entity' => $entity, - ]); + return $this->doNew($factory->create(), $entityManager, $request); } /** - * @Route("/edit/{entity}", name="admin_user_edit") - */ - public function edit(Entity $entity, EntityManager $entityManager, Request $request): Response - { - $form = $this->createForm(EntityType::class, $entity); - - if ($request->isMethod('POST')) { - $form->handleRequest($request); - - if ($form->isValid()) { - $entityManager->update($entity); - $this->addFlash('success', 'The data has been saved.'); - - return $this->redirectToRoute('admin_user_edit', [ - 'entity' => $entity->getId(), - ]); - } - $this->addFlash('warning', 'The form is not valid.'); - } - - return $this->render('@Core/user/user_admin/edit.html.twig', [ - 'form' => $form->createView(), - 'entity' => $entity, - ]); - } - - /** - * @Route("/show/{entity}", name="admin_user_show") + * @Route("/admin/user/show/{entity}", name="admin_user_show", methods={"GET"}) */ public function show(Entity $entity): Response { - return $this->render('@Core/user/user_admin/show.html.twig', [ - 'entity' => $entity, - ]); + return $this->doShow($entity); } /** - * @Route("/resetting_request/{entity}", name="admin_user_resetting_request", methods={"POST"}) + * @Route("/admin/user/filter", name="admin_user_filter", methods={"GET"}) + */ + public function filter(Session $session): Response + { + return $this->doFilter($session); + } + + /** + * @Route("/admin/user/edit/{entity}", name="admin_user_edit", methods={"GET", "POST"}) + */ + public function edit(Entity $entity, EntityManager $entityManager, Request $request): Response + { + return $this->doEdit($entity, $entityManager, $request); + } + + /** + * @Route("/admin/user/delete/{entity}", name="admin_user_delete", methods={"DELETE"}) + */ + public function delete(Entity $entity, EntityManager $entityManager, Request $request): Response + { + return $this->doDelete($entity, $entityManager, $request); + } + + /** + * @Route("/admin/user/resetting_request/{entity}", name="admin_user_resetting_request", methods={"POST"}) */ public function requestResetting(Entity $entity, EventDispatcherInterface $eventDispatcher, Request $request): Response { @@ -115,21 +86,43 @@ class UserAdminController extends AdminController ]); } - /** - * @Route("/delete/{entity}", name="admin_user_delete", methods={"DELETE"}) - */ - public function delete(Entity $entity, EntityManager $entityManager, Request $request): Response + protected function getConfiguration(): CrudConfiguration { - if ($this->isCsrfTokenValid('delete'.$entity->getId(), $request->request->get('_token'))) { - $entityManager->delete($entity); + return CrudConfiguration::create() + ->setPageTitle('index', 'Users') + ->setPageTitle('edit', '{username}') + ->setPageTitle('new', 'New user') + ->setPageTitle('show', '{username}') - $this->addFlash('success', 'The data has been removed.'); - } + ->setPageRoute('index', 'admin_user_index') + ->setPageRoute('new', 'admin_user_new') + ->setPageRoute('edit', 'admin_user_edit') + ->setPageRoute('show', 'admin_user_show') + ->setPageRoute('delete', 'admin_user_delete') + ->setPageRoute('filter', 'admin_user_filter') - return $this->redirectToRoute('admin_user_index'); + ->setForm('edit', Type::class, []) + ->setForm('new', Type::class) + + ->setView('show_entity', '@Core/user/user_admin/_show.html.twig') + ->setView('edit', '@Core/user/user_admin/edit.html.twig') + + ->setDefaultSort('index', 'username') + + ->setField('index', 'E-mail', Field\TextField::class, [ + 'property' => 'email', + 'sort' => ['email', '.email'], + 'attr' => ['class' => 'miw-200'], + ]) + ->setField('index', 'Display name', Field\TextField::class, [ + 'property' => 'displayName', + 'sort' => ['displayName', '.displayName'], + 'attr' => ['class' => 'miw-200'], + ]) + ; } - public function getSection(): string + protected function getSection(): string { return 'user'; } diff --git a/core/Resources/translations/messages.fr.yaml b/core/Resources/translations/messages.fr.yaml index 0b351a1..2398d00 100644 --- a/core/Resources/translations/messages.fr.yaml +++ b/core/Resources/translations/messages.fr.yaml @@ -50,6 +50,8 @@ "Above": "En dessous" "Position": "Position" "E-mail": "E-mail" +"Permissions": "Permissions" +"Send a recovery email": "Envoyer un mail de récupération" "Display name": "Nom d'affichage" "Administrator": "Administrateur⋅trice" "Writer": "Rédacteur⋅trice" diff --git a/core/Resources/views/admin/crud/edit.html.twig b/core/Resources/views/admin/crud/edit.html.twig index b562991..276462d 100644 --- a/core/Resources/views/admin/crud/edit.html.twig +++ b/core/Resources/views/admin/crud/edit.html.twig @@ -32,32 +32,35 @@ {{ configuration.actionTitle('edit', 'save', 'Save')|trans|build_string(entity) }} - {% block dropdownMenu %} + {% if header_actions_dropdown_menu is not defined %} + {% set header_actions_dropdown_menu = '' %} + {% endif %} + + {% if configuration.action('edit', 'delete', true) %} + {% set item %} + + {% endset %} + + {% set header_actions_dropdown_menu = header_actions_dropdown_menu ~ item %} + {% endif %} + + {% block header_actions_dropdown %} {% set menu = '' %} - {% if configuration.action('edit', 'delete', true) %} - {% set item %} - - {% endset %} - - {% set menu = menu ~ item %} - {% endif %} - - {% if menu %} + {% if header_actions_dropdown_menu %} - {{ menu|raw }} + {% endif %} {% endblock %} - {% endblock %} diff --git a/core/Resources/views/admin/crud/index.html.twig b/core/Resources/views/admin/crud/index.html.twig index 0ec4910..06ea73c 100644 --- a/core/Resources/views/admin/crud/index.html.twig +++ b/core/Resources/views/admin/crud/index.html.twig @@ -19,6 +19,24 @@ {{ configuration.actionTitle('index', 'new', 'New')|trans }} {% endif %} + + {% if header_actions_dropdown_menu is not defined %} + {% set header_actions_dropdown_menu = '' %} + {% endif %} + + {% block header_actions_dropdown %} + {% if header_actions_dropdown_menu %} + + + + {% endif %} + {% endblock %} {% endblock %} diff --git a/core/Resources/views/admin/crud/new.html.twig b/core/Resources/views/admin/crud/new.html.twig index d4c7b5b..a49648c 100644 --- a/core/Resources/views/admin/crud/new.html.twig +++ b/core/Resources/views/admin/crud/new.html.twig @@ -24,6 +24,24 @@ {{ configuration.actionTitle('new', 'save', 'Save')|trans|build_string(entity) }} + + {% if header_actions_dropdown_menu is not defined %} + {% set header_actions_dropdown_menu = '' %} + {% endif %} + + {% block header_actions_dropdown %} + {% if header_actions_dropdown_menu %} + + + + {% endif %} + {% endblock %} {% endblock %} diff --git a/core/Resources/views/admin/crud/show.html.twig b/core/Resources/views/admin/crud/show.html.twig index 2eb5ea7..f58df04 100644 --- a/core/Resources/views/admin/crud/show.html.twig +++ b/core/Resources/views/admin/crud/show.html.twig @@ -27,6 +27,24 @@ {{ configuration.actionTitle('show', 'edit', 'Edit')|trans|build_string(entity) }} {% endif %} + + {% if header_actions_dropdown_menu is not defined %} + {% set header_actions_dropdown_menu = '' %} + {% endif %} + + {% block header_actions_dropdown %} + {% if header_actions_dropdown_menu %} + + + + {% endif %} + {% endblock %} {% endblock %} diff --git a/core/Resources/views/user/user_admin/edit.html.twig b/core/Resources/views/user/user_admin/edit.html.twig index 9f9b819..932be38 100644 --- a/core/Resources/views/user/user_admin/edit.html.twig +++ b/core/Resources/views/user/user_admin/edit.html.twig @@ -1,62 +1,13 @@ -{% extends '@Core/admin/layout.html.twig' %} - -{% block title %}{{ 'Users'|trans }} - {{ parent() }}{% endblock %} +{% extends '@Core/admin/crud/edit.html.twig' %} {% block body %} -
-
-

{{ entity.displayName }}

+ {% set header_actions_dropdown_menu %} + + {% endset %} -
-
- - - {{ 'Back to the list'|trans }} - - - - {{ 'Show'|trans }} - - - - - - -
-
-
-
- -
-
-
-
- {{ include('@Core/user/user_admin/_form.html.twig') }} -
-
-
- - {{ form_rest(form) }} -
- -
- - -
+ {{ parent() }}
diff --git a/core/Resources/views/user/user_admin/index.html.twig b/core/Resources/views/user/user_admin/index.html.twig deleted file mode 100644 index 7c2cdde..0000000 --- a/core/Resources/views/user/user_admin/index.html.twig +++ /dev/null @@ -1,73 +0,0 @@ -{% extends '@Core/admin/layout.html.twig' %} - -{% block title %}{{ 'Users'|trans }} - {{ parent() }}{% endblock %} - -{% block body %} -
-
-

{{ 'Users'|trans }}

- - -
- - {{ knp_pagination_render(pager) }} -
- -
- - - - - - - - - {% for item in pager %} - {% set edit = path('admin_user_edit', {entity: item.id}) %} - {% set show = path('admin_user_show', {entity: item.id}) %} - - - - - - {% else %} - - - - {% endfor %} - -
{{ 'Username'|trans }}{{ 'Actions'|trans }}
- - {{ item.displayName }} - - - {{ item.email }} - - - - - - - - - - -
-
- -
-
- {{ 'No result'|trans }} -
-
-
-{% endblock %} diff --git a/core/Resources/views/user/user_admin/new.html.twig b/core/Resources/views/user/user_admin/new.html.twig deleted file mode 100644 index 47e519b..0000000 --- a/core/Resources/views/user/user_admin/new.html.twig +++ /dev/null @@ -1,39 +0,0 @@ -{% extends '@Core/admin/layout.html.twig' %} - -{% block title %}{{ 'Users'|trans }} - {{ parent() }}{% endblock %} - -{% block body %} -
-
-

{{ 'New'|trans }}

- -
-
- - - - {{ 'Back to the list'|trans }} - - - -
-
-
-
- -
-
-
-
- {{ include('@Core/user/user_admin/_form.html.twig') }} -
-
-
- - {{ form_rest(form) }} -
-{% endblock %} diff --git a/core/Resources/views/user/user_admin/show.html.twig b/core/Resources/views/user/user_admin/show.html.twig deleted file mode 100644 index 4c1cd52..0000000 --- a/core/Resources/views/user/user_admin/show.html.twig +++ /dev/null @@ -1,52 +0,0 @@ -{% extends '@Core/admin/layout.html.twig' %} - -{% block title %}{{ 'Users'|trans }} - {{ parent() }}{% endblock %} - -{% block body %} -
- -
- -
-
-
    -
  • - Titre - - {{ entity.displayName }} -
  • -
  • - Sous-titre - - {{ entity.email }} -
  • -
  • - Permissions - - {{ entity.roles|join(', ')|replace({ - ROLE_USER: 'Utilisateur⋅trice', - ROLE_WRITER: 'Rédacteur⋅trice', - ROLE_ADMIN: 'Administrateur⋅trice', - }) }} -
  • -
-
-
-{% endblock %}