%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 Pengajuan Keberatan atas layanan informasi publik.
*/
require_once __DIR__ . '/config/config.php';
require_once __DIR__ . '/includes/queries.php';
$errors = [];
$old = [
'no_resi_permohonan' => get_param('resi'),
'nama' => '',
'email' => '',
'no_hp' => '',
'alasan' => '',
'uraian' => '',
];
$alasanOptions = [
'ditolak' => 'Permohonan informasi ditolak',
'tidak_ditanggapi' => 'Permohonan tidak ditanggapi',
'tidak_sesuai' => 'Informasi yang diberikan tidak sesuai permintaan',
'biaya_tidak_wajar' => 'Pengenaan biaya yang tidak wajar',
'keterlambatan' => 'Penyampaian informasi melebihi jangka waktu',
'lainnya' => 'Alasan lainnya',
];
$resiSukses = $_SESSION['keberatan_sukses'] ?? null;
unset($_SESSION['keberatan_sukses']);
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
csrf_verify();
foreach (array_keys($old) as $k) {
$old[$k] = post_param($k);
}
$permohonan = null;
if ($old['no_resi_permohonan'] === '') {
$errors['no_resi_permohonan'] = 'Nomor Resi permohonan wajib diisi.';
} else {
$permohonan = get_permohonan_by_resi($old['no_resi_permohonan']);
if (!$permohonan) {
$errors['no_resi_permohonan'] = 'Nomor Resi permohonan tidak ditemukan.';
}
}
if ($old['nama'] === '') {
$errors['nama'] = 'Nama lengkap wajib diisi.';
}
if (!is_valid_email($old['email'])) {
$errors['email'] = 'Alamat email tidak valid.';
}
if (!array_key_exists($old['alasan'], $alasanOptions)) {
$errors['alasan'] = 'Silakan pilih alasan keberatan.';
}
if ($old['uraian'] === '') {
$errors['uraian'] = 'Uraian keberatan wajib diisi.';
}
if (empty($errors)) {
do {
$resi = generate_resi_keberatan();
$cek = db()->prepare('SELECT 1 FROM keberatan WHERE no_resi = ?');
$cek->execute([$resi]);
} while ($cek->fetchColumn());
$stmt = db()->prepare(
'INSERT INTO keberatan (no_resi, permohonan_id, no_resi_permohonan, nama, email, no_hp, alasan, uraian, status)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, "baru")'
);
$stmt->execute([
$resi,
$permohonan['id'] ?? null,
$old['no_resi_permohonan'],
$old['nama'], $old['email'], $old['no_hp'], $old['alasan'], $old['uraian'],
]);
$_SESSION['keberatan_sukses'] = $resi;
redirect('keberatan.php');
}
}
$pageTitle = 'Ajukan Keberatan — ' . APP_NAME_SHORT;
$activeNav = '';
require __DIR__ . '/partials/head.php';
require __DIR__ . '/partials/navbar.php';
$val = static fn (string $k) => e($old[$k] ?? '');
$inputClass = static fn (string $k) => isset($errors[$k])
? 'border-red-300 focus:border-red-500 focus:ring-red-100'
: 'border-slate-300 focus:border-mateng-green focus:ring-green-100';
?>
<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>Ajukan Keberatan</span>
</nav>
<h1 class="text-3xl md:text-4xl font-extrabold mb-2">Formulir Pengajuan Keberatan</h1>
<p class="text-green-50 max-w-2xl">Ajukan keberatan apabila Anda tidak memperoleh pelayanan informasi sebagaimana mestinya.</p>
</div>
</section>
<main class="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8 py-10 w-full">
<?php if ($resiSukses): ?>
<div class="bg-white rounded-2xl border border-green-200 shadow-sm overflow-hidden">
<div class="bg-green-50 p-8 text-center border-b border-green-100">
<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-check"></i></div>
<h2 class="text-2xl font-bold text-slate-900 mb-1">Keberatan Berhasil Diajukan!</h2>
<p class="text-slate-500">Keberatan Anda akan ditindaklanjuti oleh Atasan PPID.</p>
</div>
<div class="p-8 text-center">
<p class="text-sm text-slate-500 mb-2">Nomor Resi Keberatan</p>
<div class="inline-block bg-slate-900 text-white text-2xl font-bold tracking-widest px-6 py-3 rounded-xl mb-6"><?= e($resiSukses) ?></div>
<div><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>
</div>
</div>
<?php else: ?>
<?php if (!empty($errors)): ?>
<div class="bg-red-50 border border-red-200 text-red-700 rounded-xl p-4 mb-6 text-sm flex items-start gap-2">
<i class="fas fa-triangle-exclamation mt-0.5"></i><span>Mohon periksa kembali isian formulir.</span>
</div>
<?php endif; ?>
<form method="post" class="bg-white rounded-2xl border border-slate-100 shadow-sm p-6 sm:p-8 space-y-5">
<?= csrf_field() ?>
<div>
<label class="block text-sm font-medium text-slate-700 mb-1.5">Nomor Resi Permohonan <span class="text-red-500">*</span></label>
<input type="text" name="no_resi_permohonan" value="<?= $val('no_resi_permohonan') ?>" placeholder="REQ-XXXXXX-XXXXX" class="w-full rounded-lg border px-4 py-2.5 outline-none focus:ring-4 <?= $inputClass('no_resi_permohonan') ?>">
<?php if (isset($errors['no_resi_permohonan'])): ?><p class="text-xs text-red-500 mt-1"><?= e($errors['no_resi_permohonan']) ?></p><?php endif; ?>
<p class="text-xs text-slate-400 mt-1">Resi permohonan informasi yang sebelumnya Anda ajukan.</p>
</div>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
<div>
<label class="block text-sm font-medium text-slate-700 mb-1.5">Nama Lengkap <span class="text-red-500">*</span></label>
<input type="text" name="nama" value="<?= $val('nama') ?>" class="w-full rounded-lg border px-4 py-2.5 outline-none focus:ring-4 <?= $inputClass('nama') ?>">
<?php if (isset($errors['nama'])): ?><p class="text-xs text-red-500 mt-1"><?= e($errors['nama']) ?></p><?php endif; ?>
</div>
<div>
<label class="block text-sm font-medium text-slate-700 mb-1.5">Email <span class="text-red-500">*</span></label>
<input type="email" name="email" value="<?= $val('email') ?>" class="w-full rounded-lg border px-4 py-2.5 outline-none focus:ring-4 <?= $inputClass('email') ?>">
<?php if (isset($errors['email'])): ?><p class="text-xs text-red-500 mt-1"><?= e($errors['email']) ?></p><?php endif; ?>
</div>
</div>
<div>
<label class="block text-sm font-medium text-slate-700 mb-1.5">No. HP / WhatsApp</label>
<input type="text" name="no_hp" value="<?= $val('no_hp') ?>" 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">Alasan Keberatan <span class="text-red-500">*</span></label>
<select name="alasan" class="w-full rounded-lg border px-4 py-2.5 outline-none focus:ring-4 bg-white <?= $inputClass('alasan') ?>">
<option value="">— Pilih alasan —</option>
<?php foreach ($alasanOptions as $key => $label): ?>
<option value="<?= e($key) ?>" <?= $old['alasan'] === $key ? 'selected' : '' ?>><?= e($label) ?></option>
<?php endforeach; ?>
</select>
<?php if (isset($errors['alasan'])): ?><p class="text-xs text-red-500 mt-1"><?= e($errors['alasan']) ?></p><?php endif; ?>
</div>
<div>
<label class="block text-sm font-medium text-slate-700 mb-1.5">Uraian Keberatan <span class="text-red-500">*</span></label>
<textarea name="uraian" rows="4" class="w-full rounded-lg border px-4 py-2.5 outline-none focus:ring-4 <?= $inputClass('uraian') ?>" placeholder="Jelaskan keberatan Anda secara rinci..."><?= $val('uraian') ?></textarea>
<?php if (isset($errors['uraian'])): ?><p class="text-xs text-red-500 mt-1"><?= e($errors['uraian']) ?></p><?php endif; ?>
</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-gavel"></i> Kirim Keberatan
</button>
</form>
<?php endif; ?>
</main>
<?php require __DIR__ . '/partials/footer.php'; ?>