DigiComp.Menu/Classes/MenuService/SettingsService.php

77 lines
1.9 KiB
PHP
Raw Normal View History

<?php
2021-05-12 02:01:22 +02:00
namespace DigiComp\Menu\MenuService;
2017-06-03 11:39:59 +02:00
/*
* This file is part of the DigiComp.Menu package.
*
* (c) digital competence
*
* This package is Open Source Software. For the full copyright and license
* information, please view the LICENSE file which was distributed with this
* source code.
*/
use Neos\Eel\EelEvaluatorInterface;
use Neos\Eel\Utility;
use Neos\Flow\Annotations as Flow;
/**
* @Flow\Scope("singleton")
*/
2017-06-03 11:39:59 +02:00
class SettingsService implements ServiceInterface
{
/**
* @Flow\InjectConfiguration(type="Menu")
* @var array
*/
protected array $menuConfiguration;
2017-06-03 11:39:59 +02:00
/**
* @var array
*/
2023-02-07 16:57:50 +01:00
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
2017-06-03 11:39:59 +02:00
{
if ($forPath) {
$items = &$this->menuConfiguration[$forPath];
2017-06-03 11:48:32 +02:00
} else {
2017-06-03 11:39:59 +02:00
$items = &$this->menuConfiguration;
}
if ($items) {
2023-02-07 16:44:52 +01:00
\uasort(
2021-05-12 02:01:22 +02:00
$items,
2023-02-07 16:44:52 +01:00
static function ($a, $b) {
2017-06-03 11:39:59 +02:00
return $a['sorting'] > $b['sorting'];
}
);
}
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);
}
2021-05-12 02:01:22 +02:00
}