From 443ccabd0b27c3476c4bdb33b9a78aa828ffdad0 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Sat, 30 Apr 2022 14:31:37 +0200 Subject: [PATCH] CrudConfiguration::setAction can receive a callable instead of a boolean in 'enabled' param --- src/core/Crud/CrudConfiguration.php | 19 ++++++++++++++----- .../Resources/views/admin/crud/edit.html.twig | 6 +++--- .../views/admin/crud/index.html.twig | 10 +++++----- .../Resources/views/admin/crud/show.html.twig | 2 +- 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/core/Crud/CrudConfiguration.php b/src/core/Crud/CrudConfiguration.php index 42f0341..f25ee94 100644 --- a/src/core/Crud/CrudConfiguration.php +++ b/src/core/Crud/CrudConfiguration.php @@ -2,8 +2,6 @@ namespace App\Core\Crud; -use App\Core\Crud\Exception\CrudConfigurationException; - /** * class CrudConfiguration. * @@ -109,7 +107,7 @@ class CrudConfiguration /* -- */ - public function setAction(string $page, string $action, bool $enabled): self + public function setAction(string $page, string $action, bool|callable $enabled): self { if (!isset($this->actions[$page])) { $this->actions[$page] = []; @@ -120,9 +118,20 @@ class CrudConfiguration return $this; } - public function getAction(string $page, string $action, bool $default = true) + public function getAction(string $page, string $action, bool $default = true, array $callableParamaters = []) { - return $this->actions[$page][$action] ?? $default; + if (!isset($this->actions[$page][$action])) { + return $default; + } + + if (is_bool($this->actions[$page][$action])) { + return $this->actions[$page][$action]; + } + + return call_user_func_array( + $this->actions[$page][$action], + $callableParamaters + ); } public function setBatchAction(string $page, string $action, string $label, callable $callback): self diff --git a/src/core/Resources/views/admin/crud/edit.html.twig b/src/core/Resources/views/admin/crud/edit.html.twig index 19d0c3d..7f1f152 100644 --- a/src/core/Resources/views/admin/crud/edit.html.twig +++ b/src/core/Resources/views/admin/crud/edit.html.twig @@ -24,7 +24,7 @@ {% endif %} - {% if configuration.action(context, 'show', true) %} + {% if configuration.action(context, 'show', true, [entity]) %} {{ configuration.actionTitle(context, 'show', 'Show')|trans|build_string(entity) }} @@ -42,7 +42,7 @@ {% set header_actions_dropdown_menu = '' %} {% endif %} - {% if configuration.action(context, 'delete', true) %} + {% if configuration.action(context, 'delete', true, [entity]) %} {% set item %} diff --git a/src/core/Resources/views/admin/crud/show.html.twig b/src/core/Resources/views/admin/crud/show.html.twig index a4fcaed..88ed3f7 100644 --- a/src/core/Resources/views/admin/crud/show.html.twig +++ b/src/core/Resources/views/admin/crud/show.html.twig @@ -24,7 +24,7 @@ {% endif %} - {% if configuration.action(context, 'edit', true) %} + {% if configuration.action(context, 'edit', true, [entity]) %}