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); ?>