2021-03-24 12:27:07 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Core\Controller\Site;
|
|
|
|
|
2021-05-17 15:30:44 +02:00
|
|
|
use App\Core\Controller\Admin\Crud\CrudController;
|
|
|
|
use App\Core\Crud\CrudConfiguration;
|
|
|
|
use App\Core\Crud\Field;
|
2021-03-24 12:27:07 +01:00
|
|
|
use App\Core\Entity\Site\Page\Page as Entity;
|
2021-04-30 12:20:30 +02:00
|
|
|
use App\Core\Form\Site\Page\Filter\PageFilterType as FilterType;
|
2021-06-16 18:40:26 +02:00
|
|
|
use App\Core\Form\Site\Page\PageType as Type;
|
|
|
|
use App\Core\Manager\EntityManager;
|
2021-03-24 12:27:07 +01:00
|
|
|
use App\Core\Repository\Site\Page\PageRepositoryQuery as RepositoryQuery;
|
2021-06-16 18:40:26 +02:00
|
|
|
use App\Core\Site\PageLocator;
|
2021-03-24 12:27:07 +01:00
|
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
|
|
use Symfony\Component\HttpFoundation\Response;
|
2021-04-30 12:20:30 +02:00
|
|
|
use Symfony\Component\HttpFoundation\Session\Session;
|
2021-05-12 11:56:48 +02:00
|
|
|
use Symfony\Component\Routing\Annotation\Route;
|
2021-08-17 09:12:43 +02:00
|
|
|
use App\Core\Event\Page\PageEditEvent;
|
|
|
|
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
2021-10-06 14:49:38 +02:00
|
|
|
use App\Core\Entity\EntityInterface;
|
2021-03-24 12:27:07 +01:00
|
|
|
|
2021-05-17 15:30:44 +02:00
|
|
|
class PageAdminController extends CrudController
|
2021-03-24 12:27:07 +01:00
|
|
|
{
|
|
|
|
/**
|
2021-05-17 15:30:44 +02:00
|
|
|
* @Route("/admin/site/page/{page}", name="admin_site_page_index", methods={"GET"}, requirements={"page":"\d+"})
|
2021-03-24 12:27:07 +01:00
|
|
|
*/
|
2022-01-23 18:01:35 +01:00
|
|
|
public function index(RepositoryQuery $query, Request $request, Session $session, int $page = 1): Response
|
2021-03-24 12:27:07 +01:00
|
|
|
{
|
2021-05-17 15:30:44 +02:00
|
|
|
return $this->doIndex($page, $query, $request, $session);
|
|
|
|
}
|
2021-04-30 12:20:30 +02:00
|
|
|
|
2021-05-17 15:30:44 +02:00
|
|
|
/**
|
|
|
|
* @Route("/admin/site/page/show/{entity}", name="admin_site_page_show", methods={"GET"})
|
|
|
|
*/
|
|
|
|
public function show(Entity $entity): Response
|
|
|
|
{
|
|
|
|
return $this->doShow($entity);
|
|
|
|
}
|
2021-03-24 12:27:07 +01:00
|
|
|
|
2021-05-17 15:30:44 +02:00
|
|
|
/**
|
|
|
|
* @Route("/admin/site/page/filter", name="admin_site_page_filter", methods={"GET"})
|
|
|
|
*/
|
|
|
|
public function filter(Session $session): Response
|
|
|
|
{
|
|
|
|
return $this->doFilter($session);
|
2021-03-24 12:27:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2021-05-17 15:30:44 +02:00
|
|
|
* @Route("/admin/site/page/edit/{entity}", name="admin_site_page_edit", methods={"GET", "POST"})
|
2021-03-24 12:27:07 +01:00
|
|
|
*/
|
|
|
|
public function edit(
|
|
|
|
int $entity,
|
|
|
|
EntityManager $entityManager,
|
|
|
|
RepositoryQuery $repositoryQuery,
|
|
|
|
PageLocator $pageLocator,
|
2021-08-17 09:12:43 +02:00
|
|
|
EventDispatcherInterface $eventDispatcher,
|
2021-03-24 12:27:07 +01:00
|
|
|
Request $request
|
2021-06-16 18:40:26 +02:00
|
|
|
): Response {
|
2021-03-24 12:27:07 +01:00
|
|
|
$entity = $repositoryQuery->filterById($entity)->findOne();
|
2021-05-17 15:30:44 +02:00
|
|
|
|
2021-08-17 09:12:43 +02:00
|
|
|
$event = new PageEditEvent($entity);
|
|
|
|
$eventDispatcher->dispatch($event, PageEditEvent::FORM_INIT_EVENT);
|
|
|
|
|
2021-05-17 15:30:44 +02:00
|
|
|
$this->getConfiguration()->setFormOptions('edit', [
|
2021-08-17 09:12:43 +02:00
|
|
|
'page_configuration' => $pageLocator->getPage(get_class($entity)),
|
|
|
|
'page_builder_options' => $event->getPageBuilderOptions(),
|
2021-03-24 12:27:07 +01:00
|
|
|
]);
|
|
|
|
|
2021-05-17 15:30:44 +02:00
|
|
|
return $this->doEdit($entity, $entityManager, $request);
|
2021-03-24 12:27:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2021-05-17 15:30:44 +02:00
|
|
|
* @Route("/admin/site/page/delete/{entity}", name="admin_site_page_delete", methods={"DELETE"})
|
2021-03-24 12:27:07 +01:00
|
|
|
*/
|
|
|
|
public function delete(Entity $entity, EntityManager $entityManager, Request $request): Response
|
|
|
|
{
|
2021-05-17 15:30:44 +02:00
|
|
|
return $this->doDelete($entity, $entityManager, $request);
|
2021-03-24 12:27:07 +01:00
|
|
|
}
|
|
|
|
|
2021-10-06 14:49:38 +02:00
|
|
|
/**
|
|
|
|
* @Route("/admin/site/page/batch/{page}", name="admin_site_page_batch", methods={"POST"}, requirements={"page":"\d+"})
|
|
|
|
*/
|
2022-01-23 18:01:35 +01:00
|
|
|
public function batch(RepositoryQuery $query, EntityManager $entityManager, Request $request, Session $session, int $page = 1): Response
|
2021-10-06 14:49:38 +02:00
|
|
|
{
|
|
|
|
return $this->doBatch($page, $query, $entityManager, $request, $session);
|
|
|
|
}
|
|
|
|
|
2021-05-17 15:30:44 +02:00
|
|
|
protected function getConfiguration(): CrudConfiguration
|
2021-04-30 12:20:30 +02:00
|
|
|
{
|
2021-05-17 15:30:44 +02:00
|
|
|
return CrudConfiguration::create()
|
|
|
|
->setPageTitle('index', 'Pages')
|
|
|
|
->setPageTitle('edit', '{name}')
|
|
|
|
->setPageTitle('show', '{name}')
|
|
|
|
|
|
|
|
->setPageRoute('index', 'admin_site_page_index')
|
|
|
|
->setPageRoute('edit', 'admin_site_page_edit')
|
|
|
|
->setPageRoute('delete', 'admin_site_page_delete')
|
|
|
|
->setPageRoute('filter', 'admin_site_page_filter')
|
2021-10-06 14:49:38 +02:00
|
|
|
->setPageRoute('batch', 'admin_site_page_batch')
|
2021-05-17 15:30:44 +02:00
|
|
|
|
|
|
|
->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, [
|
2021-05-17 15:32:49 +02:00
|
|
|
'property' => 'name',
|
2021-05-17 15:30:44 +02:00
|
|
|
'sort' => ['name', '.name'],
|
2021-10-06 14:49:38 +02:00
|
|
|
'attr' => ['class' => 'col-4'],
|
2021-05-17 15:30:44 +02:00
|
|
|
])
|
|
|
|
->setField('index', 'Elements', Field\TextField::class, [
|
|
|
|
'view' => '@Core/site/page_admin/fields/nodes.html.twig',
|
2021-06-16 18:40:26 +02:00
|
|
|
'sort' => ['navigation', function (RepositoryQuery $query, $direction) {
|
2021-05-17 15:30:44 +02:00
|
|
|
$query
|
|
|
|
->leftJoin('.nodes', 'node')
|
|
|
|
->leftJoin('node.menu', 'menu')
|
|
|
|
->leftJoin('menu.navigation', 'navigation')
|
2021-06-16 18:40:26 +02:00
|
|
|
->orderBy('navigation.label', $direction)
|
|
|
|
;
|
2021-05-17 15:30:44 +02:00
|
|
|
}],
|
2021-10-06 14:49:38 +02:00
|
|
|
'attr' => ['class' => 'col-6'],
|
2021-05-17 15:30:44 +02:00
|
|
|
])
|
2021-10-06 14:49:38 +02:00
|
|
|
->setBatchAction('index', 'delete', 'Delete', function(EntityInterface $entity, EntityManager $manager) {
|
|
|
|
$manager->delete($entity);
|
|
|
|
})
|
2021-05-17 15:30:44 +02:00
|
|
|
;
|
2021-05-12 11:56:48 +02:00
|
|
|
}
|
|
|
|
|
2021-05-17 15:30:44 +02:00
|
|
|
protected function getSection(): string
|
2021-04-30 12:20:30 +02:00
|
|
|
{
|
2021-05-18 15:13:15 +02:00
|
|
|
return 'site_page';
|
2021-04-30 12:20:30 +02:00
|
|
|
}
|
2021-03-24 12:27:07 +01:00
|
|
|
}
|