@extends('layouts.admin') @section('title', 'User • ' . ($user->name ?? $user->email)) @php use Illuminate\Support\Facades\Route as RouteFacade; use Carbon\Carbon; function formatDate($date, $format = 'M d, Y H:i') { if (!$date) return 'N/A'; try { return is_string($date) ? Carbon::parse($date)->format($format) : $date->format($format); } catch (\Throwable $e) { return 'Invalid Date'; } } // Where inline edits post $inlineUrl = RouteFacade::has('admin.users.inline') ? route('admin.users.inline', $user) : url("/admin/users/{$user->id}/inline"); // Enums from schema $statusEnum = ['potential','active','suspended','inactive','pending']; $accessTypeEnum = ['premium','freemium','trial','basic','free']; $paymentMethodEnum = ['free','credit_card','telco_billing','school_billing','tuition_billing']; // Status badge $statusLower = strtolower($user->status ?? 'unknown'); $statusBadgeClass = match($statusLower) { 'active' => 'bg-success', 'suspended' => 'bg-danger', 'inactive' => 'bg-secondary', 'pending' => 'bg-warning', 'potential' => 'bg-info', default => 'bg-secondary', }; // helper: route if exists else fallback URL $routeOr = function(string $name, $param, string $fallback) { return RouteFacade::has($name) ? route($name, $param) : url($fallback); }; @endphp @section('content')
{{-- Header --}}

{{ $user->name ?? 'User Profile' }}

User Profile & Management

{{-- KPIs --}}
{{ number_format($user->maxile_level ?? 0, 2) }}

Maxile Level

{{ $user->game_level ?? 0 }}

Game Level

{{ $stats['tests_completed'] ?? 0 }}

Tests Completed

{{ $stats['quizzes_completed'] ?? 0 }}

Quizzes Completed

{{-- Profile left --}}
Profile
{{-- Basics --}}
{{-- Contact --}}
{{-- Dates --}}
{{-- Account state --}}
{{ ucfirst($user->status) }}
@if($user->role) {{ $user->role->role }} @else No Role @endif
{{-- Plans & billing --}}
{{-- Telco/Partner --}}
{{-- Performance knobs --}}
{{-- Booleans --}}
partner_verified ? 'checked' : '' }}>
diagnostic ? 'checked' : '' }}>
email_verified ? 'checked' : '' }}>
is_admin ? 'checked' : '' }}>
{{-- Important dates --}}

