Add initial version of admin "users" page
parent
93ae08e8aa
commit
7813c93e9b
@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controller\Administration;
|
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Attribute\Route;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
/**
|
||||
* Controllers for users administration pages
|
||||
*/
|
||||
#[Route('/admin/user')]
|
||||
class UserController extends AbstractController {
|
||||
/**
|
||||
* @var TranslatorInterface The translator service
|
||||
*/
|
||||
private readonly TranslatorInterface $translator;
|
||||
|
||||
/**
|
||||
* Initialisation
|
||||
*
|
||||
* @param TranslatorInterface $translator The translator service
|
||||
*/
|
||||
public function __construct (TranslatorInterface $translator) {
|
||||
$this->translator = $translator;
|
||||
}
|
||||
|
||||
/**
|
||||
* List all users
|
||||
*
|
||||
* @return Response The response
|
||||
*/
|
||||
#[Route('/', name: 'admin_user_list')]
|
||||
public function list (): Response {
|
||||
return $this->render('/Administration/user/list.html.twig');
|
||||
}
|
||||
/**
|
||||
* AJAX query for a list of users (Datatables.net)
|
||||
*
|
||||
* @return Response The response
|
||||
*/
|
||||
#[Route('/ajax', name: 'admin_user_ajax', methods: 'POST')]
|
||||
public function list__ajax (): Response {
|
||||
return $this->render('/Administration/user/list.html.twig');
|
||||
}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
{% extends '/base.html.twig' %}
|
||||
|
||||
{% block title %}{{ 'pages.admin.user'|trans }} - {{ parent() }}{% endblock %}
|
||||
|
||||
{% block mainContent %}
|
||||
<h1 class="mb-4">{{ 'pages.admin.user'|trans }}</h1>
|
||||
<table class="table table-striped table-hover table-datatable"
|
||||
data-sort-paging="true"
|
||||
data-sort-ajax="{{ path('admin_user_ajax') }}"
|
||||
data-sort-layout='{"topStart":"search","topEnd":null,"bottomStart":null,"bottomEnd":"paging"}'
|
||||
>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" data-sort-name="email">{{ 'fields.email.label'|trans }}</th>
|
||||
<th scope="col" data-sort-name="name">{{ 'fields.name'|trans }}</th>
|
||||
<th scope="col" data-sort-name="isVerified">{{ 'fields.emailVerify'|trans }}</th>
|
||||
<th scope="col" data-sort-name="adminValidated">{{ 'fields.adminValidated'|trans }}</th>
|
||||
<th scope="col" data-sort-name="administrator">{{ 'fields.administrator'|trans }}</th>
|
||||
<th scope="col" data-sort="false"> </th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="table-group-divider">
|
||||
<tr>
|
||||
<td>email</td>
|
||||
<td>name</td>
|
||||
<td>isVerified</td>
|
||||
<td>adminValidated</td>
|
||||
<td>administrator</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% endblock %}
|
||||
|
||||
{% block importmap %}{{ importmap(['app', 'datatables']) }}{% endblock %}
|
Loading…
Reference in New Issue