{{-- ============================================================================ PAGE CONTENT — Borang: %%PAGE_NAME%% Site : nres · Page slug: %%PAGE_SLUG%% Modul : content-form (Aduan & Maklum Balas) SEMUA markup borang ada DALAM fail page ini — tiada component kongsi, tiada blade partial. Nak tukar borang yang dipaparkan oleh page ini? Ubah nilai $cfDefaultSlug di bawah ('' = papar senarai semua borang yang dibuka). ============================================================================ --}} @php /* -------------------------------------------------------------------- | 1. TETAPAN PAGE INI — ubah di sini sahaja -------------------------------------------------------------------- */ $cfDefaultSlug = '%%DEFAULT_SLUG%%'; /* -------------------------------------------------------------------- | 2. KONTEKS (site, query, servis) -------------------------------------------------------------------- */ $cfSite = $siteSlug ?? request()->segment(1); $cfQuery = request()->query(); $cfSvc = app(\App\Services\ContentFormService::class); $cfList = url($cfSite.'/complaints-feedback'); // Keutamaan: ?form=slug → $cfDefaultSlug → slug page semasa $cfSlug = (string) ($cfQuery['form'] ?? ''); if ($cfSlug === '') { $cfSlug = $cfDefaultSlug !== '' ? $cfDefaultSlug : (string) (request()->route('slug') ?? ''); } $cfForm = $cfSlug !== '' ? $cfSvc->findOpenForm($cfSlug) : null; // Kad "borang telah dihantar" — redirect dari POST {site}/aduan/{slug}?selesai=1 $cfSubmission = (! empty($cfQuery['selesai']) && session('form_submission_id')) ? \App\Models\Backend\ContentFormSubmission::with('form')->find(session('form_submission_id')) : null; // Kad "semak status tiket" — ?tiket=1 $cfTracked = (! empty($cfQuery['tiket']) && session('tracked_submission_id')) ? \App\Models\Backend\ContentFormSubmission::with(['messages', 'answers'])->find(session('tracked_submission_id')) : null; // Kumpulkan field ikut seksyen (seksyen + field tanpa seksyen) $cfGroups = []; if ($cfForm) { foreach ($cfForm->sections as $cfSection) { $cfGroups[] = [ 'title' => $cfSection->section_title, 'desc' => $cfSection->section_desc, 'fields' => $cfForm->fields->where('field_section_fk', $cfSection->section_id)->values(), ]; } $cfLoose = $cfForm->fields->whereNull('field_section_fk')->values(); if ($cfLoose->isNotEmpty()) { $cfGroups[] = ['title' => null, 'desc' => null, 'fields' => $cfLoose]; } } @endphp
@if ($cfForm) @endif @if ($cfSubmission) {{-- ---------- BORANG TELAH DIHANTAR ---------- --}}

Terima kasih

{{ $cfSubmission->form?->form_thanks ?: 'Borang anda telah diterima.' }}

{{ $cfSubmission->submission_ticket_no }}

Sila simpan No. Tiket di atas untuk menyemak status pada bila-bila masa. @if (filled($cfSubmission->submission_email)) Salinan pengesahan telah dihantar ke {{ $cfSubmission->submission_email }}. @endif

@elseif (! empty($cfQuery['tiket'])) {{-- ---------- SEMAK STATUS TIKET ---------- --}}

Semak Status Aduan / Maklum Balas

Masukkan No. Tiket dan e-mel yang digunakan semasa menghantar.

@csrf
@error('ticket_no')
{{ $message }}
@enderror
@error('email')
{{ $message }}
@enderror
@if (session('track_error'))
{{ session('track_error') }}
@endif @if (! empty($cfTracked))
{{ $cfTracked->submission_ticket_no }} {{ $cfTracked->statusLabel() }}
Jenis{{ $cfTracked->submission_type }}
Subjek{{ $cfTracked->submission_subject ?: '—' }}
Tarikh hantar{{ $cfTracked->submission_submitted_at?->format('d/m/Y H:i') ?? '—' }}
@if ($cfTracked->submission_closed_at)
Tarikh tutup{{ $cfTracked->submission_closed_at->format('d/m/Y H:i') }}
@endif
@if ($cfTracked->messages->isNotEmpty())
Balasan @foreach ($cfTracked->messages as $cfMessage)
{{ $cfMessage->isFromAdmin() ? 'NRES' : 'Pengadu' }} · {{ $cfMessage->created_at?->format('d/m/Y H:i') }}
{!! nl2br(e($cfMessage->message_body)) !!}
@endforeach
@else

