@extends('layouts.web') @section('content') @php $materialsList = $materials ?? collect(); $participantCollection = $participants ?? collect(); if ($participantCollection instanceof \Illuminate\Contracts\Pagination\Paginator) { $participantCollection = collect($participantCollection->items()); } elseif (! $participantCollection instanceof \Illuminate\Support\Collection) { $participantCollection = collect(is_array($participantCollection) ? $participantCollection : []); } $activityDateLabel = $activity->date ? \Carbon\Carbon::parse($activity->date)->translatedFormat('d F Y') : 'Tanggal belum ditentukan'; $rawTime = $activity->start_time ?? $activity->time ?? null; $activityTimeLabel = $rawTime ? (\Carbon\Carbon::hasFormat($rawTime, 'H:i:s') || \Carbon\Carbon::hasFormat($rawTime, 'H:i') ? \Carbon\Carbon::parse($rawTime)->format('H:i') : $rawTime) : 'Waktu belum ditentukan'; $activityLocation = $activity->location ?? 'Lokasi belum ditentukan'; $activityPriceLabel = ($activity->price ?? 0) > 0 ? 'Rp ' . number_format($activity->price, 0, ',', '.') : 'Gratis'; $participantCount = $participantCollection->count(); @endphp

Detail Kegiatan

{{ $activity->name ?? 'Judul Aktivitas' }}

{{ \Illuminate\Support\Str::limit(strip_tags($activity->excerpt ?? $activity->description ?? 'Belum ada deskripsi kegiatan.'), 240) }}

Tanggal

{{ $activityDateLabel }}

Waktu

{{ $activityTimeLabel }}

Lokasi

{{ $activityLocation }}

Biaya

{{ $activityPriceLabel }}

@php $activityPrice = (int) ($activity->price ?? 0); $registrationStatus = (int) ($activity->pendaftaran ?? 1); // 0: Belum Dibuka, 1: Dibuka, 2: Ditutup // Default register target $registerTarget = [ 'type' => 'link', 'url' => route('activity.enroll', $activity), 'label' => 'Daftar Kegiatan', ]; // Jika pendaftaran belum dibuka atau ditutup, nonaktifkan CTA if ($registrationStatus === 0) { $registerTarget = [ 'type' => 'disabled', 'url' => null, 'label' => 'Pendaftaran Belum Dibuka', ]; } elseif ($registrationStatus === 2) { $registerTarget = [ 'type' => 'disabled', 'url' => null, 'label' => 'Pendaftaran Ditutup', ]; } else { // Pendaftaran dibuka, sesuaikan dengan tipe pembayaran if ($activityPrice > 0) { if (method_exists($activity, 'isAutomaticPayment') && $activity->isAutomaticPayment()) { $registerTarget = [ 'type' => 'link', 'url' => route('midtrans.payment.create', $activity->id), 'label' => 'Daftar Kegiatan', ]; } else { $registerTarget = [ 'type' => 'link', 'url' => route('payments.create', $activity->id), 'label' => 'Daftar Kegiatan', ]; } } else { $registerTarget = [ 'type' => 'form', 'url' => route('activity.enroll', $activity), 'label' => 'Daftar Kegiatan', ]; } } @endphp

Peserta

{{ $participantCount }} Terdaftar

