diff --git a/core/Controller/Admin/Crud/CrudController.php b/core/Controller/Admin/Crud/CrudController.php index e73d129..d435d88 100644 --- a/core/Controller/Admin/Crud/CrudController.php +++ b/core/Controller/Admin/Crud/CrudController.php @@ -31,6 +31,7 @@ abstract class CrudController extends AdminController $configuration = $this->getConfiguration(); $this->applySort('index', $query, $request); + $this->updateFilters($request, $session); $pager = $query ->useFilters($this->filters) @@ -54,7 +55,7 @@ abstract class CrudController extends AdminController $this->prepareEntity($entity); - $form = $this->createForm($configuration->getForm('new'), $entity); + $form = $this->createForm($configuration->getForm('new'), $entity, $configuration->getFormOptions('new')); if ($request->isMethod('POST')) { $form->handleRequest($request); @@ -97,7 +98,7 @@ abstract class CrudController extends AdminController $this->prepareEntity($entity); - $form = $this->createForm($configuration->getForm('edit'), $entity); + $form = $this->createForm($configuration->getForm('edit'), $entity, $configuration->getFormOptions('edit')); if ($request->isMethod('POST')) { $form->handleRequest($request); diff --git a/core/Controller/Site/PageAdminController.php b/core/Controller/Site/PageAdminController.php index b363b08..3b9e7c4 100644 --- a/core/Controller/Site/PageAdminController.php +++ b/core/Controller/Site/PageAdminController.php @@ -2,135 +2,115 @@ namespace App\Core\Controller\Site; -use App\Core\Controller\Admin\AdminController; -use App\Core\Entity\Site\Page\Page as Entity; -use App\Core\Factory\Site\Page\PageFactory as EntityFactory; -use App\Core\Form\Site\Page\Filter\PageFilterType as FilterType; -use App\Core\Form\Site\Page\PageType as EntityType; +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\Manager\EntityManager; +use App\Core\Entity\Site\Page\Page as Entity; +use App\Core\Form\Site\Page\PageType as Type; +use App\Core\Form\Site\Page\Filter\PageFilterType as FilterType; use App\Core\Repository\Site\Page\PageRepositoryQuery as RepositoryQuery; -use App\Core\Site\PageLocator; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\Routing\Annotation\Route; +use App\Core\Site\PageLocator; +use App\Core\Repository\Site\Page\PageRepositoryQuery; -/** - * @Route("/admin/site/page") - */ -class PageAdminController extends AdminController +class PageAdminController extends CrudController { /** - * @Route("/{page}", name="admin_site_page_index", requirements={"page": "\d+"}) + * @Route("/admin/site/page/{page}", name="admin_site_page_index", methods={"GET"}, requirements={"page":"\d+"}) */ public function index(int $page = 1, RepositoryQuery $query, Request $request, Session $session): Response { - $this->updateFilters($request, $session); - - $pager = $query - ->useFilters($this->filters) - ->paginate($page) - ; - - return $this->render('@Core/site/page_admin/index.html.twig', [ - 'pager' => $pager, - 'hasFilters' => !empty($this->filters), - ]); + return $this->doIndex($page, $query, $request, $session); } /** - * @Route("/edit/{entity}", name="admin_site_page_edit") + * @Route("/admin/site/page/show/{entity}", name="admin_site_page_show", methods={"GET"}) + */ + public function show(Entity $entity): Response + { + return $this->doShow($entity); + } + + /** + * @Route("/admin/site/page/filter", name="admin_site_page_filter", methods={"GET"}) + */ + public function filter(Session $session): Response + { + return $this->doFilter($session); + } + + /** + * @Route("/admin/site/page/edit/{entity}", name="admin_site_page_edit", methods={"GET", "POST"}) */ public function edit( int $entity, - EntityFactory $factory, EntityManager $entityManager, RepositoryQuery $repositoryQuery, PageLocator $pageLocator, Request $request - ): Response { + ): Response + { $entity = $repositoryQuery->filterById($entity)->findOne(); - $form = $this->createForm(EntityType::class, $entity, [ + + $this->getConfiguration()->setFormOptions('edit', [ 'pageConfiguration' => $pageLocator->getPage(get_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_site_page_edit', [ - 'entity' => $entity->getId(), - ]); - } - - $this->addFlash('warning', 'The form is not valid.'); - } - - return $this->render('@Core/site/page_admin/edit.html.twig', [ - 'form' => $form->createView(), - 'entity' => $entity, - ]); + return $this->doEdit($entity, $entityManager, $request); } /** - * @Route("/delete/{entity}", name="admin_site_page_delete", methods={"DELETE"}) + * @Route("/admin/site/page/delete/{entity}", name="admin_site_page_delete", methods={"DELETE"}) */ public function delete(Entity $entity, EntityManager $entityManager, Request $request): Response { - if ($this->isCsrfTokenValid('delete'.$entity->getId(), $request->request->get('_token'))) { - $entityManager->delete($entity); - - $this->addFlash('success', 'The data has been removed.'); - } - - return $this->redirectToRoute('admin_site_page_index'); + return $this->doDelete($entity, $entityManager, $request); } - /** - * @Route("/filters", name="admin_site_page_filters") - */ - public function filters(Session $session): Response + protected function getConfiguration(): CrudConfiguration { - $form = $this->createForm(FilterType::class); - $form->submit($session->get('page_filter', [])); + return CrudConfiguration::create() + ->setPageTitle('index', 'Pages') + ->setPageTitle('edit', '{name}') + ->setPageTitle('show', '{name}') - return $this->render('@Core/site/page_admin/filters.html.twig', [ - 'form' => $form->createView(), - ]); + ->setPageRoute('index', 'admin_site_page_index') + ->setPageRoute('edit', 'admin_site_page_edit') + ->setPageRoute('delete', 'admin_site_page_delete') + ->setPageRoute('filter', 'admin_site_page_filter') + + ->setForm('edit', Type::class, []) + ->setForm('filter', FilterType::class) + ->setView('form', '@Core/site/page_admin/_form.html.twig') + + ->setAction('index', 'new', false) + ->setAction('index', 'show', false) + ->setAction('edit', 'show', false) + + ->setField('index', 'Name', Field\TextField::class, [ + 'view' => '@Core/site/page_admin/fields/nodes.html.twig', + 'sort' => ['name', '.name'], + ]) + ->setField('index', 'Elements', Field\TextField::class, [ + 'view' => '@Core/site/page_admin/fields/nodes.html.twig', + 'sort' => ['navigation', function(RepositoryQuery $query, $direction) { + $query + ->leftJoin('.nodes', 'node') + ->leftJoin('node.menu', 'menu') + ->leftJoin('menu.navigation', 'navigation') + ->orderBy('navigation.label', $direction); + }], + ]) + ; } - public function getSection(): string + protected function getSection(): string { - return 'site_page'; - } - - protected function updateFilters(Request $request, Session $session) - { - if ($request->query->has('page_filter')) { - $filters = $request->query->get('page_filter'); - - if ('0' === $filters) { - $filters = []; - } - } elseif ($session->has('page_filter')) { - $filters = $session->get('page_filter'); - } else { - $filters = []; - } - - $form = $this->createForm(FilterType::class); - $form->submit($filters); - - if (empty($filters)) { - $this->filters = $filters; - $session->set('page_filter', $filters); - } elseif ($form->isValid()) { - $this->filters = $form->getData(); - $session->set('page_filter', $filters); - } + return 'page'; } } diff --git a/core/Form/Site/Page/Filter/PageFilterType.php b/core/Form/Site/Page/Filter/PageFilterType.php index 8eebd68..3a95281 100644 --- a/core/Form/Site/Page/Filter/PageFilterType.php +++ b/core/Form/Site/Page/Filter/PageFilterType.php @@ -31,7 +31,7 @@ class PageFilterType extends AbstractType 'navigation', EntityType::class, [ - 'label' => 'Naviation', + 'label' => 'Navigation', 'class' => Navigation::class, 'choice_label' => 'label', 'choice_value' => 'id', diff --git a/core/Resources/translations/messages.fr.yaml b/core/Resources/translations/messages.fr.yaml index 73d6398..0b351a1 100644 --- a/core/Resources/translations/messages.fr.yaml +++ b/core/Resources/translations/messages.fr.yaml @@ -89,6 +89,7 @@ 'Edition of "%label%"': "Édition de « %label% »" 'Urls of "%label%"': "Urls de « %label% »" "New element": "Nouvel élément" +"Elements": "Élements" "Show all node URLs": "Afficher toutes les URLs du nœud" "Add a menu": "Ajouter un menu" "Actions": "Actions" diff --git a/core/Resources/views/site/page_admin/edit.html.twig b/core/Resources/views/site/page_admin/edit.html.twig deleted file mode 100644 index b1c0164..0000000 --- a/core/Resources/views/site/page_admin/edit.html.twig +++ /dev/null @@ -1,48 +0,0 @@ -{% extends '@Core/admin/layout.html.twig' %} - -{% block title %}{{ 'Pages'|trans }} - {{ parent() }}{% endblock %} - -{% block body %} -
-
-

{{ entity.name }}

- -
-
- - - - -
-
-
-
- -
-
-
-
- {{ include('@Core/site/page_admin/_form.html.twig') }} -
-
-
- - {{ form_rest(form) }} -
- -
- - -
-{% endblock %} diff --git a/core/Resources/views/site/page_admin/fields/nodes.html.twig b/core/Resources/views/site/page_admin/fields/nodes.html.twig new file mode 100644 index 0000000..b49c524 --- /dev/null +++ b/core/Resources/views/site/page_admin/fields/nodes.html.twig @@ -0,0 +1,8 @@ +{% for node in entity.nodes %} + + {{ node.label }} ({{ node.menu.navigation.label }}) + +{% endfor %} diff --git a/core/Resources/views/site/page_admin/filters.html.twig b/core/Resources/views/site/page_admin/filters.html.twig deleted file mode 100644 index 5cb33d8..0000000 --- a/core/Resources/views/site/page_admin/filters.html.twig +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/core/Resources/views/site/page_admin/index.html.twig b/core/Resources/views/site/page_admin/index.html.twig deleted file mode 100644 index 5130a79..0000000 --- a/core/Resources/views/site/page_admin/index.html.twig +++ /dev/null @@ -1,81 +0,0 @@ -{% extends '@Core/admin/layout.html.twig' %} - -{% block title %}{{ 'Pages'|trans }} - {{ parent() }}{% endblock %} - -{% block body %} -
-
-

{{ 'Pages'|trans }}

-
- -
-
- -
-
- {{ knp_pagination_render(pager) }} -
-
-
- -
- - - - - - - - - - {% for item in pager %} - {% set edit = path('admin_site_page_edit', {entity: item.id}) %} - - - - - - - {% else %} - - - - {% endfor %} - -
{{ 'Name'|trans }}{{ 'Actions'|trans }}
- - {{ item.name }} - - - {% for node in item.nodes %} - - {{ node.label }} - - {% endfor %} - - - - - - -
- - -
-
-
- -
-
- {{ 'No result'|trans }} -
-
-
-{% endblock %}