Joined: {{ formatDate($user->created_at, 'M d, Y') }} Updated: {{ formatDate($user->updated_at, 'M d, Y') }}
{{-- Snapshot --}}
Snapshot
{{ $stats['total_questions_answered'] ?? 0 }}
Questions
{{ $stats['correct_answers'] ?? 0 }}
Correct
{{ $stats['tracks_passed'] ?? 0 }}
Tracks Passed
{{ number_format($stats['accuracy_percentage'] ?? 0, 1) }}%
Accuracy
{{-- Tabs --}}
{{-- Tests --}}
@forelse($user->tests->take(50) as $test) @empty @endforelse
IDCompletedResultAttemptsKudosDate
{{ $test->id }} {{ $test->pivot->test_completed ? 'Yes' : 'No' }} {{ $test->pivot->result ?? 'N/A' }} {{ $test->pivot->attempts ?? 0 }} {{ $test->pivot->kudos ?? 0 }} {{ formatDate($test->pivot->completed_date, 'M d, Y') }}
No tests found
{{-- Quizzes --}}
@forelse($user->quizzes->take(50) as $quiz) @empty @endforelse
IDCompletedResultAttemptsDate
id}") }}">{{ $quiz->id }} {{ $quiz->pivot->quiz_completed ? 'Yes' : 'No' }} {{ $quiz->pivot->result ?? 'N/A' }} {{ $quiz->pivot->attempts ?? 0 }} {{ formatDate($quiz->pivot->completed_date, 'M d, Y') }}
No quizzes found
{{-- Questions --}}
@forelse($user->myQuestions->take(50) as $q) @empty @endforelse
IDAnsweredCorrectAttemptsDifficultyKudosTypeTestQuizDate
id}") }}">{{ $q->id }} {{ $q->pivot->question_answered ? 'Yes' : 'No' }} {{ $q->pivot->correct ? '✓' : '✗' }} {{ $q->pivot->attempts }} {{ $q->difficulty->difficulty}} {{ $q->pivot->kudos }} {{ $q->pivot->assessment_type ?: 'N/A' }} @if($q->pivot->test_id) {{ $q->pivot->test_id }} @else N/A @endif @if($q->pivot->quiz_id) pivot->quiz_id}") }}">{{ $q->pivot->quiz_id }} @else N/A @endif {{ formatDate($q->pivot->answered_date, 'M d, Y') }}
No questions found
{{-- Tracks --}}
@forelse($user->testedTracks as $track) @empty @endforelse
TrackMaxilePassedDonenessTest Date
id}") }}"> {{ $track->track }} {{ number_format($track->pivot->track_maxile, 2) }} {!! $track->pivot->track_passed ? 'Yes' : 'No' !!} {{ number_format($track->pivot->doneNess, 2) }}% {{ formatDate($track->pivot->track_test_date) }}
No track attempts
{{-- Skills --}}
@forelse($user->skill_user->take(50) as $skill) @empty @endforelse
SkillMaxilePassedDifficultyTriesCorrect StreakTotal CorrectTotal IncorrectFail StreakTest Date
id}") }}">{{ $skill->skill }} {{ number_format($skill->pivot->skill_maxile, 2) }} {!! $skill->pivot->skill_passed ? 'Yes' : 'No' !!} {{ $skill->pivot->difficulty_passed }} {{ $skill->pivot->noOfTries }} {{ $skill->pivot->correct_streak }} {{ $skill->pivot->total_correct_attempts }} {{ $skill->pivot->total_incorrect_attempts }} {{ $skill->pivot->fail_streak }} {{ formatDate($skill->pivot->skill_test_date) }}
No skill attempts
@if($user->skill_user->count() > 50)

Showing first 50 of {{ $user->skill_user->count() }}

@endif
{{-- Fields --}}
@if($user->fields->count() > 0)
@foreach($user->fields as $field) @endforeach
FieldField MaxileMonth AchievedTest Date
id}") }}">{{ $field->field }} {{ number_format($field->pivot->field_maxile, 2) }} {{ $field->pivot->month_achieved }} {{ formatDate($field->pivot->field_test_date) }}
@else
No field attempts found
@endif
{{-- Enrolments (house_role_user via enrolledClasses) --}}
@forelse($user->enrolledClasses as $en) @empty @endforelse
HouseRolePlanProgressStartExpiryPaymentAmount
@php $houseId = $en->house->id ?? $en->pivot->house_id; $houseName = $en->house->name ?? ('House #'.$houseId); @endphp {{ $houseName }} @php $roleId = $en->role->id ?? $en->pivot->role_id; $roleName = $en->role->role ?? ('Role #'.$roleId); @endphp {{ $roleName }} {{ $en->pivot->plan_id ?: '—' }} {{ (int)$en->pivot->progress }}% {{ formatDate($en->pivot->start_date, 'M d, Y') }} {{ formatDate($en->pivot->expiry_date, 'M d, Y') }} {{ $en->pivot->payment_status ?: '—' }} @if(!is_null($en->pivot->amount_paid)) {{ number_format($en->pivot->amount_paid, 2) }} {{ $en->pivot->currency_code ?: '' }} @else — @endif
No enrolments found
{{-- Logs --}}
@forelse($user->logs->take(50) as $log) @empty @endforelse
DateActionDetails
{{ formatDate($log->created_at, 'M d H:i') }} {{ $log->action ?? 'Unknown' }} {{ $log->details ?? 'No details' }}
No logs found
@endsection @push('styles') @endpush @push('scripts') @endpush