Files
D1041231091-WebGIS-All/05/update_status_penerima.php

57 lines
3.1 KiB
PHP

<?php
require_once __DIR__ . '/auth.php';
require_login(true);
require_post();
require_role(['super_admin','admin_rumah_ibadah'], true);
$id = (int) post('id', 0);
$status = post('status_pengajuan', post('status', ''));
$alasan = clean_text(post('alasan_status', post('alasan', '')), 1000);
$allowed = ['menunggu','diterima','ditolak','dibatalkan','hapus_disetujui','hapus_ditolak'];
if (!valid_enum($status, $allowed)) json_response('err', 'Status tidak valid.');
$penerima = get_penerima_by_id($id);
if (!$penerima) json_response('err', 'Data penerima tidak ditemukan.', [], 404);
// Persetujuan/penolakan hapus marker hanya boleh dilakukan super admin.
if ($status === 'hapus_disetujui' || $status === 'hapus_ditolak') {
require_role('super_admin', true);
$catatan = $alasan ?: ($status === 'hapus_disetujui' ? 'Pengajuan hapus marker penerima disetujui.' : 'Pengajuan hapus marker penerima ditolak.');
if ($status === 'hapus_disetujui') {
$statusPengajuan = 'dibatalkan';
$statusHapus = 'disetujui';
$stmt = $koneksi->prepare("UPDATE penerima_bantuan SET status_pengajuan=?, status_hapus=?, alasan_hapus=?, alasan_status=? WHERE id=?");
$stmt->bind_param('ssssi', $statusPengajuan, $statusHapus, $catatan, $catatan, $id);
} else {
$statusHapus = 'ditolak';
$stmt = $koneksi->prepare("UPDATE penerima_bantuan SET status_hapus=?, alasan_hapus=? WHERE id=?");
$stmt->bind_param('ssi', $statusHapus, $catatan, $id);
}
if (!$stmt->execute()) json_response('err', 'Gagal memproses persetujuan hapus penerima: ' . $koneksi->error);
insert_riwayat_status($id, $penerima['status_pengajuan'], $status, $catatan);
json_response('ok', 'Persetujuan hapus marker penerima berhasil diproses.', get_penerima_by_id($id));
}
if (!can_manage_penerima($penerima)) json_response('err', 'Data tidak ditemukan atau akses ditolak.', [], 403);
// FIX: admin_rumah_ibadah tidak boleh memundurkan status ke 'menunggu' jika sudah 'diterima' atau 'ditolak'.
// Hanya super_admin yang bisa mereset status.
if ($status === 'menunggu' && $_SESSION['role'] === 'admin_rumah_ibadah') {
json_response('err', 'Admin rumah ibadah tidak dapat mereset status penerima ke menunggu. Hubungi super admin.', [], 403);
}
// FIX: admin_rumah_ibadah tidak bisa membatalkan penerima yang sudah 'diterima' — hanya super_admin.
if ($status === 'dibatalkan' && $penerima['status_pengajuan'] === 'diterima' && $_SESSION['role'] === 'admin_rumah_ibadah') {
json_response('err', 'Admin rumah ibadah tidak dapat membatalkan penerima yang sudah berstatus diterima. Hubungi super admin.', [], 403);
}
$status_lama = $penerima['status_pengajuan'];
$stmt = $koneksi->prepare("UPDATE penerima_bantuan SET status_pengajuan=?, alasan_status=? WHERE id=?");
$stmt->bind_param('ssi', $status, $alasan, $id);
if (!$stmt->execute()) json_response('err', 'Gagal update status: ' . $koneksi->error);
insert_riwayat_status($id, $status_lama, $status, $alasan ?: 'Status penerima diubah.');
$row = get_penerima_by_id($id);
json_response('ok', 'Status penerima berhasil diubah.', $row);
?>