@if(isset($currentStatus) && $currentStatus === 'enrolled') Status: Aktif @elseif(isset($currentStatus) && $currentStatus === 'auto-pending') Selesaikan Pembayaran @elseif(isset($enrollmentStatus) && $enrollmentStatus === \App\Models\ActivityUser::STATUS_VERIFICATION) Menunggu Verifikasi @elseif(isset($enrollmentStatus) && $enrollmentStatus === \App\Models\ActivityUser::STATUS_REJECTED) Pendaftaran Ditolak @else @if($registerTarget['type'] === 'disabled') {{ $registerTarget['label'] }} @endif @endif
@php // Gunakan hero default jika aktivitas belum punya gambar $defaultBanner = asset('assets/images/hero/defoult.webp'); $rawBanner = $activity->image ?: ($activity->banner ?? null); // Nilai awal: selalu default $bannerPath = $defaultBanner; if (is_string($rawBanner) && trim($rawBanner) !== '') { // Jika URL absolut, pakai langsung if (\Illuminate\Support\Str::startsWith($rawBanner, ['http://', 'https://'])) { $bannerPath = $rawBanner; } else { // Normalisasi path relatif terhadap disk public $normalized = ltrim($rawBanner, '/'); if (\Illuminate\Support\Str::startsWith($normalized, 'public/')) { $normalized = \Illuminate\Support\Str::after($normalized, 'public/'); } // Hanya gunakan jika file benar‑benar ada di storage/public if (\Illuminate\Support\Facades\Storage::disk('public')->exists($normalized)) { $bannerPath = asset('storage/' . $normalized); } } } @endphp Banner {{ $activity->name }}
@php $authUser = auth()->user(); $profileIncomplete = $authUser && !empty($missingProfileFields ?? []); @endphp
@php // Hak akses untuk melihat detail di bawah hero $authUser = auth()->user(); $isSuperAdmin = $authUser && $authUser->role === 'superadmin'; $isAdmin = $authUser && $authUser->role === 'admin'; $isCreator = $authUser && $activity->user_id === $authUser->id; $isCommittee = $authUser && method_exists($activity, 'canManageRegistration') ? $activity->canManageRegistration($authUser->id) : false; $canAccessManagement = $isSuperAdmin || $isAdmin || $isCreator || $isCommittee; // Peserta yang boleh melihat detail: sudah terdaftar (registered/enrolled) ATAU pengelola (admin, superadmin, creator, panitia) $canViewDetails = auth()->check() && ( ($isRegistered ?? false) || ($isEnrolled ?? false) || $canAccessManagement ); @endphp @if($canViewDetails)

Rangkaian Kegiatan

Schedule Acara

@if(($activity->rundowns ?? collect())->count())
@foreach(($activity->rundowns ?? collect())->sortBy('start_time') as $rundown) @endforeach
No Kegiatan Pembicara Penanggung Jawab Waktu
{{ $loop->iteration }}

{{ $rundown->title ?? 'Agenda' }}

@if($rundown->description)

{{ $rundown->description }}

@endif
{{ $rundown->speaker ?? 'N/A' }} {{ $rundown->pic ?? $rundown->location ?? 'N/A' }} {{ optional($rundown->start_time) ? \Carbon\Carbon::parse($rundown->start_time)->format('H:i') : '-' }} - {{ optional($rundown->end_time) ? \Carbon\Carbon::parse($rundown->end_time)->format('H:i') : '-' }}
@else

Belum ada jadwal kegiatan yang diinput.

@endif

Materi

Materi Acara

{{ $materialsList->count() }} file
@if(($materialsList ?? collect())->count())
@foreach($materialsList as $material) @php $icon = 'fas fa-file text-gray-400'; $previewHref = ''; $downloadHref = ''; $path = $material->file_path; if (method_exists($material, 'isImage') && $material->isImage()) $icon = 'fas fa-image text-blue-500'; elseif ($material->file_type === 'pdf') $icon = 'fas fa-file-pdf text-red-500'; elseif ($material->file_type === 'ppt') $icon = 'fas fa-file-powerpoint text-orange-500'; elseif ($material->file_type === 'doc') $icon = 'fas fa-file-word text-blue-600'; elseif (method_exists($material, 'isVideo') && $material->isVideo()) $icon = 'fas fa-file-video text-purple-500'; elseif (method_exists($material, 'isAudio') && $material->isAudio()) $icon = 'fas fa-file-audio text-green-500'; elseif ($material->file_type === 'link') $icon = 'fas fa-link text-blue-500'; if ($material->file_type === 'link') { $previewHref = $downloadHref = $path; } elseif (\Illuminate\Support\Facades\Route::has('activity.preparation.download-material')) { $downloadHref = route('activity.preparation.download-material', [$activity->id, $material->id]); $previewHref = $downloadHref; } elseif ($path) { if (\Illuminate\Support\Str::startsWith($path, ['http://','https://'])) { $previewHref = $downloadHref = $path; } else { $normalized = ltrim($path, '/'); if (\Illuminate\Support\Str::startsWith($normalized, 'public/')) { $normalized = \Illuminate\Support\Str::after($normalized, 'public/'); } $previewHref = $downloadHref = asset('storage/' . $normalized); } } @endphp

