From aca3b7d6768f3c6b25a2add9553d8e3e56b5c988 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Wed, 12 May 2021 15:24:01 +0200 Subject: [PATCH] backports murph-skeleton --- core/Controller/Admin/Crud/CrudController.php | 18 +++++++++++++++--- core/Crud/Field/Field.php | 3 ++- .../views/admin/crud/field/date.html.twig | 5 ++++- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/core/Controller/Admin/Crud/CrudController.php b/core/Controller/Admin/Crud/CrudController.php index abba5ea..dd9d7d7 100644 --- a/core/Controller/Admin/Crud/CrudController.php +++ b/core/Controller/Admin/Crud/CrudController.php @@ -43,7 +43,7 @@ abstract class CrudController extends AdminController ]); } - protected function doNew(EntityInterface $entity, EntityManager $entityManager, Request $request): Response + protected function doNew(EntityInterface $entity, EntityManager $entityManager, Request $request, callable $beforeCreate = null): Response { $configuration = $this->getConfiguration(); $form = $this->createForm($configuration->getForm('new'), $entity); @@ -52,6 +52,10 @@ abstract class CrudController extends AdminController $form->handleRequest($request); if ($form->isValid()) { + if ($beforeCreate !== null) { + call_user_func_array($beforeCreate, [$entity, $form, $request]); + } + $entityManager->create($entity); $this->addFlash('success', 'The data has been saved.'); @@ -79,7 +83,7 @@ abstract class CrudController extends AdminController ]); } - protected function doEdit(EntityInterface $entity, EntityManager $entityManager, Request $request): Response + protected function doEdit(EntityInterface $entity, EntityManager $entityManager, Request $request, callable $beforeUpdate = null): Response { $configuration = $this->getConfiguration(); $form = $this->createForm($configuration->getForm('edit'), $entity); @@ -88,6 +92,10 @@ abstract class CrudController extends AdminController $form->handleRequest($request); if ($form->isValid()) { + if ($beforeUpdate !== null) { + call_user_func_array($beforeUpdate, [$entity, $form, $request]); + } + $entityManager->update($entity); $this->addFlash('success', 'The data has been saved.'); @@ -105,11 +113,15 @@ abstract class CrudController extends AdminController ]); } - protected function doDelete(EntityInterface $entity, EntityManager $entityManager, Request $request): Response + protected function doDelete(EntityInterface $entity, EntityManager $entityManager, Request $request, callable $beforeDelete = null): Response { $configuration = $this->getConfiguration(); if ($this->isCsrfTokenValid('delete'.$entity->getId(), $request->request->get('_token'))) { + if ($beforeDelete !== null) { + call_user_func($beforeDelete, $entity); + } + $entityManager->delete($entity); $this->addFlash('success', 'The data has been removed.'); diff --git a/core/Crud/Field/Field.php b/core/Crud/Field/Field.php index 165951c..2155f84 100644 --- a/core/Crud/Field/Field.php +++ b/core/Crud/Field/Field.php @@ -17,6 +17,7 @@ abstract class Field public function buildView(Environment $twig, $entity, array $options) { return $twig->render($this->getView($options), [ + 'entity' => $entity, 'value' => $this->getValue($entity, $options), 'options' => $options, ]); @@ -53,7 +54,7 @@ abstract class Field } elseif (null !== $options['property_builder']) { $value = call_user_func($options['property_builder'], $entity, $options); } else { - throw new CrudConfigurationException('Unable to get the value. One of "property" and "property_builder" is required.'); + $value = null; } return $value; diff --git a/core/Resources/views/admin/crud/field/date.html.twig b/core/Resources/views/admin/crud/field/date.html.twig index 449180d..98c34c0 100644 --- a/core/Resources/views/admin/crud/field/date.html.twig +++ b/core/Resources/views/admin/crud/field/date.html.twig @@ -1 +1,4 @@ -{{ value|date(options.format) }} + + + {{ value|date(options.format) }} +