57 lines
3.1 KiB
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);
|
|
?>
|