{{ $material->title ?? $material->file_name ?? 'Materi' }}

@if($material->description)

{{ $material->description }}

@endif
@if($previewHref) Pratinjau @endif @if($downloadHref) {{ $material->file_type === 'link' ? 'Buka' : 'Unduh' }} @endif
@endforeach
@else

Belum ada materi yang diunggah.

@endif

Peserta

Daftar Peserta

{{ $participantCollection->count() }} terdaftar
    @include('partials.participants_detail_list_items', ['participants' => $participantCollection, 'activity' => $activity, 'disable_click' => true])
@php // Cek visibility untuk Certificate Download Card $certificateSettingsModel = \App\Models\CertificateSettings::where('activity_id', $activity->id)->first(); $downloadCardVisible = true; // Default aktif if ($certificateSettingsModel && $certificateSettingsModel->print_settings) { $certPrintSettings = is_array($certificateSettingsModel->print_settings) ? $certificateSettingsModel->print_settings : []; if (isset($certPrintSettings['download_card_visible'])) { $downloadCardVisible = (bool)$certPrintSettings['download_card_visible']; } } @endphp
@php $cardSettingsModel = \App\Models\CardSettings::where('activity_id', $activity->id)->first(); $cardIdVisible = $cardSettingsModel && isset($cardSettingsModel->print_settings['card_id_visible']) ? (bool)$cardSettingsModel->print_settings['card_id_visible'] : false; @endphp @if(auth()->check() && $cardIdVisible) @include('activity.printing.idcard', ['activity' => $activity, 'render_partial' => true]) @endif @if(auth()->check())
@php $hasMandiri = ($mandiriAttendances ?? collect())->count() > 0; @endphp @if($hasMandiri)
@endif @if($canAccessManagement) @endif
@endif @if(auth()->check() && $downloadCardVisible)

SERTIFIKAT

Unduh Sertifikat Anda

Klik tombol di bawah untuk mengunduh sertifikat Anda

Download Sertifikat
@endif
@endif @if($profileIncomplete)
Untuk mengikuti kegiatan ini, profil Anda harus lengkap.

Data profil digunakan untuk kebutuhan pembuatan ID Card dan administrasi peserta. Lengkapi data berikut sebelum mendaftar:

@if(!empty($missingProfileFields ?? [])) @endif
@endif @php $hasMandiri = ($mandiriAttendances ?? collect())->count() > 0; @endphp @if($hasMandiri)

Absen

Absen Aktif

@foreach(($mandiriAttendances ?? collect()) as $attendance) @php $descSource = $attendance->description ?? ''; $descArr = is_array($descSource) ? $descSource : json_decode($descSource, true); $instruction = ''; if (is_array($descArr) && isset($descArr['instruction']) && is_string($descArr['instruction'])) { $instruction = trim($descArr['instruction']); } elseif (! is_array($descArr) && is_string($descSource) && $descSource !== '') { $instruction = trim($descSource); } $isAtt = $attendance->has_attended ?? false; @endphp

{{ $attendance->name ?? 'Absen Mandiri' }}

{{ $instruction }}

@if(!$isAtt) @else
Sudah Absen
@endif
@endforeach
@endif @endsection @push('styles') @push('scripts') @endpush @push('scripts') @endpush