@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