From fa3923d5e09e1ec4823a5f030765e5102efa90b1 Mon Sep 17 00:00:00 2001 From: Ferdinand Kuhl Date: Thu, 28 Nov 2024 12:29:28 +0100 Subject: [PATCH] allow to use eel expressions in all Menu values --- Classes/MenuService/SettingsService.php | 26 +++++++++++++++++++++++++ Configuration/Settings.yaml | 17 ++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 Configuration/Settings.yaml diff --git a/Classes/MenuService/SettingsService.php b/Classes/MenuService/SettingsService.php index f0a059d..796dd03 100644 --- a/Classes/MenuService/SettingsService.php +++ b/Classes/MenuService/SettingsService.php @@ -12,6 +12,8 @@ namespace DigiComp\Menu\MenuService; * source code. */ +use Neos\Eel\EelEvaluatorInterface; +use Neos\Eel\Utility; use Neos\Flow\Annotations as Flow; /** @@ -30,6 +32,15 @@ class SettingsService implements ServiceInterface */ protected array $items = []; + #[Flow\InjectConfiguration(path: 'defaultEelContext', package: 'DigiComp.Menu')] + protected array $defaultContext = []; + + /** + * @Flow\Inject + * @var EelEvaluatorInterface + */ + protected $eelEvaluator; + public function getItems(string $forPath = null): \Iterator { if ($forPath) { @@ -45,6 +56,21 @@ class SettingsService implements ServiceInterface } ); } + foreach ($items as $itemName => &$item) { + \array_walk_recursive( + $item, + fn (&$item) => $item = + \is_string($item) && \str_starts_with($item, '${') && \str_ends_with($item, '}') + ? Utility::evaluateEelExpression( + $item, + $this->eelEvaluator, + [...$items, 'this' => $item, 'item' => $itemName], + $this->defaultContext + ) + : $item + ); + } + return new \ArrayIterator($items); } } diff --git a/Configuration/Settings.yaml b/Configuration/Settings.yaml new file mode 100644 index 0000000..41b9c38 --- /dev/null +++ b/Configuration/Settings.yaml @@ -0,0 +1,17 @@ +DigiComp: + Menu: + defaultEelContext: + String: 'Neos\Eel\Helper\StringHelper' + Array: 'Neos\Eel\Helper\ArrayHelper' + Date: 'Neos\Eel\Helper\DateHelper' + Configuration: 'Neos\Eel\Helper\ConfigurationHelper' + Math: 'Neos\Eel\Helper\MathHelper' + Json: 'Neos\Eel\Helper\JsonHelper' + Security: 'Neos\Eel\Helper\SecurityHelper' + Translation: 'Neos\Flow\I18n\EelHelper\TranslationHelper' + StaticResource: 'Neos\Flow\ResourceManagement\EelHelper\StaticResourceHelper' + Type: 'Neos\Eel\Helper\TypeHelper' + I18n: 'Neos\Flow\I18n\EelHelper\TranslationHelper' + File: 'Neos\Eel\Helper\FileHelper' + q: 'Neos\Eel\FlowQuery\FlowQuery::q' + BaseUri: 'Neos\Fusion\Eel\BaseUriHelper'