@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
@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())
| No |
Kegiatan |
Pembicara |
Penanggung Jawab |
Waktu |
@foreach(($activity->rundowns ?? collect())->sortBy('start_time') as $rundown)
| {{ $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') : '-' }}
|
@endforeach
@else
Belum ada jadwal kegiatan yang diinput.
@endif
{{ $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
@endforeach
@else
Belum ada materi yang diunggah.
@endif
@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 ?? []))
@foreach($missingProfileFields as $field)
- {{ $field }}
@endforeach
@endif
@endif
@php $hasMandiri = ($mandiriAttendances ?? collect())->count() > 0; @endphp
@if($hasMandiri)
@endif
@endsection
@push('styles')
@push('scripts')
@endpush
@push('scripts')
@endpush