Belum ada balasan daripada pihak NRES.

@endif @endif
@elseif ($cfForm && filled($cfForm->form_external_url)) {{-- ---------- BORANG DI SISTEM LUAR ---------- --}}
{{ strtoupper(\Illuminate\Support\Facades\DB::table('ref')->where('cat', 'FORM_TYPE')->where('code', $cfForm->form_type)->value('descr') ?? $cfForm->form_type) }}

{{ $cfForm->title() }}

{{ $cfForm->translation()?->form_translation_desc ?? $cfForm->form_desc }}

Buka Sistem
@elseif ($cfForm) {{-- ---------- BORANG ---------- --}}

{{ $cfForm->title() }}

@if (filled($cfForm->translation()?->form_translation_desc ?? $cfForm->form_desc))

{{ $cfForm->translation()?->form_translation_desc ?? $cfForm->form_desc }}

@endif @if ($errors->any()) {{-- Ringkasan ralat: pastikan SETIAP ralat dipaparkan (termasuk fail/honeypot) --}} @endif
@csrf {{-- Honeypot: manusia tidak nampak, bot akan isi --}} @foreach ($cfGroups as $cfGroup)
@if (filled($cfGroup['title'])) {{ $cfGroup['title'] }} @endif @if (filled($cfGroup['desc']))

{{ $cfGroup['desc'] }}

@endif @foreach ($cfGroup['fields'] as $cfField) @php $cfCode = $cfField->field_code; $cfIsCheckbox = $cfField->field_type === 'CHECKBOX'; $cfName = $cfIsCheckbox ? "fields[{$cfCode}][]" : "fields[{$cfCode}]"; $cfOld = old("fields.{$cfCode}"); $cfHasError = $errors->has("fields.{$cfCode}") || $errors->has("files.{$cfCode}"); $cfInvalid = $cfHasError ? 'is-invalid' : ''; $cfReq = $cfField->field_required ? 'required' : ''; @endphp
@if (filled($cfField->field_help))
{{ $cfField->field_help }}
@endif @switch($cfField->field_type) @case('TEXTAREA') @break @case('SELECT') @break @case('RADIO')
@foreach ($cfField->optionList() as $cfI => $cfOpt) @endforeach
@break @case('CHECKBOX') {{-- HTML5: setiap checkbox ber-`required` MESTI ditanda. Jadi `required` diletak pada SEMUA kotak (HTML konsisten), dan skrip data-cf-req-group akan buang `required` sebaik mana-mana satu ditanda → semantik "sekurang-kurangnya satu". --}}
field_required) data-cf-req-group="{{ $cfCode }}" @endif> @foreach ($cfField->optionList() as $cfI => $cfOpt) @endforeach
@break @case('SCALE')
@foreach ($cfField->scaleRange() as $cfScale) @endforeach
@break @case('FILE')
Saiz maksimum 10 MB. Format: PDF, JPG, PNG, DOCX, XLSX.
@error("files.{$cfCode}")
{{ $message }}
@enderror @break @case('EMAIL') @break @case('PHONE') @break @case('DATE') @break @default @endswitch @error("fields.{$cfCode}")
{{ $message }}
@enderror
@endforeach
@endforeach

* Ruangan wajib diisi.

@else {{-- ---------- SENARAI BORANG (fallback) ---------- --}}

Aduan dan Maklum Balas

Sila pilih borang di bawah. Untuk aduan awam, gunakan sistem SISPAA.

@php $cfOpenForms = $cfSvc->openForms(); @endphp @if ($cfOpenForms->isEmpty())

Tiada borang dibuka pada masa ini.

@else
@foreach ($cfOpenForms as $cfItem)
{{ strtoupper(\Illuminate\Support\Facades\DB::table('ref')->where('cat', 'FORM_TYPE')->where('code', $cfItem->form_type)->value('descr') ?? $cfItem->form_type) }}

{{ $cfItem->title() }}

{{ $cfItem->translation()?->form_translation_desc ?? $cfItem->form_desc }}

@if (filled($cfItem->form_external_url)) Buka Sistem @else Isi Borang @endif
@endforeach
@endif @endif