diff --git a/core/Controller/Site/PageAdminController.php b/core/Controller/Site/PageAdminController.php index a764031..0a825c6 100644 --- a/core/Controller/Site/PageAdminController.php +++ b/core/Controller/Site/PageAdminController.php @@ -6,6 +6,7 @@ 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\PageType as EntityType; +use App\Core\Form\Site\Page\Filter\PageFilterType as FilterType; use App\Core\Manager\EntityManager; use App\Core\Page\FooPage; use App\Core\Page\SimplePage; @@ -14,6 +15,7 @@ use App\Core\Site\PageLocator; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\HttpFoundation\Session\Session; /** * @Route("/admin/site/page") @@ -23,12 +25,17 @@ class PageAdminController extends AdminController /** * @Route("/{page}", name="admin_site_page_index", 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); + $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), ]); } @@ -102,6 +109,45 @@ class PageAdminController extends AdminController return $this->redirectToRoute('admin_site_page_index'); } + /** + * @Route("/filters", name="admin_site_page_filters") + */ + public function filters(Session $session): Response + { + $form = $this->createForm(FilterType::class); + $form->submit($session->get('page_filter', [])); + + return $this->render('@Core/site/page_admin/filters.html.twig', [ + 'form' => $form->createView(), + ]); + } + + 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); + } + } + public function getSection(): string { return 'site_page'; diff --git a/core/Controller/Site/TreeAdminController.php b/core/Controller/Site/TreeAdminController.php index ef8165b..bb8f512 100644 --- a/core/Controller/Site/TreeAdminController.php +++ b/core/Controller/Site/TreeAdminController.php @@ -25,8 +25,7 @@ class TreeAdminController extends AdminController if ($session->has('site_tree_last_navigation')) { $navigation = $navigationQuery->create() - ->where('.id = :id') - ->setParameter(':id', (int) $session->get('site_tree_last_navigation')) + ->filterById((int) $session->get('site_tree_last_navigation')) ->findOne() ; } diff --git a/core/Repository/Site/NavigationRepositoryQuery.php b/core/Repository/Site/NavigationRepositoryQuery.php index a04f0f9..889ea42 100644 --- a/core/Repository/Site/NavigationRepositoryQuery.php +++ b/core/Repository/Site/NavigationRepositoryQuery.php @@ -17,6 +17,16 @@ class NavigationRepositoryQuery extends RepositoryQuery parent::__construct($repository, 'n', $paginator); } + public function filterById($id) + { + $this + ->where('.id = :id') + ->setParameter(':id', $id) + ; + + return $this; + } + public function whereDomain($domain) { return $this diff --git a/core/Repository/Site/Page/PageRepositoryQuery.php b/core/Repository/Site/Page/PageRepositoryQuery.php index c3a8024..3746684 100644 --- a/core/Repository/Site/Page/PageRepositoryQuery.php +++ b/core/Repository/Site/Page/PageRepositoryQuery.php @@ -4,6 +4,7 @@ namespace App\Core\Repository\Site\Page; use App\Core\Repository\RepositoryQuery; use Knp\Component\Pager\PaginatorInterface; +use App\Core\Entity\Site\Navigation; /** * class PageRepositoryQuery. @@ -17,6 +18,25 @@ class PageRepositoryQuery extends RepositoryQuery parent::__construct($repository, 'p', $paginator); } + protected function filterHandler(string $name, $value) + { + if ($name === 'navigation') { + return $this->filterByNavigation($value); + } else { + return parent::filterHandler($name, $value); + } + } + + public function filterByNavigation(Navigation $navigation) + { + return $this + ->leftJoin('.nodes', 'node') + ->leftJoin('node.menu', 'menu') + ->leftJoin('menu.navigation', 'navigation') + ->where('navigation.id = :navigationId') + ->setParameter(':navigationId', $navigation->getId()); + } + public function filterById($id) { $this diff --git a/core/Resources/views/site/page_admin/index.html.twig b/core/Resources/views/site/page_admin/index.html.twig index 07ea264..c913359 100644 --- a/core/Resources/views/site/page_admin/index.html.twig +++ b/core/Resources/views/site/page_admin/index.html.twig @@ -10,7 +10,16 @@ - {{ knp_pagination_render(pager) }} +
+
+ +
+
+ {{ knp_pagination_render(pager) }} +
+