@extends('layouts.app') @section('title', 'Academic Calendar') @section('page-title', 'Academic Calendar') @section('content') @php $isAdmin = auth()->user()->role === 'admin'; $currentMonth = \Carbon\Carbon::parse($month . '-01'); @endphp
@if(session('success'))
{{ session('success') }}
@endif {{-- Header with navigation --}}

{{ $currentMonth->format('F Y') }}

Today
Calendar List @if($isAdmin) @endif
{{-- Main Calendar / List --}}
@if($view === 'calendar') {{-- Calendar Grid --}}
@foreach(['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] as $day)
{{ $day }}
@endforeach
@php $firstDay = $currentMonth->copy()->startOfMonth(); $lastDay = $currentMonth->copy()->endOfMonth(); $startPadding = $firstDay->dayOfWeek; $totalCells = $startPadding + $lastDay->day; $totalRows = ceil($totalCells / 7); @endphp
@for($i = 0; $i < $startPadding; $i++)
@endfor @for($day = 1; $day <= $lastDay->day; $day++) @php $dateStr = $currentMonth->format('Y-m') . '-' . str_pad($day, 2, '0', STR_PAD_LEFT); $dateObj = \Carbon\Carbon::parse($dateStr); $isToday = $dateObj->isToday(); $isSunday = $dateObj->isSunday(); $dayEvents = $events->filter(function($e) use ($dateObj) { $end = $e->end_date ?? $e->start_date; return $dateObj->between($e->start_date, $end); }); $hasHoliday = $dayEvents->where('is_holiday', true)->isNotEmpty(); @endphp
{{ $day }}
@foreach($dayEvents->take(3) as $event)
{{ $event->title }}
@endforeach @if($dayEvents->count() > 3)
+{{ $dayEvents->count() - 3 }} more
@endif
@endfor @php $remainder = ($startPadding + $lastDay->day) % 7; @endphp @if($remainder > 0) @for($i = 0; $i < (7 - $remainder); $i++)
@endfor @endif
@else {{-- List View --}}

All Events — {{ $academicYear->name }}

@php $grouped = $events->groupBy(fn($e) => $e->start_date->format('F Y')); @endphp @forelse($grouped as $monthGroup => $monthEvents)
{{ $monthGroup }}
@foreach($monthEvents as $event)
{{ $event->title }} @if($event->is_holiday) HOLIDAY @endif {{ str_replace('_', ' ', $event->type) }}
@if($event->description)

{{ $event->description }}

@endif

{{ $event->duration }}

@if($isAdmin)
@csrf @method('DELETE')
@endif
@endforeach
@empty
No events for this academic year.
@endforelse
@endif
{{-- Sidebar --}}
{{-- Quick Stats --}}

Year Overview

{{ $holidays }}

Holidays

{{ $terms->where('type', 'exam')->count() }}

Exams

{{ $terms->where('type', 'sports')->count() }}

Sports

{{ $terms->whereIn('type', ['celebration','cultural'])->count() }}

Cultural

{{-- Upcoming Events --}}

Upcoming

@forelse($upcoming as $event)

{{ $event->title }}

{{ $event->start_date->format('D, d M Y') }}

@if($event->is_holiday) HOLIDAY @endif
@empty
No upcoming events
@endforelse
{{-- Legend --}}

Event Types

@foreach([ ['Holiday / Vacation', '#EF4444'], ['Examinations', '#F59E0B'], ['Term Start / End', '#8B5CF6'], ['Celebrations', '#EC4899'], ['Sports / Camp', '#10B981'], ['Competition', '#06B6D4'], ['Workshop / Meeting', '#6366F1'], ['General Event', '#3B82F6'], ] as [$label, $color])
{{ $label }}
@endforeach
{{-- Add Event Modal (Admin only) --}} @if($isAdmin) @endif @endsection