{{-- Data contract expected from EmployeeCourseController@show: $course = Course { title, slug, description, category, duration_minutes, thumbnail, pivot: { status, progress_percent, assigned_at, due_at, started_at, completed_at, time_spent_seconds, final_score_percent, }, modules: Collection { title, module_number, sort_order, module_type, // 'content' | 'knowledge_check' | 'final_assessment' | 'certificate' progress_status, // 'not_started' | 'in_progress' | 'completed' time_spent_seconds, completed_at, }, } --}} @extends('layouts.app') @section('title', $course->title ?? 'Course') @section('content') {{-- DUMMY DATA — remove this block once EmployeeCourseController@show passes a real $course with ->pivot and ->modules loaded. Uses "??" so real data always takes priority. --}} @php $mod = function (string $title, string $type, string $status) { return (object) [ 'title' => $title, 'module_type' => $type, 'progress_status' => $status, 'time_spent_seconds' => $status === 'not_started' ? 0 : 360, 'completed_at' => $status === 'completed' ? '2026-06-10' : null, ]; }; $course = $course ?? (object) [ 'title' => 'Fire Awareness', 'slug' => 'fire-awareness', 'description' => 'Understand fire risks in the workplace, prevention measures, and the correct evacuation procedure for your service.', 'category' => 'mandatory', 'duration_minutes' => 30, 'thumbnail' => null, 'pivot' => (object) [ 'status' => 'in_progress', 'progress_percent' => 60, 'assigned_at' => '2026-06-01', 'due_at' => '2026-08-01', 'started_at' => '2026-06-03', 'completed_at' => null, 'time_spent_seconds' => 1080, 'final_score_percent' => null, ], 'modules' => collect([ $mod('Introduction to Fire Safety', 'content', 'completed'), $mod('Common Causes of Fire', 'content', 'completed'), $mod('Evacuation Procedures', 'content', 'in_progress'), $mod('Knowledge Check', 'knowledge_check', 'not_started'), $mod('Final Assessment', 'final_assessment', 'not_started'), $mod('Certificate', 'certificate', 'not_started'), ]), ]; $statusMeta = match($course->pivot->status ?? 'not_started') { 'completed' => ['label' => 'Completed', 'class' => 'bg-secondary-container text-on-secondary-container', 'icon' => 'check_circle'], 'overdue' => ['label' => 'Overdue', 'class' => 'bg-error-container text-error', 'icon' => 'warning'], 'in_progress' => ['label' => 'In Progress', 'class' => 'bg-white text-primary', 'icon' => 'play_circle'], default => ['label' => 'Not Started', 'class' => 'bg-surface-container-high text-on-surface-variant', 'icon' => 'radio_button_unchecked'], }; $typeMeta = fn (string $type) => match($type) { 'knowledge_check' => ['icon' => 'quiz', 'label' => 'Knowledge Check'], 'final_assessment' => ['icon' => 'assignment_turned_in', 'label' => 'Final Assessment'], 'certificate' => ['icon' => 'workspace_premium', 'label' => 'Certificate'], default => ['icon' => 'article', 'label' => 'Content'], }; $modules = $course->modules ?? collect(); $nextModule = $modules->first(fn ($m) => ($m->progress_status ?? 'not_started') !== 'completed'); $nextModuleIndex = $nextModule ? $modules->search($nextModule) : null; $timeSpent = $course->pivot->time_spent_seconds ?? 0; $timeSpentLabel = $timeSpent >= 3600 ? floor($timeSpent / 3600) . 'h ' . floor(($timeSpent % 3600) / 60) . 'm' : floor($timeSpent / 60) . 'm'; @endphp {{-- Breadcrumb --}}
Dashboard chevron_right {{ $course->title }}
@if(session('status'))
check_circle

{{ session('status') }}

@endif {{-- Header --}}
@if(($course->category ?? null) === 'service_specific')

Service Specific

@endif

{{ $course->title }}

{{ $course->description }}

{{ $statusMeta['icon'] }} {{ $statusMeta['label'] }} schedule {{ $course->duration_minutes }} min total @if($course->pivot->due_at ?? null) event Due {{ \Carbon\Carbon::parse($course->pivot->due_at)->format('j F Y') }} @endif
{{ $course->pivot->progress_percent ?? 0 }}%

Your Progress

@if($course->pivot->status !== 'completed')

@if($nextModule) Next up: {{ $nextModule->title }} @else All modules complete — nice work. @endif

@if($nextModule) {{ ($course->pivot->progress_percent ?? 0) > 0 ? 'Continue' : 'Start Course' }} @endif
@endif
{{-- Modules list --}}
view_list

Course Modules

{{ $modules->count() }} {{ Str::plural('module', $modules->count()) }}
@forelse($modules as $index => $courseModule) @php $mStatus = $courseModule->progress_status ?? 'not_started'; $isLocked = $mStatus === 'not_started' && $index > 0 && ($modules[$index - 1]->progress_status ?? 'not_started') !== 'completed'; $mBadge = match($mStatus) { 'completed' => ['label' => 'Completed', 'class' => 'text-secondary'], 'in_progress' => ['label' => 'In progress', 'class' => 'text-primary'], default => ['label' => 'Not started', 'class' => 'text-outline'], }; $type = $typeMeta($courseModule->module_type); @endphp
@if($mStatus === 'completed') check @else {{ $type['icon'] }} @endif

{{ $index + 1 }}. {{ $courseModule->title }}

{{ $type['label'] }}

{{ $mBadge['label'] }} @php $isQuiz = in_array($courseModule->module_type, ['knowledge_check', 'final_assessment'], true); @endphp @if(!$isLocked && $mStatus !== 'completed') @if($isQuiz) quiz Take assessment @else {{ $mStatus === 'in_progress' ? 'Resume' : 'Start' }} @endif @elseif($isLocked) lock @elseif($isQuiz) Retake @else Review @endif
@empty
No modules have been added to this course yet.
@endforelse
{{-- Course summary & about (below all modules) --}} @if($course->summary || $course->about_course)
info

About this course

@if($course->summary)

{{ $course->summary }}

@endif @php $aboutImage = $course->header_image ?: $course->thumbnail; @endphp @if($aboutImage) {{ $course->title }} @endif @if($course->about_course)
{{ $course->about_course }}
@endif
@endif
{{-- Sidebar: key facts + certificate --}}

Course Details

Assigned
{{ ($course->pivot->assigned_at ?? null) ? \Carbon\Carbon::parse($course->pivot->assigned_at)->format('j M Y') : '—' }}
Due
{{ ($course->pivot->due_at ?? null) ? \Carbon\Carbon::parse($course->pivot->due_at)->format('j M Y') : '—' }}
Time Spent
{{ $timeSpentLabel }}
@if($course->pivot->final_score_percent ?? null)
Final Score
{{ $course->pivot->final_score_percent }}%
@endif @if($course->pivot->completed_at ?? null)
Completed
{{ \Carbon\Carbon::parse($course->pivot->completed_at)->format('j M Y') }}
@endif
@if($course->pivot->status === 'completed')
workspace_premium

Certificate Earned

Download your completion certificate for your records.

View / Download PDF
@else

Need Help?

Email training.admin@segralms.com or use Contact Support in the sidebar.

@endif {{-- What you'll learn --}} @php $learnPoints = collect(preg_split('/\r\n|\r|\n/', (string) ($course->what_youll_learn ?? ''))) ->map(fn ($p) => trim($p))->filter()->values(); @endphp @if($learnPoints->isNotEmpty())
checklist

What you'll learn

    @foreach($learnPoints as $point)
  • adjust {{ $point }}
  • @endforeach
@endif
@endsection