@props(['active' => null])
@php
$user = auth()->user();
$ws = $user?->currentWorkspace;
$wsInitials = $ws ? mb_strtoupper(mb_substr(preg_replace('/[^A-Za-z\s]/', '', $ws->name), 0, 2)) : '—';
$userInit = $user ? mb_strtoupper(mb_substr($user->name, 0, 1) . mb_substr(explode(' ', $user->name)[1] ?? '', 0, 1)) : '?';
// All workspaces the user can access: owned + via TeamMember.
$workspaces = collect();
if ($user) {
$workspaces = $workspaces->merge($user->ownedWorkspaces);
if (method_exists($user, 'teamMemberships')) {
$workspaces = $workspaces->merge($user->teamMemberships->pluck('workspace'));
} else {
// Fallback via TeamMember model
$memberWsIds = \App\Models\TeamMember::where('user_id', $user->id)->pluck('workspace_id');
$workspaces = $workspaces->merge(\App\Models\Workspace::whereIn('id', $memberWsIds)->get());
}
$workspaces = $workspaces->unique('id')->values();
// Fallback: at least the currently-active workspace.
if ($workspaces->isEmpty() && $ws) {
$workspaces = collect([$ws]);
}
}
$sitesUsed = $ws ? \App\Models\Site::count() : 0;
$sitesQuota = $ws?->quotas['sites'] ?? 0;
$planPct = $sitesQuota ? min(100, round($sitesUsed / $sitesQuota * 100)) : 0;
$items = [
['name' => 'dashboard', 'label' => 'Dashboard', 'route' => 'dashboard',
'svg' => ''],
['name' => 'sites', 'label' => 'Sites', 'route' => 'sites.index',
'svg' => '',
'count' => \App\Models\Site::count() ?: null],
['name' => 'servers', 'label' => 'Server', 'route' => 'servers.index',
'svg' => '',
'count' => \App\Models\Server::count() ?: null],
['name' => 'backups', 'label' => 'Backups', 'route' => 'backups.index',
'svg' => ''],
['name' => 'security', 'label' => 'Sicherheit','route' => 'security.index',
'svg' => ''],
['name' => 'team', 'label' => 'Team', 'route' => 'team.index',
'svg' => ''],
['name' => 'settings', 'label' => 'Einstellungen','route' => 'settings.index',
'svg' => ''],
];
@endphp