@php if (!function_exists('krx_avatar_initial')) { function krx_avatar_initial($value) { $value = trim((string) $value); if ($value === '') { return 'K'; } if (function_exists('mb_substr') && function_exists('mb_strtoupper')) { return mb_strtoupper(mb_substr($value, 0, 1)); } return strtoupper(substr($value, 0, 1)); } } $userId = session('user_id') ?? auth()->id(); $userNickname = session('user_nickname', 'Usuário'); $userEmail = session('user_email', 'usuario@gigaxarena.com'); $currentRoute = \Illuminate\Support\Facades\Route::currentRouteName(); $dbRole = null; $dbAvatar = null; if ($userId) { try { $userRow = \Illuminate\Support\Facades\DB::table('users') ->select('*') ->where('id', $userId) ->first(); if ($userRow) { $dbRole = trim(strtolower((string) ($userRow->role ?? ''))); $dbAvatar = \App\Support\GigaxAvatar::fromUser($userRow); $freshNickname = trim((string) ($userRow->nickname ?? $userRow->name ?? '')); if ($freshNickname !== '') { $userNickname = $freshNickname; session(['user_nickname' => $freshNickname]); } } } catch (\Throwable $e) { $dbRole = null; $dbAvatar = null; } } $sessionRole = trim(strtolower((string) session('user_role', ''))); $userRole = $dbRole ?: $sessionRole ?: 'user'; if (!empty($dbRole)) { session(['user_role' => $dbRole]); } $staffRoles = ['admin', 'administrator', 'owner', 'moderator', 'mod', 'support', 'staff']; $isStaff = in_array($userRole, $staffRoles, true); $roleLabelMap = [ 'admin' => 'Administrador', 'administrator' => 'Administrador', 'owner' => 'Administrador', 'moderator' => 'Moderador', 'mod' => 'Moderador', 'support' => 'Suporte', 'staff' => 'Equipe', ]; $roleLabel = $roleLabelMap[$userRole] ?? 'Jogador'; $avatarUrl = $dbAvatar ?: \App\Support\GigaxAvatar::url(session('user_avatar')); if (!empty($avatarUrl)) { session(['user_avatar' => $avatarUrl]); } $onlineFriends = collect(); $offlineFriends = collect(); $inGameFriends = collect(); $pendingRequests = collect(); if ($userId) { try { $friendships = \App\Models\Friendship::query() ->with([ 'requester:id,nickname,avatar,avatar_url,is_online,last_seen_at', 'addressee:id,nickname,avatar,avatar_url,is_online,last_seen_at' ]) ->where(function ($q) use ($userId) { $q->where('requester_id', $userId) ->orWhere('addressee_id', $userId); }) ->where('status', 'accepted') ->latest() ->get(); $mappedFriends = $friendships->map(function ($friendship) use ($userId) { $friend = (int) $friendship->requester_id === (int) $userId ? $friendship->addressee : $friendship->requester; if (!$friend) { return null; } $lastSeenAt = !empty($friend->last_seen_at) ? \Carbon\Carbon::parse($friend->last_seen_at) : null; $isOnline = !empty($friend->is_online) || ($lastSeenAt && $lastSeenAt->gte(now()->subMinutes(10))); return [ 'id' => $friend->id, 'nickname' => $friend->nickname ?? 'Usuário', 'avatar' => $friend->avatar ?? $friend->avatar_url ?? '/default-avatar.png', 'avatar_url' => $friend->avatar_url ?? $friend->avatar ?? '/default-avatar.png', 'status' => $isOnline ? 'online' : 'offline', 'status_text' => $isOnline ? 'Online agora' : 'Offline', 'last_seen_human' => $lastSeenAt ? $lastSeenAt->diffForHumans() : 'Offline', ]; })->filter()->values(); $onlineFriends = $mappedFriends->where('status', 'online')->values(); $offlineFriends = $mappedFriends->where('status', 'offline')->values(); $inGameFriends = collect(); $pendingRequests = \Illuminate\Support\Facades\DB::table('friendships as f') ->join('users as u', 'u.id', '=', 'f.requester_id') ->where('f.addressee_id', $userId) ->where('f.status', 'pending') ->select('u.id', 'u.nickname', 'u.avatar', 'u.avatar_url') ->get(); } catch (\Throwable $e) { $onlineFriends = collect(); $offlineFriends = collect(); $inGameFriends = collect(); $pendingRequests = collect(); } } $onlineCount = $onlineFriends->count(); $offlineCount = $offlineFriends->count(); $inGameCount = $inGameFriends->count(); $pendingCount = $pendingRequests->count(); $totalFriends = $onlineCount + $offlineCount + $inGameCount; $hasDashboardRoute = \Illuminate\Support\Facades\Route::has('dashboard'); $hasLobbyRoute = \Illuminate\Support\Facades\Route::has('lobby.index'); $hasRankingRoute = \Illuminate\Support\Facades\Route::has('ranking'); $hasTeamsRoute = \Illuminate\Support\Facades\Route::has('teams.index'); $hasPlayersRoute = \Illuminate\Support\Facades\Route::has('players.index'); $hasTournamentsRoute = \Illuminate\Support\Facades\Route::has('tournaments.index'); $hasTrainingsRoute = \Illuminate\Support\Facades\Route::has('trainings.index'); $hasAdminMatchesRoute = \Illuminate\Support\Facades\Route::has('admin.matches'); $hasAdminLogsRoute = \Illuminate\Support\Facades\Route::has('admin.logs'); $hasAdminAntiCheatRoute = \Illuminate\Support\Facades\Route::has('admin.anti-cheat'); $profileUrl = \Illuminate\Support\Facades\Route::has('profile') ? route('profile') : url('/profile'); $profileEditUrl = \Illuminate\Support\Facades\Route::has('perfil.editar') ? route('perfil.editar') : url('/profile?tab=editar'); $profileHistoryUrl = \Illuminate\Support\Facades\Route::has('partidas') ? route('partidas') : url('/partidas'); $profileSettingsUrl = \Illuminate\Support\Facades\Route::has('configuracoes') ? route('configuracoes') : url('/profile?tab=configuracoes'); $friendsIndexUrl = \Illuminate\Support\Facades\Route::has('friends.index') ? route('friends.index') : url('/amigos'); $messagesUrl = $friendsIndexUrl . '#mensagens'; $logoutUrl = \Illuminate\Support\Facades\Route::has('logout') ? route('logout') : url('/logout'); $hasPrivateChatRoute = \Illuminate\Support\Facades\Route::has('friends.chat'); $hasFriendsAcceptRoute = \Illuminate\Support\Facades\Route::has('friends.accept'); $hasFriendsDeclineRoute = \Illuminate\Support\Facades\Route::has('friends.decline'); @endphp
GIGAX ARENA DASHBOARD OFICIAL / HUB / MATCHMAKING
{{ $userNickname }}
{{ $roleLabel }}
{{ strtoupper(mb_substr((string) $userNickname, 0, 1)) }}
{{ $userNickname }} {{ $userEmail }}
◌ Meu Perfil ⚙ Editar Perfil ✉ Mensagens
Amigos
{{ $totalFriends }}
Online, offline e em partida em um painel compacto.
ao vivo {{ now()->format('H:i') }}
@if($pendingCount > 0)
Solicitações
{{ $pendingCount }}
@foreach($pendingRequests as $req)
{{ $req->nickname ?? 'Usuário' }}
Quer ser seu amigo
@if($hasFriendsAcceptRoute)
@csrf
@endif @if($hasFriendsDeclineRoute)
@csrf
@endif
@endforeach
@endif
Em partida
{{ $inGameCount }}
@forelse($inGameFriends as $friend) @php $friendId = data_get($friend, 'id'); $friendName = data_get($friend, 'nickname', 'Usuário'); $friendAvatar = data_get($friend, 'avatar') ?? data_get($friend, 'avatar_url'); $friendChatUrl = $hasPrivateChatRoute && $friendId ? route('friends.chat', ['targetUserId' => $friendId]) : url('/amigos/chat/' . $friendId); @endphp
{{ $friendName }}
Em jogo agora
Chat
@empty
Nenhum amigo em partida.
@endforelse
Online
{{ $onlineCount }}
@forelse($onlineFriends as $friend) @php $friendId = data_get($friend, 'id'); $friendName = data_get($friend, 'nickname', 'Usuário'); $friendAvatar = data_get($friend, 'avatar') ?? data_get($friend, 'avatar_url'); $friendStatus = data_get($friend, 'status_text', 'Online agora'); $friendChatUrl = $hasPrivateChatRoute && $friendId ? route('friends.chat', ['targetUserId' => $friendId]) : url('/amigos/chat/' . $friendId); @endphp
{{ $friendName }}
{{ $friendStatus }}
Chat
@empty
Nenhum amigo online.
@endforelse
Offline
{{ $offlineCount }}
@forelse($offlineFriends->take(4) as $friend) @php $friendId = data_get($friend, 'id'); $friendName = data_get($friend, 'nickname', 'Usuário'); $friendAvatar = data_get($friend, 'avatar') ?? data_get($friend, 'avatar_url'); $friendLastSeen = data_get($friend, 'last_seen_human', 'Offline'); $friendChatUrl = $hasPrivateChatRoute && $friendId ? route('friends.chat', ['targetUserId' => $friendId]) : url('/amigos/chat/' . $friendId); @endphp
{{ $friendName }}
{{ $friendLastSeen }}
Chat
@empty
Nenhum amigo offline.
@endforelse
◷ Meu Histórico ⚙ Minhas Configurações @if($isStaff && ($hasAdminMatchesRoute || $hasAdminLogsRoute || $hasAdminAntiCheatRoute))
@if($hasAdminMatchesRoute) 🛡 Painel Admin @endif @if($hasAdminLogsRoute) 📝 Logs administrativos @endif @if($hasAdminAntiCheatRoute) 🎯 Anti-cheat / validação @endif @endif
@csrf
⌁ INTEGRAÇÃOCONTAS