backports murph-skeleton

This commit is contained in:
Simon Vieille 2021-05-17 09:30:21 +02:00
parent 043691b870
commit 42a7b0ff09
8 changed files with 105 additions and 315 deletions

View file

@ -2,117 +2,110 @@
namespace App\Core\Controller\Site;
use App\Core\Controller\Admin\AdminController;
use App\Core\Controller\Admin\Crud\CrudController;
use App\Core\Crud\CrudConfiguration;
use App\Core\Crud\Field;
use App\Core\Entity\Site\Navigation as Entity;
use App\Core\Factory\Site\NavigationFactory as EntityFactory;
use App\Core\Form\Site\NavigationType as EntityType;
use App\Core\Factory\Site\NavigationFactory as Factory;
use App\Core\Form\Site\NavigationType as Type;
use App\Core\Manager\EntityManager;
use App\Core\Repository\Site\NavigationRepositoryQuery as RepositoryQuery;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/admin/site/navigation")
*/
class NavigationAdminController extends AdminController
class NavigationAdminController extends CrudController
{
/**
* @Route("/{page}", name="admin_site_navigation_index", requirements={"page": "\d+"})
* @Route("/admin/site/navigation/{page}", name="admin_site_navigation_index", methods={"GET"}, 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
->orderBy('.label, .domain')
->paginate($page)
;
return $this->render('@Core/site/navigation_admin/index.html.twig', [
'pager' => $pager,
]);
return $this->doIndex($page, $query, $request, $session);
}
/**
* @Route("/new", name="admin_site_navigation_new")
* @Route("/admin/site/navigation/new", name="admin_site_navigation_new", methods={"GET", "POST"})
*/
public function new(EntityFactory $factory, EntityManager $entityManager, Request $request): Response
public function new(Factory $factory, EntityManager $entityManager, Request $request): Response
{
$entity = $factory->create();
$form = $this->createForm(EntityType::class, $entity);
if ($request->isMethod('POST')) {
$form->handleRequest($request);
if ($form->isValid()) {
$entityManager->create($entity);
$this->addFlash('success', 'The data has been saved.');
return $this->redirectToRoute('admin_site_navigation_edit', [
'entity' => $entity->getId(),
]);
}
$this->addFlash('warning', 'The form is not valid.');
}
return $this->render('@Core/site/navigation_admin/new.html.twig', [
'form' => $form->createView(),
'entity' => $entity,
]);
return $this->doNew($factory->create(), $entityManager, $request);
}
/**
* @Route("/edit/{entity}", name="admin_site_navigation_edit")
*/
public function edit(Entity $entity, EntityManager $entityManager, Request $request): Response
{
$form = $this->createForm(EntityType::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_navigation_edit', [
'entity' => $entity->getId(),
]);
}
$this->addFlash('warning', 'The form is not valid.');
}
return $this->render('@Core/site/navigation_admin/edit.html.twig', [
'form' => $form->createView(),
'entity' => $entity,
]);
}
/**
* @Route("/show/{entity}", name="admin_site_navigation_show")
* @Route("/admin/site/navigation/show/{entity}", name="admin_site_navigation_show", methods={"GET"})
*/
public function show(Entity $entity): Response
{
return $this->render('@Core/site/navigation_admin/show.html.twig', [
'entity' => $entity,
]);
return $this->doShow($entity);
}
/**
* @Route("/delete/{entity}", name="admin_site_navigation_delete", methods={"DELETE"})
* @Route("/admin/site/navigation/filter", name="admin_site_navigation_filter", methods={"GET"})
*/
public function filter(Session $session): Response
{
return $this->doFilter($session);
}
/**
* @Route("/admin/site/navigation/edit/{entity}", name="admin_site_navigation_edit", methods={"GET", "POST"})
*/
public function edit(Entity $entity, EntityManager $entityManager, Request $request): Response
{
return $this->doEdit($entity, $entityManager, $request);
}
/**
* @Route("/admin/site/navigation/delete/{entity}", name="admin_site_navigation_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_navigation_index');
return $this->doDelete($entity, $entityManager, $request);
}
public function getSection(): string
protected function getConfiguration(): CrudConfiguration
{
return CrudConfiguration::create()
->setPageTitle('index', 'Navigations')
->setPageTitle('edit', '{label}')
->setPageTitle('new', 'New navigation')
->setPageTitle('show', '{id}')
->setPageRoute('index', 'admin_site_navigation_index')
->setPageRoute('new', 'admin_site_navigation_new')
->setPageRoute('edit', 'admin_site_navigation_edit')
->setPageRoute('show', 'admin_site_navigation_show')
->setPageRoute('delete', 'admin_site_navigation_delete')
->setPageRoute('filter', 'admin_site_navigation_filter')
->setForm('edit', Type::class, [])
->setForm('new', Type::class)
->setView('show_entity', '@Core/site/navigation_admin/_show.html.twig')
->setView('form', '@Core/site/navigation_admin/_form.html.twig')
->setField('index', 'Label', Field\TextField::class, [
'property' => 'label',
'attr' => ['class' => 'miw-200'],
'sort' => ['label', '.label'],
])
->setField('index', 'Domain', Field\ButtonField::class, [
'property' => 'domain',
'button_attr' => ['class' => 'btn btn-light'],
'attr' => ['class' => 'miw-200'],
'sort' => ['domain', '.domain'],
])
->setField('index', 'Locale', Field\ButtonField::class, [
'property' => 'locale',
'button_attr' => ['class' => 'btn btn-light'],
'sort' => ['locale', '.locale'],
])
;
}
protected function getSection(): string
{
return 'site_navigation';
}

View file

@ -58,6 +58,10 @@
"Logout": "Déconnexion"
"Dashboard": "Tableau de bord"
"Navigations": "Navigations"
"Navigation": "Navigation"
"Edition of {id}": "Édition de {id}"
"View of {id}": "Visualisation de {id}"
"New navigation": "Nouvelle navigation"
"Tree": "Arborescence"
"Pages": "Pages"
"Page": "Page"

View file

@ -133,7 +133,7 @@
{% endfor %}
{% if configuration.action('index', 'show', true) or configuration.action('index', 'edit', true) or configuration.action('index', 'delete', true) %}
<td class="col-2 miw-100 text-right">
<td class="col-2 miw-200 text-right">
{% if configuration.action('index', 'show', true) %}
<a href="{{ path(configuration.pageRoute('show'), {entity: item.id}) }}" class="btn btn-sm btn-secondary mr-1">
<span class="fa fa-eye"></span>

View file

@ -0,0 +1,26 @@
<div class="row">
<div class="col-12 p-3">
<ul class="list-group">
<li class="list-group-item">
<span class="font-weight-bold pb-2 d-block">{{ 'Label'|trans }}</span>
{{ entity.label }}
</li>
<li class="list-group-item">
<span class="font-weight-bold pb-2 d-block">{{ 'Domain'|trans }}</span>
{{ entity.domain }}
</li>
<li class="list-group-item">
<span class="font-weight-bold pb-2 d-block">{{ 'Locale'|trans }}</span>
{{ entity.locale }}
</li>
<li class="list-group-item">
<span class="font-weight-bold pb-2 d-block">{{ 'Code'|trans }}</span>
{{ entity.code }}
</li>
</ul>
</div>
</div>

View file

@ -1,57 +0,0 @@
{% extends '@Core/admin/layout.html.twig' %}
{% block title %}{{ 'Navigations'|trans }} - {{ parent() }}{% endblock %}
{% block body %}
<div class="bg-light pl-5 pr-4 pt-5 pb-5">
<div class="crud-header">
<h1 class="crud-header-title">{{ entity.label }}</h1>
<div class="crud-header-actions">
<div class="btn-group">
<a href="{{ path('admin_site_navigation_index') }}" class="btn btn-light">
<span class="fa fa-list pr-1"></span>
{{ 'Back to the list'|trans }}
</a>
<a href="{{ path('admin_site_navigation_show', {entity: entity.id}) }}" class="btn btn-secondary">
<span class="fa fa-eye pr-1"></span>
{{ 'Show'|trans }}
</a>
<button type="submit" form="form-main" class="btn btn-primary">
<span class="fa fa-save pr-1"></span>
{{ 'Save'|trans }}
</button>
<button type="button" class="btn btn-white dropdown-toggle dropdown-toggle-hide-after" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="font-weight-bold">
⋅⋅⋅
</span>
</button>
<div class="dropdown-menu dropdown-menu-right">
<button type="submit" form="form-delete" class="dropdown-item">
{{ 'Remove'|trans }}
</button>
</div>
</div>
</div>
</div>
</div>
<form action="{{ app.request.uri }}" method="post" id="form-main" enctype="multipart/form-data">
<div class="tab-content">
<div class="tab-pane active">
<div class="tab-form">
{{ include('@Core/site/navigation_admin/_form.html.twig') }}
</div>
</div>
</div>
{{ form_rest(form) }}
</form>
<form method="post" action="{{ path('admin_site_navigation_delete', {entity: entity.id}) }}" id="form-delete" data-form-confirm>
<input type="hidden" name="_method" value="DELETE">
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ entity.id) }}">
</form>
{% endblock %}

View file

@ -1,84 +0,0 @@
{% extends '@Core/admin/layout.html.twig' %}
{% block title %}{{ 'Navigations'|trans }} - {{ parent() }}{% endblock %}
{% block body %}
<div class="bg-light pl-5 pr-4 pt-5 {% if pager.paginationData.pageCount < 2 %}pb-5{% endif %}">
<div class="crud-header">
<h1 class="crud-header-title">{{ 'Navigations'|trans }}</h1>
<div class="crud-header-actions">
<div class="btn-group">
<a href="{{ path('admin_site_navigation_new') }}" class="btn btn-primary">
<span class="fa fa-plus pr-1"></span>
{{ 'New'|trans }}
</a>
</div>
</div>
</div>
{{ knp_pagination_render(pager) }}
</div>
<div class="table-responsive">
<table class="table">
<thead class="thead-light">
<tr>
<th class="col-5 miw-150">
{{ 'Label'|trans }}
</th>
<th class="col-5 miw-200">
{{ 'Domain'|trans }}
</th>
<th class="col-2 miw-100 text-right">
{{ 'Actions'|trans }}
</th>
</tr>
</thead>
<tbody>
{% for item in pager %}
{% set edit = path('admin_site_navigation_edit', {entity: item.id}) %}
{% set show = path('admin_site_navigation_show', {entity: item.id}) %}
<tr data-dblclick="{{ edit }}">
<td class="col-5 miw-150">
<a href="{{ show }}" class="font-weight-bold text-body d-block">
{{ item.label }}
</a>
</td>
<td class="col-5 miw-200">
<a href="" class="btn btn-sm btn-light">
{{ item.domain }}
({{ item.locale }})
</a>
</td>
<td class="col-2 miw-100 text-right">
<a href="{{ edit }}" class="btn btn-sm btn-primary mr-1">
<span class="fa fa-edit"></span>
</a>
<button type="submit" form="form-delete-{{ item.id }}" class="btn btn-sm btn-danger">
<span class="fa fa-trash"></span>
</button>
<form method="post" action="{{ path('admin_site_navigation_delete', {entity: item.id}) }}" id="form-delete-{{ item.id }}" data-form-confirm>
<input type="hidden" name="_method" value="DELETE">
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ item.id) }}">
</form>
</td>
</tr>
{% else %}
<tr>
<td class="col-12 text-center p-4 text-black-50" colspan="3">
<div class="display-1">
<span class="fa fa-search"></span>
</div>
<div class="display-5 mt-3">
{{ 'No result'|trans }}
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}

View file

@ -1,39 +0,0 @@
{% extends '@Core/admin/layout.html.twig' %}
{% block title %}{{ 'Navigations'|trans }} - {{ parent() }}{% endblock %}
{% block body %}
<div class="bg-light pl-5 pr-4 pt-5 pb-5">
<div class="crud-header">
<h1 class="crud-header-title">Nouvelle navigation</h1>
<div class="crud-header-actions">
<div class="btn-group">
<a href="{{ path('admin_site_navigation_index') }}" class="btn btn-light">
<span class="fa fa-list pr-1"></span>
{{ 'Back to the list'|trans }}
</a>
<button type="submit" form="form-main" class="btn btn-primary">
<span class="fa fa-save pr-1"></span>
{{ 'Save'|trans }}
</button>
</div>
</div>
</div>
</div>
<form action="{{ app.request.uri }}" method="post" id="form-main" enctype="multipart/form-data">
<div class="tab-content">
<div class="tab-pane active">
<div class="tab-form">
{{ include('@Core/site/navigation_admin/_form.html.twig') }}
</div>
</div>
</div>
{{ form_rest(form) }}
</form>
{% endblock %}

View file

@ -1,53 +0,0 @@
{% extends '@Core/admin/layout.html.twig' %}
{% block title %}{{ 'Navigations'|trans }} - {{ parent() }}{% endblock %}
{% block body %}
<div class="bg-light pl-5 pr-4 pt-5 pb-5">
<div class="crud-header">
<h1 class="crud-header-title">{{ entity.label }}</h1>
<div class="crud-header-actions">
<div class="btn-group">
<a href="{{ path('admin_site_navigation_index') }}" class="btn btn-secondary">
<span class="fa fa-list pr-1"></span>
{{ 'Back to the list'|trans }}
</a>
<a href="{{ path('admin_site_navigation_edit', {entity: entity.id}) }}" class="btn btn-primary">
<span class="fa fa-edit pr-1"></span>
{{ 'Edit'|trans }}
</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12 p-3">
<ul class="list-group">
<li class="list-group-item">
<span class="font-weight-bold pb-2 d-block">{{ 'Label'|trans }}</span>
{{ entity.label }}
</li>
<li class="list-group-item">
<span class="font-weight-bold pb-2 d-block">{{ 'Domain'|trans }}</span>
{{ entity.domain }}
</li>
<li class="list-group-item">
<span class="font-weight-bold pb-2 d-block">{{ 'Locale'|trans }}</span>
{{ entity.locale }}
</li>
<li class="list-group-item">
<span class="font-weight-bold pb-2 d-block">{{ 'Code'|trans }}</span>
{{ entity.code }}
</li>
</ul>
</div>
</div>
{% endblock %}