Files
Chamilo/vendor/knplabs/knp-menu/src/Knp/Menu/MenuFactory.php
T
Xes 73154ae174
Behat tests 1.11.x 🐞 / PHP 7.4 Test on ubuntu-latest (push) Canceled after 0s
PHP-CS-Fixer / composer_install (7.4) (push) Canceled after 0s
Chamilo 1.11.40 (ZIP oficial v1.11.40)
Fuente: https://github.com/chamilo/chamilo-lms/releases/download/v1.11.40/chamilo-1.11.40.zip
sha256: 1cf4bf2cc7bae1ef1a1eff643235db1d552f78ddf4b6dd1e2d2dac9868679439
Snapshot independiente (rama huerfana); diffable vs 1.11.38. vendor incluido.
2026-08-06 17:59:45 +02:00

70 lines
1.5 KiB
PHP

<?php
namespace Knp\Menu;
use Knp\Menu\Factory\CoreExtension;
use Knp\Menu\Factory\ExtensionInterface;
/**
* Factory to create a menu from a tree
*/
class MenuFactory implements FactoryInterface
{
/**
* @var array[]
*/
private $extensions = [];
/**
* @var ExtensionInterface[]|null
*/
private $sorted;
public function __construct()
{
$this->addExtension(new CoreExtension(), -10);
}
public function createItem($name, array $options = [])
{
foreach ($this->getExtensions() as $extension) {
$options = $extension->buildOptions($options);
}
$item = new MenuItem($name, $this);
foreach ($this->getExtensions() as $extension) {
$extension->buildItem($item, $options);
}
return $item;
}
/**
* Adds a factory extension
*
* @param ExtensionInterface $extension
* @param int $priority
*/
public function addExtension(ExtensionInterface $extension, $priority = 0)
{
$this->extensions[$priority][] = $extension;
$this->sorted = null;
}
/**
* Sorts the internal list of extensions by priority.
*
* @return ExtensionInterface[]|null
*/
private function getExtensions()
{
if (null === $this->sorted) {
\krsort($this->extensions);
$this->sorted = !empty($this->extensions) ? \call_user_func_array('array_merge', $this->extensions) : [];
}
return $this->sorted;
}
}