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.
70 lines
1.5 KiB
PHP
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;
|
|
}
|
|
}
|