backports murph-skeleton

This commit is contained in:
Simon Vieille 2021-04-30 12:20:50 +02:00
parent 880849caee
commit 626bd23ea3
5 changed files with 89 additions and 5 deletions

View file

@ -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';

View file

@ -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()
;
}

View file

@ -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

View file

@ -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

View file

@ -10,7 +10,16 @@
</div>
</div>
{{ knp_pagination_render(pager) }}
<div class="row">
<div class="col-auto ml-auto {% if pager.getPaginationData.pageCount > 1 %}mr-3{% endif %}">
<button data-modal="{{ path('admin_site_page_filters') }}" class="btn btn-sm btn-secondary">
{{ 'Filter'|trans }} {% if hasFilters %}({{ 'Yes'|trans }}){% endif %}
</button>
</div>
<div class="col-auto">
{{ knp_pagination_render(pager) }}
</div>
</div>
</div>
<div class="table-responsive">