Files
eCert-MBIP/resources/views/admin/programs/questionnaire/show.blade.php
2026-05-19 09:53:36 +08:00

203 lines
9.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@extends('layouts.admin')
@section('title', 'Soalselidik — ' . $program->title)
@section('header', 'Urus Soalselidik Program')
@section('breadcrumb')
<li class="breadcrumb-item"><a href="{{ route('admin.programs.index') }}">Program</a></li>
<li class="breadcrumb-item"><a href="{{ route('admin.programs.show', $program) }}">{{ Str::limit($program->title, 30) }}</a></li>
<li class="breadcrumb-item active">Soalselidik</li>
@endsection
@section('header-actions')
<div class="d-flex gap-2">
@if($pq && $pq->questionnaireSet)
<a href="{{ route('admin.programs.questionnaire.preview', $program) }}" target="_blank"
class="btn btn-sm btn-outline-primary">
<i class="bi bi-eye me-1"></i> Pratonton
</a>
@endif
<a href="{{ route('admin.programs.show', $program) }}#tab-questionnaire" class="btn btn-sm btn-outline-secondary">
<i class="bi bi-arrow-left me-1"></i> Kembali
</a>
</div>
@endsection
@section('content')
<div class="row g-4">
{{-- Current Questionnaire --}}
<div class="col-md-7">
<div class="card border-0 shadow-sm">
<div class="card-header bg-white py-3">
<h6 class="mb-0 fw-semibold"><i class="bi bi-clipboard2-check me-2 text-primary"></i>Soalselidik Semasa</h6>
</div>
<div class="card-body">
@if($pq && $pq->questionnaireSet)
<div class="d-flex justify-content-between align-items-start mb-3">
<div>
<div class="fw-semibold">{{ $pq->questionnaireSet->title }}</div>
<div class="text-muted small">{{ $pq->questionnaireSet->questions->count() }} soalan</div>
@if($pq->questionnaireSet->description)
<div class="text-muted small mt-1">{{ $pq->questionnaireSet->description }}</div>
@endif
</div>
@if($pq->is_confirmed)
<span class="badge bg-success fs-6 px-3 py-2">
<i class="bi bi-check-circle me-1"></i> Disahkan
</span>
@else
<span class="badge bg-warning text-dark fs-6 px-3 py-2">
<i class="bi bi-exclamation-circle me-1"></i> Belum Disahkan
</span>
@endif
</div>
@if($pq->is_confirmed)
<div class="alert alert-success small mb-3">
<i class="bi bi-info-circle me-1"></i>
Disahkan oleh <strong>{{ $pq->confirmedBy?->name ?? '—' }}</strong>
pada {{ $pq->confirmed_at?->format('d M Y, H:i') }}.
</div>
@else
<div class="alert alert-warning small mb-3">
<i class="bi bi-exclamation-triangle me-1"></i>
Soalselidik perlu <strong>disahkan</strong> sebelum peserta boleh menjawab.
</div>
<form method="POST" action="{{ route('admin.programs.questionnaire.confirm', $program) }}" class="mb-3">
@csrf
<button class="btn btn-success w-100" onclick="return confirm('Sahkan soalselidik ini untuk program?')">
<i class="bi bi-check-circle me-2"></i> Sahkan Soalselidik
</button>
</form>
@endif
{{-- List Questions --}}
<div class="border rounded p-3 bg-light">
<div class="small fw-medium text-muted mb-2">Senarai Soalan:</div>
@php
$allQs = $pq->questionnaireSet->questions->sortBy('sort_order');
$topQs = $allQs->whereNull('parent_id');
$qNum = 0;
@endphp
@foreach($topQs as $q)
@if($q->question_type === 'tajuk')
<div class="d-flex align-items-center gap-2 mt-2 mb-1">
<span class="badge bg-dark" style="font-size:0.6rem;">Tajuk</span>
<div class="small fw-semibold text-dark">{{ $q->question_text }}</div>
</div>
@foreach($allQs->where('parent_id', $q->id)->sortBy('sort_order') as $child)
@php $qNum++ @endphp
<div class="d-flex align-items-start gap-2 mb-1 ps-3">
<span class="badge bg-secondary flex-shrink-0" style="min-width:22px;font-size:0.65rem;">{{ $qNum }}</span>
<div>
<div class="small">{{ $child->question_text }}</div>
<span class="badge bg-light text-dark border" style="font-size:0.6rem;">Rating 15</span>
@if($child->is_required)<span class="badge bg-danger bg-opacity-10 text-danger" style="font-size:0.6rem;">Wajib</span>@endif
</div>
</div>
@endforeach
@else
@php $qNum++ @endphp
<div class="d-flex align-items-start gap-2 mb-2">
<span class="badge bg-secondary flex-shrink-0" style="min-width:22px;font-size:0.65rem;">{{ $qNum }}</span>
<div>
<div class="small">{{ $q->question_text }}</div>
<span class="badge bg-light text-dark border" style="font-size:0.65rem;">
{{ match($q->question_type) {
'rating' => 'Rating 15',
'single_choice' => 'Pilihan Tunggal',
'multiple_choice' => 'Pilihan Berganda',
'short_text' => 'Teks Pendek',
'long_text' => 'Teks Panjang',
default => $q->question_type,
} }}
</span>
@if($q->is_required)<span class="badge bg-danger bg-opacity-10 text-danger" style="font-size:0.65rem;">Wajib</span>@endif
</div>
</div>
@endif
@endforeach
</div>
{{-- Detach --}}
<div class="mt-3">
<form method="POST" action="{{ route('admin.programs.questionnaire.detach', $program) }}"
onsubmit="return confirm('Tanggalkan soalselidik dari program ini?')">
@csrf @method('DELETE')
<button class="btn btn-sm btn-outline-danger">
<i class="bi bi-x-circle me-1"></i> Tanggalkan Soalselidik
</button>
</form>
</div>
@else
<div class="text-center py-4 text-muted">
<i class="bi bi-clipboard2-x d-block fs-1 mb-3 opacity-25"></i>
<p class="mb-0">Belum ada soalselidik dilampirkan untuk program ini.</p>
</div>
@endif
</div>
</div>
</div>
{{-- Right: Attach New --}}
@if(! $pq)
<div class="col-md-5">
<div class="card border-0 shadow-sm">
<div class="card-header bg-white py-3">
<h6 class="mb-0 fw-semibold"><i class="bi bi-clipboard2-plus me-2 text-success"></i>Lampir Soalselidik</h6>
</div>
<div class="card-body">
@if($availableSets->isEmpty())
<div class="alert alert-info small">
<i class="bi bi-info-circle me-1"></i>
Tiada set soalselidik yang diterbitkan.
<a href="{{ route('admin.questionnaires.create') }}">Buat set baru.</a>
</div>
@else
<form method="POST" action="{{ route('admin.programs.questionnaire.attach', $program) }}">
@csrf
<div class="mb-3">
<label class="form-label fw-medium small">Pilih Set Soalselidik <span class="text-danger">*</span></label>
<select name="questionnaire_set_id"
class="form-select @error('questionnaire_set_id') is-invalid @enderror">
<option value=""> Pilih </option>
@foreach($availableSets as $qs)
<option value="{{ $qs->id }}" {{ old('questionnaire_set_id') == $qs->id ? 'selected' : '' }}>
{{ $qs->title }} ({{ $qs->questions_count }} soalan)
</option>
@endforeach
</select>
@error('questionnaire_set_id')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
<div class="alert alert-info small">
<i class="bi bi-lightbulb me-1"></i>
Selepas lampir, anda perlu <strong>sahkan</strong> soalselidik sebelum peserta boleh menjawab.
</div>
<button type="submit" class="btn btn-success w-100">
<i class="bi bi-clipboard2-plus me-2"></i> Lampir & Teruskan
</button>
</form>
@endif
<div class="mt-3 text-center">
<a href="{{ route('admin.questionnaires.index') }}" class="small text-muted">
<i class="bi bi-gear me-1"></i> Urus Set Soalselidik
</a>
</div>
</div>
</div>
</div>
@endif
</div>
@endsection