Files
oficial/app/src/Service/Menu.php
Juan Pablo Vial b97916cfc4 Menu
2024-04-02 19:04:57 -03:00

45 lines
1.3 KiB
PHP

<?php
namespace Incoviba\Service;
use Incoviba\Repository;
class Menu
{
public function __construct(protected Repository\Menu $menuRepository, protected Permission $permissionService, protected object $urls) {}
public function build(int $user_id): string
{
$menus = $this->getValid($user_id);
$output = [];
foreach ($menus as $menu) {
$output []= $this->buildItem($menu);
}
return implode(PHP_EOL, $output);
}
protected function buildItem(mixed $item): string
{
if (isset($item->submenus)) {
return $this->buildDropdown($item);
}
return "<a class=\"item\" href=\"{$this->urls->base}/{$item->url}\">{$item->title}</a>";
}
protected function buildDropdown(mixed $item): string
{
$output []= '<div class="ui simple dropdown item">';
$output []= $item->title;
$output []= '<i class="dropdown icon"></i>';
$output []= '<div class="menu">';
foreach ($item->submenus as $menu) {
$output []= $this->buildItem($menu);
}
$output []= '</div>';
$output []= '</div>';
return implode(PHP_EOL, $output);
}
public function getValid(int $user_id): array
{
return $this->menuRepository->fetchByUser($user_id);
}
}