diff --git a/core/Controller/Admin/Crud/CrudController.php b/core/Controller/Admin/Crud/CrudController.php index 9d2a530..76710be 100644 --- a/core/Controller/Admin/Crud/CrudController.php +++ b/core/Controller/Admin/Crud/CrudController.php @@ -6,10 +6,10 @@ use App\Core\Controller\Admin\AdminController; use App\Core\Crud\CrudConfiguration; use App\Core\Entity\EntityInterface; use App\Core\Manager\EntityManager; +use App\Core\Repository\RepositoryQuery; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Session\Session; -use App\Core\Repository\RepositoryQuery; /** * class CrudController. @@ -20,25 +20,26 @@ abstract class CrudController extends AdminController { abstract protected function getConfiguration(): CrudConfiguration; + protected array $filters = []; + protected function doIndex(int $page = 1, RepositoryQuery $query, Request $request, Session $session): Response { - /*$this->updateFilters($options['request'], $options['session']);*/ + $configuration = $this->getConfiguration(); + + $this->updateFilters($request, $session); $pager = $query - //->useFilters($this->filters) - ->paginate($page) + ->useFilters($this->filters) + ->paginate($page, $configuration->getMaxPerPage('index')) ; - /*$viewOptions = array_merge([ - 'pager' => $pager, - 'hasFilters' => !empty($this->filters), - ], $options['viewOptions']);*/ - - $configuration = $this->getConfiguration(); - return $this->render($this->getConfiguration()->getView('index'), [ 'configuration' => $configuration, 'pager' => $pager, + 'filters' => [ + 'show' => $configuration->getForm('filter') !== null, + 'isEmpty' => empty($this->filters), + ], ]); } @@ -119,41 +120,53 @@ abstract class CrudController extends AdminController protected function doFilter(Session $session): Response { - $form = $this->createForm($this->forms['filters']); - $form->submit($session->get($this->filterRequestId, [])); + $configuration = $this->getConfiguration(); + $type = $configuration->getForm('filter'); - return $this->render($this->getView('filters'), [ + if (null === $type) { + throw $this->createNotFoundException(); + } + + $form = $this->createForm($type); + $form->submit($session->get($form->getName(), [])); + + return $this->render($configuration->getView('filter'), [ 'form' => $form->createView(), + 'configuration' => $configuration, ]); } protected function updateFilters(Request $request, Session $session) { - if ($request->query->has($this->filterRequestId)) { - $filters = $request->query->get($this->filterRequestId); + $configuration = $this->getConfiguration(); + $type = $configuration->getForm('filter'); + + if (null === $type) { + return; + } + + $form = $this->createForm($type); + + if ($request->query->has($form->getName())) { + $filters = $request->query->get($form->getName()); if ('0' === $filters) { $filters = []; } - } elseif ($session->has($this->filterRequestId)) { - $filters = $session->get($this->filterRequestId); + } elseif ($session->has($form->getName())) { + $filters = $session->get($form->getName()); } else { $filters = []; } - if (isset($this->forms['filters'])) { - $form = $this->createForm($this->forms['filters']); - $form->submit($filters); - } else { - $form = null; - } + $form->submit($filters); if (empty($filters)) { $this->filters = $filters; - $session->set($this->filterRequestId, $filters); - } elseif (null !== $form && $form->isValid()) { + $session->set($form->getName(), $filters); + } elseif ($form->isValid()) { $this->filters = $form->getData(); - $session->set($this->filterRequestId, $filters); + $session->set($form->getName(), $filters); } } } diff --git a/core/Crud/CrudConfiguration.php b/core/Crud/CrudConfiguration.php index 1fc24bf..7206c52 100644 --- a/core/Crud/CrudConfiguration.php +++ b/core/Crud/CrudConfiguration.php @@ -17,6 +17,7 @@ class CrudConfiguration protected array $formOptions = []; protected array $views = []; protected array $fields = []; + protected array $maxPerPage = []; /* -- */ @@ -55,9 +56,9 @@ class CrudConfiguration return $this; } - public function getForm(string $context): string + public function getForm(string $context): ?string { - return $this->forms[$context]; + return $this->forms[$context] ?? null; } public function setFormOptions(string $context, array $options = []): self @@ -146,4 +147,18 @@ class CrudConfiguration { return $this->fields[$context] ?? []; } + + /* -- */ + + public function setMaxPerPage(string $page, int $max) + { + $this->maxPerPage[$page] = $max; + + return $this; + } + + public function getMaxPerPage(string $page, int $default = 20) + { + return $this->maxPerPage[$page] ?? $default; + } } diff --git a/core/Resources/translations/messages.fr.yaml b/core/Resources/translations/messages.fr.yaml index abd6710..c5a6ae6 100644 --- a/core/Resources/translations/messages.fr.yaml +++ b/core/Resources/translations/messages.fr.yaml @@ -127,9 +127,13 @@ "Name": "Nom" "Authentication": "Authentification" "Anyway": "Peu importe" +"Reset": "Réinitialiser" "Yes": "Oui" "No": "Non" +"yes": "oui" +"no": "non" "Locale": "Langue" "Settings": "Paramètres" "Setting": "Paramètre" "Section": "Section" +"Filter": "Filtrer" diff --git a/core/Resources/views/admin/crud/filter.html.twig b/core/Resources/views/admin/crud/filter.html.twig new file mode 100644 index 0000000..aca97ad --- /dev/null +++ b/core/Resources/views/admin/crud/filter.html.twig @@ -0,0 +1,21 @@ + diff --git a/core/Resources/views/admin/crud/index.html.twig b/core/Resources/views/admin/crud/index.html.twig index 022f4e2..0305069 100644 --- a/core/Resources/views/admin/crud/index.html.twig +++ b/core/Resources/views/admin/crud/index.html.twig @@ -4,7 +4,7 @@ {% block body %} {% block header %} -
+
{% block header_title %}

{{ configuration.pageTitle('index')|trans }}

@@ -24,7 +24,20 @@ {% endblock %}
- {{ knp_pagination_render(pager) }} + {% if filters.show %} +
+
+ +
+
+ {{ knp_pagination_render(pager) }} +
+
+ {% else %} + {{ knp_pagination_render(pager) }} + {% endif %}
{% endblock %}