%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
<?php
/**
* Halaman Beri Penilaian & Testimoni.
* Hanya tersedia bagi permohonan yang berstatus "selesai", diakses via Nomor Resi.
*/
require_once __DIR__ . '/config/config.php';
require_once __DIR__ . '/includes/queries.php';
$resi = get_param('resi') ?: post_param('resi');
$errors = [];
$old = ['nama' => '', 'rating' => '', 'isi' => ''];
$permohonan = $resi !== '' ? get_permohonan_by_resi($resi) : null;
$sudahNilai = $permohonan ? get_testimoni_by_resi($resi) : null;
$sukses = !empty($_SESSION['penilaian_sukses']);
unset($_SESSION['penilaian_sukses']);
// Prefill nama dari data permohonan.
if ($permohonan && $old['nama'] === '') {
$old['nama'] = $permohonan['nama'];
}
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !$sukses) {
csrf_verify();
$old['nama'] = post_param('nama');
$old['rating'] = post_param('rating');
$old['isi'] = post_param('isi');
if (!$permohonan) {
$errors['resi'] = 'Permohonan dengan nomor resi tersebut tidak ditemukan.';
} elseif ($permohonan['status'] !== 'selesai') {
$errors['resi'] = 'Penilaian hanya dapat diberikan untuk permohonan yang telah selesai.';
} elseif ($sudahNilai) {
$errors['resi'] = 'Permohonan ini sudah pernah diberi penilaian. Terima kasih.';
}
$rating = (int) $old['rating'];
if ($rating < 1 || $rating > 5) {
$errors['rating'] = 'Silakan pilih rating bintang (1–5).';
}
if ($old['nama'] === '') {
$errors['nama'] = 'Nama wajib diisi.';
}
if (empty($errors)) {
$stmt = db()->prepare(
'INSERT INTO testimoni (permohonan_id, no_resi, nama, rating, isi, is_published)
VALUES (?, ?, ?, ?, ?, 0)'
);
$stmt->execute([
$permohonan['id'],
$permohonan['no_resi'],
$old['nama'],
$rating,
$old['isi'] !== '' ? $old['isi'] : null,
]);
$_SESSION['penilaian_sukses'] = true;
redirect('penilaian.php?resi=' . urlencode($resi));
}
}
$pageTitle = 'Beri Penilaian — ' . APP_NAME_SHORT;
$activeNav = '';
require __DIR__ . '/partials/head.php';
require __DIR__ . '/partials/navbar.php';
$val = static fn (string $k) => e($old[$k] ?? '');
?>
<section class="relative overflow-hidden bg-gradient-to-br from-mateng-green to-mateng-blue text-white py-14">
<?php require __DIR__ . '/partials/sekda-header.php'; ?>
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<nav class="text-sm text-green-100 mb-3">
<a href="<?= e(url('index.php')) ?>" class="hover:underline">Beranda</a><span class="mx-2">/</span><span>Beri Penilaian</span>
</nav>
<h1 class="text-3xl md:text-4xl font-extrabold mb-2">Penilaian & Testimoni Layanan</h1>
<p class="text-green-50 max-w-2xl">Bagikan pengalaman Anda atas layanan informasi yang telah diberikan PPID Mamuju Tengah.</p>
</div>
</section>
<main class="max-w-2xl mx-auto px-4 sm:px-6 lg:px-8 py-10 w-full">
<?php if ($sukses): ?>
<div class="bg-white rounded-2xl border border-green-200 shadow-sm p-8 text-center">
<div class="w-16 h-16 bg-mateng-green text-white rounded-full flex items-center justify-center text-3xl mx-auto mb-4"><i class="fas fa-star"></i></div>
<h2 class="text-2xl font-bold text-slate-900 mb-1">Terima Kasih atas Penilaian Anda!</h2>
<p class="text-slate-500 mb-6">Testimoni Anda akan ditinjau admin sebelum ditampilkan di halaman publik.</p>
<a href="<?= e(url('index.php')) ?>" class="bg-mateng-green hover:bg-green-700 text-white px-6 py-3 rounded-lg font-semibold transition-colors inline-block">Kembali ke Beranda</a>
</div>
<?php elseif (!$permohonan): ?>
<div class="bg-white rounded-2xl border border-slate-100 shadow-sm p-6 mb-6">
<p class="text-slate-600 mb-4">Masukkan Nomor Resi permohonan Anda yang telah <strong>selesai</strong> untuk memberikan penilaian.</p>
<form method="get" class="flex items-center bg-slate-50 border border-slate-200 rounded-xl p-2 focus-within:border-mateng-green">
<i class="fas fa-receipt text-slate-400 ml-3"></i>
<input type="text" name="resi" value="<?= e($resi) ?>" placeholder="REQ-XXXXXX-XXXXX" class="w-full px-3 py-2 bg-transparent outline-none text-slate-700" required>
<button class="bg-mateng-green hover:bg-green-700 text-white px-5 py-2 rounded-lg font-semibold">Lanjut</button>
</form>
<?php if ($resi !== ''): ?><p class="text-sm text-amber-600 mt-3"><i class="fas fa-circle-exclamation mr-1"></i> Nomor resi tidak ditemukan.</p><?php endif; ?>
</div>
<?php elseif ($permohonan['status'] !== 'selesai'): ?>
<div class="bg-amber-50 border border-amber-200 text-amber-700 rounded-xl p-5 flex items-start gap-3">
<i class="fas fa-circle-info mt-0.5"></i>
<div>
<p class="font-semibold">Penilaian belum tersedia.</p>
<p class="text-sm">Permohonan <strong><?= e($permohonan['no_resi']) ?></strong> masih berstatus "<?= e($permohonan['status']) ?>". Penilaian dapat diberikan setelah permohonan selesai.</p>
<a href="<?= e(url('cek-status.php?resi=' . urlencode($resi))) ?>" class="text-mateng-blue font-semibold hover:underline text-sm mt-2 inline-block">Lihat status permohonan</a>
</div>
</div>
<?php elseif ($sudahNilai): ?>
<div class="bg-white rounded-2xl border border-slate-100 shadow-sm p-8 text-center">
<div class="mb-3"><?= render_stars((int) $sudahNilai['rating'], 'text-2xl') ?></div>
<h2 class="text-xl font-bold text-slate-900 mb-1">Anda Sudah Memberikan Penilaian</h2>
<p class="text-slate-500 mb-4">Terima kasih telah menilai layanan kami untuk permohonan <strong><?= e($permohonan['no_resi']) ?></strong>.</p>
<?php if ($sudahNilai['isi']): ?><blockquote class="text-slate-600 italic bg-slate-50 border border-slate-100 rounded-xl p-4">"<?= e($sudahNilai['isi']) ?>"</blockquote><?php endif; ?>
</div>
<?php else: ?>
<div class="bg-white rounded-2xl border border-slate-100 shadow-sm p-6 sm:p-8">
<div class="bg-green-50 border border-green-100 rounded-xl p-4 mb-6 text-sm text-green-800 flex items-center gap-2">
<i class="fas fa-circle-check"></i> Permohonan <strong><?= e($permohonan['no_resi']) ?></strong> telah selesai. Silakan beri penilaian.
</div>
<?php if (!empty($errors)): ?>
<div class="bg-red-50 border border-red-200 text-red-700 rounded-xl p-4 mb-6 text-sm">
<?php foreach ($errors as $err): ?><p><i class="fas fa-circle-xmark mr-1"></i> <?= e($err) ?></p><?php endforeach; ?>
</div>
<?php endif; ?>
<form method="post" class="space-y-5">
<?= csrf_field() ?>
<input type="hidden" name="resi" value="<?= e($resi) ?>">
<div class="text-center">
<label class="block text-sm font-medium text-slate-700 mb-3">Seberapa puas Anda dengan layanan kami?</label>
<div id="starPicker" class="inline-flex items-center gap-2 text-4xl text-slate-300" role="radiogroup" aria-label="Rating">
<?php for ($i = 1; $i <= 5; $i++): ?>
<button type="button" data-val="<?= $i ?>" class="star-btn transition-transform hover:scale-110 focus:outline-none" aria-label="<?= $i ?> bintang"><i class="fas fa-star"></i></button>
<?php endfor; ?>
</div>
<input type="hidden" name="rating" id="ratingInput" value="<?= $val('rating') ?>">
<p id="ratingLabel" class="text-sm text-slate-500 mt-2 h-5"></p>
</div>
<div>
<label class="block text-sm font-medium text-slate-700 mb-1.5">Nama <span class="text-red-500">*</span></label>
<input type="text" name="nama" value="<?= $val('nama') ?>" class="w-full rounded-lg border border-slate-300 px-4 py-2.5 outline-none focus:border-mateng-green focus:ring-4 focus:ring-green-100">
</div>
<div>
<label class="block text-sm font-medium text-slate-700 mb-1.5">Testimoni <span class="text-slate-400 font-normal">(opsional)</span></label>
<textarea name="isi" rows="4" class="w-full rounded-lg border border-slate-300 px-4 py-2.5 outline-none focus:border-mateng-green focus:ring-4 focus:ring-green-100" placeholder="Ceritakan pengalaman Anda menggunakan layanan informasi kami..."><?= $val('isi') ?></textarea>
</div>
<button type="submit" class="w-full bg-mateng-green hover:bg-green-700 text-white font-bold px-6 py-3.5 rounded-xl transition-colors flex items-center justify-center gap-2">
<i class="fas fa-paper-plane"></i> Kirim Penilaian
</button>
</form>
</div>
<script>
(function () {
var picker = document.getElementById('starPicker');
var input = document.getElementById('ratingInput');
var label = document.getElementById('ratingLabel');
var labels = ['', 'Sangat Buruk', 'Buruk', 'Cukup', 'Baik', 'Sangat Baik'];
var stars = Array.prototype.slice.call(picker.querySelectorAll('.star-btn'));
function paint(val) {
stars.forEach(function (s, i) {
s.classList.toggle('text-mateng-gold', (i + 1) <= val);
s.classList.toggle('text-slate-300', (i + 1) > val);
});
label.textContent = labels[val] || '';
}
stars.forEach(function (s) {
var v = parseInt(s.getAttribute('data-val'), 10);
s.addEventListener('click', function () { input.value = v; paint(v); });
s.addEventListener('mouseenter', function () { paint(v); });
});
picker.addEventListener('mouseleave', function () { paint(parseInt(input.value, 10) || 0); });
paint(parseInt(input.value, 10) || 0);
})();
</script>
<?php endif; ?>
</main>
<?php require __DIR__ . '/partials/footer.php'; ?>