Files
alrahma_sunday_school_api/app/Services/Navigation/NavbarService.php
T
2026-03-11 17:53:15 -04:00

56 lines
1.5 KiB
PHP

<?php
namespace App\Services\Navigation;
use App\Models\NavItem;
use App\Models\RoleNavItem;
use Illuminate\Support\Facades\Cache;
class NavbarService
{
public function getMenuForRoles(array $roles): array
{
$roles = array_values(array_filter(array_map(fn ($r) => strtolower(trim((string) $r)), $roles)));
$cacheKey = 'navbar_' . md5(json_encode($roles));
return Cache::remember($cacheKey, 300, function () use ($roles) {
$allowedIds = RoleNavItem::getNavItemIdsForRoles($roles);
if (empty($allowedIds)) {
return [];
}
$rows = NavItem::query()
->where('is_enabled', 1)
->orderBy('sort_order', 'asc')
->get()
->toArray();
$byId = [];
foreach ($rows as $row) {
if (in_array((int) $row['id'], $allowedIds, true)) {
$row['children'] = [];
$byId[$row['id']] = $row;
}
}
$tree = [];
foreach ($byId as $id => &$node) {
$pid = $node['menu_parent_id'] ?? null;
if ($pid && isset($byId[$pid])) {
$byId[$pid]['children'][] = &$node;
} else {
$tree[] = &$node;
}
}
unset($node);
return $tree;
});
}
public function clearCache(): void
{
Cache::flush();
}
}