refactor crud of User using CrudController
This commit is contained in:
parent
120b76780e
commit
6eb8a73914
|
@ -2,105 +2,76 @@
|
||||||
|
|
||||||
namespace App\Core\Controller\User;
|
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\Event\Account\PasswordRequestEvent;
|
||||||
use App\Core\Factory\UserFactory as EntityFactory;
|
use App\Core\Factory\UserFactory as Factory;
|
||||||
use App\Core\Form\UserType as EntityType;
|
use App\Core\Form\UserType as Type;
|
||||||
use App\Core\Manager\EntityManager;
|
use App\Core\Manager\EntityManager;
|
||||||
use App\Entity\User as Entity;
|
use App\Entity\User as Entity;
|
||||||
use App\Repository\UserRepositoryQuery as RepositoryQuery;
|
use App\Repository\UserRepositoryQuery as RepositoryQuery;
|
||||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
use Symfony\Component\HttpFoundation\Session\Session;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Annotation\Route;
|
||||||
|
|
||||||
/**
|
class UserAdminController extends CrudController
|
||||||
* @Route("/admin/user")
|
|
||||||
*/
|
|
||||||
class UserAdminController extends AdminController
|
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @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->doIndex($page, $query, $request, $session);
|
||||||
|
|
||||||
return $this->render('@Core/user/user_admin/index.html.twig', [
|
|
||||||
'pager' => $pager,
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Route("/new", name="admin_user_new")
|
* @Route("/admin/user/new", name="admin_user_new", methods={"GET", "POST"})
|
||||||
*/
|
*/
|
||||||
public function new(
|
public function new(Factory $factory, EntityManager $entityManager, Request $request): Response
|
||||||
EntityFactory $factory,
|
{
|
||||||
EntityManager $entityManager,
|
|
||||||
Request $request
|
|
||||||
): Response {
|
|
||||||
$entity = $factory->create($this->getUser());
|
$entity = $factory->create($this->getUser());
|
||||||
$form = $this->createForm(EntityType::class, $entity);
|
|
||||||
|
|
||||||
if ($request->isMethod('POST')) {
|
return $this->doNew($factory->create(), $entityManager, $request);
|
||||||
$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,
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Route("/edit/{entity}", name="admin_user_edit")
|
* @Route("/admin/user/show/{entity}", name="admin_user_show", methods={"GET"})
|
||||||
*/
|
|
||||||
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")
|
|
||||||
*/
|
*/
|
||||||
public function show(Entity $entity): Response
|
public function show(Entity $entity): Response
|
||||||
{
|
{
|
||||||
return $this->render('@Core/user/user_admin/show.html.twig', [
|
return $this->doShow($entity);
|
||||||
'entity' => $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
|
public function requestResetting(Entity $entity, EventDispatcherInterface $eventDispatcher, Request $request): Response
|
||||||
{
|
{
|
||||||
|
@ -115,21 +86,43 @@ class UserAdminController extends AdminController
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
protected function getConfiguration(): CrudConfiguration
|
||||||
* @Route("/delete/{entity}", name="admin_user_delete", methods={"DELETE"})
|
|
||||||
*/
|
|
||||||
public function delete(Entity $entity, EntityManager $entityManager, Request $request): Response
|
|
||||||
{
|
{
|
||||||
if ($this->isCsrfTokenValid('delete'.$entity->getId(), $request->request->get('_token'))) {
|
return CrudConfiguration::create()
|
||||||
$entityManager->delete($entity);
|
->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';
|
return 'user';
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,6 +50,8 @@
|
||||||
"Above": "En dessous"
|
"Above": "En dessous"
|
||||||
"Position": "Position"
|
"Position": "Position"
|
||||||
"E-mail": "E-mail"
|
"E-mail": "E-mail"
|
||||||
|
"Permissions": "Permissions"
|
||||||
|
"Send a recovery email": "Envoyer un mail de récupération"
|
||||||
"Display name": "Nom d'affichage"
|
"Display name": "Nom d'affichage"
|
||||||
"Administrator": "Administrateur⋅trice"
|
"Administrator": "Administrateur⋅trice"
|
||||||
"Writer": "Rédacteur⋅trice"
|
"Writer": "Rédacteur⋅trice"
|
||||||
|
|
|
@ -32,32 +32,35 @@
|
||||||
{{ configuration.actionTitle('edit', 'save', 'Save')|trans|build_string(entity) }}
|
{{ configuration.actionTitle('edit', 'save', 'Save')|trans|build_string(entity) }}
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
{% block dropdownMenu %}
|
{% if header_actions_dropdown_menu is not defined %}
|
||||||
|
{% set header_actions_dropdown_menu = '' %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if configuration.action('edit', 'delete', true) %}
|
||||||
|
{% set item %}
|
||||||
|
<button type="submit" form="form-delete" class="dropdown-item">
|
||||||
|
{{ configuration.actionTitle('edit', 'delete', 'Delete')|trans|build_string(entity) }}
|
||||||
|
</button>
|
||||||
|
{% endset %}
|
||||||
|
|
||||||
|
{% set header_actions_dropdown_menu = header_actions_dropdown_menu ~ item %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% block header_actions_dropdown %}
|
||||||
{% set menu = '' %}
|
{% set menu = '' %}
|
||||||
|
|
||||||
{% if configuration.action('edit', 'delete', true) %}
|
{% if header_actions_dropdown_menu %}
|
||||||
{% set item %}
|
|
||||||
<div class="dropdown-menu dropdown-menu-right">
|
|
||||||
<button type="submit" form="form-delete" class="dropdown-item">
|
|
||||||
{{ configuration.actionTitle('edit', 'delete', 'Delete')|trans|build_string(entity) }}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
{% endset %}
|
|
||||||
|
|
||||||
{% set menu = menu ~ item %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if menu %}
|
|
||||||
<button type="button" class="btn btn-white dropdown-toggle dropdown-toggle-hide-after" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
<button type="button" class="btn btn-white dropdown-toggle dropdown-toggle-hide-after" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
<span class="font-weight-bold">
|
<span class="font-weight-bold">
|
||||||
⋅⋅⋅
|
⋅⋅⋅
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
{{ menu|raw }}
|
<div class="dropdown-menu dropdown-menu-right">
|
||||||
|
{{ header_actions_dropdown_menu|raw }}
|
||||||
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -19,6 +19,24 @@
|
||||||
{{ configuration.actionTitle('index', 'new', 'New')|trans }}
|
{{ configuration.actionTitle('index', 'new', 'New')|trans }}
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if header_actions_dropdown_menu is not defined %}
|
||||||
|
{% set header_actions_dropdown_menu = '' %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% block header_actions_dropdown %}
|
||||||
|
{% if header_actions_dropdown_menu %}
|
||||||
|
<button type="button" class="btn btn-white dropdown-toggle dropdown-toggle-hide-after" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
|
<span class="font-weight-bold">
|
||||||
|
⋅⋅⋅
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<div class="dropdown-menu dropdown-menu-right">
|
||||||
|
{{ header_actions_dropdown_menu|raw }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -24,6 +24,24 @@
|
||||||
<span class="fa fa-save pr-1"></span>
|
<span class="fa fa-save pr-1"></span>
|
||||||
{{ configuration.actionTitle('new', 'save', 'Save')|trans|build_string(entity) }}
|
{{ configuration.actionTitle('new', 'save', 'Save')|trans|build_string(entity) }}
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
{% if header_actions_dropdown_menu is not defined %}
|
||||||
|
{% set header_actions_dropdown_menu = '' %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% block header_actions_dropdown %}
|
||||||
|
{% if header_actions_dropdown_menu %}
|
||||||
|
<button type="button" class="btn btn-white dropdown-toggle dropdown-toggle-hide-after" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
|
<span class="font-weight-bold">
|
||||||
|
⋅⋅⋅
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<div class="dropdown-menu dropdown-menu-right">
|
||||||
|
{{ header_actions_dropdown_menu|raw }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -27,6 +27,24 @@
|
||||||
{{ configuration.actionTitle('show', 'edit', 'Edit')|trans|build_string(entity) }}
|
{{ configuration.actionTitle('show', 'edit', 'Edit')|trans|build_string(entity) }}
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if header_actions_dropdown_menu is not defined %}
|
||||||
|
{% set header_actions_dropdown_menu = '' %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% block header_actions_dropdown %}
|
||||||
|
{% if header_actions_dropdown_menu %}
|
||||||
|
<button type="button" class="btn btn-white dropdown-toggle dropdown-toggle-hide-after" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
|
<span class="font-weight-bold">
|
||||||
|
⋅⋅⋅
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<div class="dropdown-menu dropdown-menu-right">
|
||||||
|
{{ header_actions_dropdown_menu|raw }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
25
core/Resources/views/user/user_admin/_show.html.twig
Normal file
25
core/Resources/views/user/user_admin/_show.html.twig
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 p-3">
|
||||||
|
<ul class="list-group">
|
||||||
|
<li class="list-group-item">
|
||||||
|
<span class="font-weight-bold pb-2 d-block">{{ 'Display name'|trans }}</span>
|
||||||
|
|
||||||
|
{{ entity.displayName }}
|
||||||
|
</li>
|
||||||
|
<li class="list-group-item">
|
||||||
|
<span class="font-weight-bold pb-2 d-block">{{ 'E-mail'|trans }}</span>
|
||||||
|
|
||||||
|
{{ entity.email }}
|
||||||
|
</li>
|
||||||
|
<li class="list-group-item">
|
||||||
|
<span class="font-weight-bold pb-2 d-block">{{ 'Permissions'|trans }}</span>
|
||||||
|
|
||||||
|
{{ entity.roles|join('<br>')|replace({
|
||||||
|
ROLE_USER: 'User'|trans,
|
||||||
|
ROLE_WRITER: 'Writer'|trans,
|
||||||
|
ROLE_ADMIN: 'Administrator'|trans,
|
||||||
|
})|raw }}
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -1,62 +1,13 @@
|
||||||
{% extends '@Core/admin/layout.html.twig' %}
|
{% extends '@Core/admin/crud/edit.html.twig' %}
|
||||||
|
|
||||||
{% block title %}{{ 'Users'|trans }} - {{ parent() }}{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<div class="bg-light pl-5 pr-4 pt-5 pb-5">
|
{% set header_actions_dropdown_menu %}
|
||||||
<div class="crud-header">
|
<button type="submit" form="form-resetting-request" class="dropdown-item">
|
||||||
<h1 class="crud-header-title">{{ entity.displayName }}</h1>
|
{{ 'Send a recovery email'|trans }}
|
||||||
|
</button>
|
||||||
|
{% endset %}
|
||||||
|
|
||||||
<div class="crud-header-actions">
|
{{ parent() }}
|
||||||
<div class="btn-group">
|
|
||||||
<a href="{{ path('admin_user_index') }}" class="btn btn-light">
|
|
||||||
<span class="fa fa-list pr-1"></span>
|
|
||||||
{{ 'Back to the list'|trans }}
|
|
||||||
</a>
|
|
||||||
<a href="{{ path('admin_user_show', {entity: entity.id}) }}" class="btn btn-secondary">
|
|
||||||
<span class="fa fa-eye pr-1"></span>
|
|
||||||
{{ 'Show'|trans }}
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<button type="submit" form="form-main" class="btn btn-primary">
|
|
||||||
<span class="fa fa-save pr-1"></span>
|
|
||||||
{{ 'Save'|trans }}
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<button type="button" class="btn btn-white dropdown-toggle dropdown-toggle-hide-after" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
||||||
<span class="font-weight-bold">
|
|
||||||
⋅⋅⋅
|
|
||||||
</span>
|
|
||||||
</button>
|
|
||||||
<div class="dropdown-menu dropdown-menu-right">
|
|
||||||
<button type="submit" form="form-resetting-request" class="dropdown-item">
|
|
||||||
Envoyer un mail de récupération
|
|
||||||
</button>
|
|
||||||
<button type="submit" form="form-delete" class="dropdown-item">
|
|
||||||
{{ 'Remove'|trans }}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<form action="{{ app.request.uri }}" method="post" id="form-main" enctype="multipart/form-data">
|
|
||||||
<div class="tab-content">
|
|
||||||
<div class="tab-pane active">
|
|
||||||
<div class="tab-form">
|
|
||||||
{{ include('@Core/user/user_admin/_form.html.twig') }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{ form_rest(form) }}
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<form method="post" action="{{ path('admin_user_delete', {entity: entity.id}) }}" id="form-delete" data-form-confirm>
|
|
||||||
<input type="hidden" name="_method" value="DELETE">
|
|
||||||
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ entity.id) }}">
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<form method="post" action="{{ path('admin_user_resetting_request', {entity: entity.id}) }}" id="form-resetting-request" data-form-confirm>
|
<form method="post" action="{{ path('admin_user_resetting_request', {entity: entity.id}) }}" id="form-resetting-request" data-form-confirm>
|
||||||
<input type="hidden" name="_token" value="{{ csrf_token('resetting_request' ~ entity.id) }}">
|
<input type="hidden" name="_token" value="{{ csrf_token('resetting_request' ~ entity.id) }}">
|
||||||
|
|
|
@ -1,73 +0,0 @@
|
||||||
{% extends '@Core/admin/layout.html.twig' %}
|
|
||||||
|
|
||||||
{% block title %}{{ 'Users'|trans }} - {{ parent() }}{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<div class="bg-light pl-5 pr-4 pt-5 {% if pager.paginationData.pageCount < 2 %}pb-5{% endif %}">
|
|
||||||
<div class="crud-header">
|
|
||||||
<h1 class="crud-header-title">{{ 'Users'|trans }}</h1>
|
|
||||||
|
|
||||||
<div class="crud-header-actions">
|
|
||||||
<div class="btn-group">
|
|
||||||
<a href="{{ path('admin_user_new') }}" class="btn btn-primary">
|
|
||||||
<span class="fa fa-plus pr-1"></span>
|
|
||||||
{{ 'New'|trans }}
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{ knp_pagination_render(pager) }}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table">
|
|
||||||
<thead class="thead-light">
|
|
||||||
<tr>
|
|
||||||
<th class="col-10 miw-200">{{ 'Username'|trans }}</th>
|
|
||||||
<th class="col-2 miw-100 text-right">{{ 'Actions'|trans }}</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{% for item in pager %}
|
|
||||||
{% set edit = path('admin_user_edit', {entity: item.id}) %}
|
|
||||||
{% set show = path('admin_user_show', {entity: item.id}) %}
|
|
||||||
|
|
||||||
<tr data-dblclick="{{ edit }}">
|
|
||||||
<td class="col-10 miw-200">
|
|
||||||
<a href="{{ show }}" class="font-weight-bold text-body d-block">
|
|
||||||
{{ item.displayName }}
|
|
||||||
</a>
|
|
||||||
|
|
||||||
{{ item.email }}
|
|
||||||
</td>
|
|
||||||
<td class="col-2 miw-100 text-right">
|
|
||||||
<a href="{{ edit }}" class="btn btn-sm btn-primary mr-1">
|
|
||||||
<span class="fa fa-edit"></span>
|
|
||||||
</a>
|
|
||||||
<button type="submit" form="form-delete-{{ item.id }}" class="btn btn-sm btn-danger">
|
|
||||||
<span class="fa fa-trash"></span>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<form method="post" action="{{ path('admin_user_delete', {entity: item.id}) }}" id="form-delete-{{ item.id }}" data-form-confirm>
|
|
||||||
<input type="hidden" name="_method" value="DELETE">
|
|
||||||
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ item.id) }}">
|
|
||||||
</form>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% else %}
|
|
||||||
<tr>
|
|
||||||
<td class="col-12 text-center p-4 text-black-50" colspan="2">
|
|
||||||
<div class="display-1">
|
|
||||||
<span class="fa fa-search"></span>
|
|
||||||
</div>
|
|
||||||
<div class="display-5 mt-3">
|
|
||||||
{{ 'No result'|trans }}
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
|
@ -1,39 +0,0 @@
|
||||||
{% extends '@Core/admin/layout.html.twig' %}
|
|
||||||
|
|
||||||
{% block title %}{{ 'Users'|trans }} - {{ parent() }}{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<div class="bg-light pl-5 pr-4 pt-5 pb-5">
|
|
||||||
<div class="crud-header">
|
|
||||||
<h1 class="crud-header-title">{{ 'New'|trans }}</h1>
|
|
||||||
|
|
||||||
<div class="crud-header-actions">
|
|
||||||
<div class="btn-group">
|
|
||||||
<a href="{{ path('admin_user_index') }}" class="btn btn-light">
|
|
||||||
<span class="fa fa-list pr-1"></span>
|
|
||||||
|
|
||||||
{{ 'Back to the list'|trans }}
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<button type="submit" form="form-main" class="btn btn-primary">
|
|
||||||
<span class="fa fa-save pr-1"></span>
|
|
||||||
|
|
||||||
{{ 'Save'|trans }}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<form action="{{ app.request.uri }}" method="post" id="form-main" enctype="multipart/form-data">
|
|
||||||
<div class="tab-content">
|
|
||||||
<div class="tab-pane active">
|
|
||||||
<div class="tab-form">
|
|
||||||
{{ include('@Core/user/user_admin/_form.html.twig') }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{ form_rest(form) }}
|
|
||||||
</form>
|
|
||||||
{% endblock %}
|
|
|
@ -1,52 +0,0 @@
|
||||||
{% extends '@Core/admin/layout.html.twig' %}
|
|
||||||
|
|
||||||
{% block title %}{{ 'Users'|trans }} - {{ parent() }}{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<div class="bg-light pl-5 pr-4 pt-5 pb-5">
|
|
||||||
<div class="crud-header">
|
|
||||||
<h1 class="crud-header-title">{{ entity.displayName }}</h1>
|
|
||||||
|
|
||||||
<div class="crud-header-actions">
|
|
||||||
<div class="btn-group">
|
|
||||||
<a href="{{ path('admin_user_index') }}" class="btn btn-secondary">
|
|
||||||
<span class="fa fa-list pr-1"></span>
|
|
||||||
|
|
||||||
{{ 'Back to the list'|trans }}
|
|
||||||
</a>
|
|
||||||
<a href="{{ path('admin_user_edit', {entity: entity.id}) }}" class="btn btn-primary">
|
|
||||||
<span class="fa fa-edit pr-1"></span>
|
|
||||||
|
|
||||||
{{ 'Edit'|trans }}
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-12 p-3">
|
|
||||||
<ul class="list-group">
|
|
||||||
<li class="list-group-item">
|
|
||||||
<span class="font-weight-bold pb-2 d-block">Titre</span>
|
|
||||||
|
|
||||||
{{ entity.displayName }}
|
|
||||||
</li>
|
|
||||||
<li class="list-group-item">
|
|
||||||
<span class="font-weight-bold pb-2 d-block">Sous-titre</span>
|
|
||||||
|
|
||||||
{{ entity.email }}
|
|
||||||
</li>
|
|
||||||
<li class="list-group-item">
|
|
||||||
<span class="font-weight-bold pb-2 d-block">Permissions</span>
|
|
||||||
|
|
||||||
{{ entity.roles|join(', ')|replace({
|
|
||||||
ROLE_USER: 'Utilisateur⋅trice',
|
|
||||||
ROLE_WRITER: 'Rédacteur⋅trice',
|
|
||||||
ROLE_ADMIN: 'Administrateur⋅trice',
|
|
||||||
}) }}
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
Loading…
Reference in a new issue