From 90ffb7cf7a70c522c85d8cf5f041b21a67b8a964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Thu, 5 Dec 2019 22:57:15 +0100 Subject: [PATCH] CRUD new action --- .../Controller/EntityPersonCRUDController.php | 41 ++++++++++++++++++- Entity/HasPerson.php | 34 +++++++++++++++ Resources/views/CRUD/_new_title.html.twig | 1 + Resources/views/CRUD/new.html.twig | 16 ++++++++ 4 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 Entity/HasPerson.php create mode 100644 Resources/views/CRUD/_new_title.html.twig create mode 100644 Resources/views/CRUD/new.html.twig diff --git a/CRUD/Controller/EntityPersonCRUDController.php b/CRUD/Controller/EntityPersonCRUDController.php index 262c8d8d0..ffd7ece3e 100644 --- a/CRUD/Controller/EntityPersonCRUDController.php +++ b/CRUD/Controller/EntityPersonCRUDController.php @@ -18,11 +18,50 @@ namespace Chill\PersonBundle\CRUD\Controller; use Chill\MainBundle\CRUD\Controller\CRUDController; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Chill\PersonBundle\Entity\Person; /** * CRUD Controller for entities attached to a Person - * */ class EntityPersonCRUDController extends CRUDController { + protected function createEntity($action, Request $request): object + { + if (FALSE === $request->query->has('person_id')) { + throw $this->createNotFoundException('the person is not set'); + } + + $entity = parent::createEntity($action, $request); + + $person = $this->getDoctrine() + ->getRepository(Person::class) + ->find($request->query->getInt('person_id')) + ; + + if (NULL === $person) { + throw $this->createNotFoundException('the person with this id is not found'); + } + + $entity->setPerson($person); + + return $entity; + } + + protected function getTemplateFor($action, $entity, Request $request) + { + if ($this->hasCustomTemplate($action, $entity, $request)) { + return $this->getActionConfig($action)['template']; + } + + switch ($action) { + case 'new': + return '@ChillPerson/CRUD/new.html.twig'; + case 'edit': + return '@ChillPerson/CRUD/edit.html.twig'; + default: + return parent::getTemplateFor($action, $entity, $request); + } + } } diff --git a/Entity/HasPerson.php b/Entity/HasPerson.php new file mode 100644 index 000000000..e200182bc --- /dev/null +++ b/Entity/HasPerson.php @@ -0,0 +1,34 @@ +, + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +namespace Chill\PersonBundle\Entity; + +use Chill\PersonBundle\Entity\Person; + +/** + * Interface which applies to entities which are associated to a single person + * + */ +interface HasPerson +{ + public function setPerson(Person $person = null): HasPerson; + + public function getPerson(): ?Person; +} diff --git a/Resources/views/CRUD/_new_title.html.twig b/Resources/views/CRUD/_new_title.html.twig new file mode 100644 index 000000000..4a733e226 --- /dev/null +++ b/Resources/views/CRUD/_new_title.html.twig @@ -0,0 +1 @@ +{{ ('crud.' ~ crud_name ~ '.title_new')|trans({'%person%': person|chill_entity_render_string }) }} \ No newline at end of file diff --git a/Resources/views/CRUD/new.html.twig b/Resources/views/CRUD/new.html.twig new file mode 100644 index 000000000..c5ac70128 --- /dev/null +++ b/Resources/views/CRUD/new.html.twig @@ -0,0 +1,16 @@ +{% extends '@ChillPerson/layout.html.twig' %} + +{% set person = entity.person %} +{% set activeRouteKey = '' %} + +{% block title %} +{% embed('@ChillPerson/CRUD/_new_title.html.twig') %}{% endembed %} +{% endblock %} + +{% block personcontent %} +{% embed '@ChillMain/CRUD/_new_content.html.twig' %} + {% block crud_content_header %} +

{{ ('crud.'~crud_name~'.title_new')|trans({'%person%': person|chill_entity_render_string }) }}

+ {% endblock crud_content_header %} +{% endembed %} +{% endblock %}