query("SELECT * FROM rumah_ibadah ORDER BY id"); while($r=$ri->fetch_assoc()) $ibadah[]=$r; $rm=$conn->query("SELECT * FROM rumah_miskin ORDER BY prioritas DESC, id"); while($r=$rm->fetch_assoc()) $miskin[]=$r; echo json_encode(['status'=>'ok','ibadah'=>$ibadah,'miskin'=>$miskin]); break; // ════════ SIMPAN IBADAH (peta/form) ════════ case 'simpan_ibadah': case 'simpan_ibadah_form': $nama = bersih($_POST['nama_ibadah'] ??'', $conn); $kat = bersih($_POST['kategori'] ??'Masjid', $conn); $alamat = bersih($_POST['alamat'] ??'', $conn); $peng = bersih($_POST['nama_pengurus'] ??'', $conn); $telp = bersih($_POST['no_telp'] ??'', $conn); $kuota = (int)($_POST['kuota_bantuan'] ??20); $radius = (int)($_POST['radius_m'] ??300); $lat = (float)($_POST['lat'] ??0); $lng = (float)($_POST['lng'] ??0); if(!$nama||!$lat||!$lng){ echo json_encode(['status'=>'error','message'=>'Data tidak lengkap']); break; } $sql="INSERT INTO rumah_ibadah(nama_ibadah,kategori,alamat,nama_pengurus,no_telp,kuota_bantuan,radius_m,lat,lng,dibuat_oleh) VALUES('$nama','$kat','$alamat','$peng','$telp',$kuota,$radius,$lat,$lng,$uid)"; if($conn->query($sql)){ if($aksi==='simpan_ibadah_form') redir('data-ibadah.php','Rumah ibadah berhasil ditambahkan'); echo json_encode(['status'=>'ok','id'=>$conn->insert_id]); } else echo json_encode(['status'=>'error','message'=>$conn->error]); break; // ════════ SIMPAN KPM (peta/form) ════════ case 'simpan_miskin': case 'simpan_miskin_form': $nama = bersih($_POST['nama_kk'] ??'', $conn); $nik = bersih($_POST['nik'] ??'', $conn); $tgl = bersih($_POST['tanggal_lahir'] ??'', $conn); $jk = bersih($_POST['jenis_kelamin'] ??'Laki-laki', $conn); $tang = (int)($_POST['jumlah_tanggungan'] ??0); $pend = (int)($_POST['pendapatan_bulanan'] ??0); $kerja = bersih($_POST['pekerjaan'] ??'', $conn); $kond = bersih($_POST['kondisi_rumah'] ??'Tidak Layak', $conn); $telp = bersih($_POST['no_telp'] ??'', $conn); $rtrw = bersih($_POST['rt_rw'] ??'', $conn); $kel = bersih($_POST['kelurahan'] ??'', $conn); $kec = bersih($_POST['kecamatan'] ??'', $conn); $ket = bersih($_POST['keterangan'] ??'', $conn); $lat = (float)($_POST['lat'] ??0); $lng = (float)($_POST['lng'] ??0); $tglVal= $tgl ? "'$tgl'" : 'NULL'; if(!$nama||!$lat||!$lng){ echo json_encode(['status'=>'error','message'=>'Data tidak lengkap']); break; } $sql="INSERT INTO rumah_miskin(nama_kepala_keluarga,nik,tanggal_lahir,jenis_kelamin,jumlah_tanggungan,pendapatan_bulanan,pekerjaan,kondisi_rumah,no_telp,rt_rw,kelurahan,kecamatan,keterangan,lat,lng,didata_oleh) VALUES('$nama','$nik',$tglVal,'$jk',$tang,$pend,'$kerja','$kond','$telp','$rtrw','$kel','$kec','$ket',$lat,$lng,$uid)"; if($conn->query($sql)){ if($aksi==='simpan_miskin_form') redir('data-warga.php','Data KPM berhasil ditambahkan'); echo json_encode(['status'=>'ok','id'=>$conn->insert_id]); } else echo json_encode(['status'=>'error','message'=>$conn->error]); break; // ════════ EDIT IBADAH ════════ case 'edit_ibadah': $id = (int)($_POST['id']??0); $nama = bersih($_POST['nama_ibadah'] ??'', $conn); $kat = bersih($_POST['kategori'] ??'', $conn); $alm = bersih($_POST['alamat'] ??'', $conn); $peng = bersih($_POST['nama_pengurus'] ??'', $conn); $telp = bersih($_POST['no_telp'] ??'', $conn); $kuo = (int)($_POST['kuota_bantuan'] ??20); $rad = (int)($_POST['radius_m'] ??300); if(!$id||!$nama){redir('data-ibadah.php','Data tidak lengkap','error');break;} $conn->query("UPDATE rumah_ibadah SET nama_ibadah='$nama',kategori='$kat',alamat='$alm',nama_pengurus='$peng',no_telp='$telp',kuota_bantuan=$kuo,radius_m=$rad WHERE id=$id"); redir('data-ibadah.php','Data rumah ibadah diperbarui'); break; // ════════ EDIT KPM ════════ case 'edit_miskin': $id = (int)($_POST['id']??0); $nama = bersih($_POST['nama_kk'] ??'', $conn); $nik = bersih($_POST['nik'] ??'', $conn); $tgl = bersih($_POST['tanggal_lahir'] ??'', $conn); $jk = bersih($_POST['jenis_kelamin'] ??'Laki-laki', $conn); $tang = (int)($_POST['jumlah_tanggungan'] ??0); $pend = (int)($_POST['pendapatan_bulanan'] ??0); $kerja= bersih($_POST['pekerjaan'] ??'', $conn); $kond = bersih($_POST['kondisi_rumah'] ??'', $conn); $stat = bersih($_POST['status_bantuan'] ??'Belum Terbantu', $conn); $rtrw = bersih($_POST['rt_rw'] ??'', $conn); $kel = bersih($_POST['kelurahan'] ??'', $conn); $kec = bersih($_POST['kecamatan'] ??'', $conn); $telp = bersih($_POST['no_telp'] ??'', $conn); $ket = bersih($_POST['keterangan'] ??'', $conn); $tglVal= $tgl ? "'$tgl'" : 'NULL'; if(!$id||!$nama){redir('data-warga.php','Data tidak lengkap','error');break;} $conn->query("UPDATE rumah_miskin SET nama_kepala_keluarga='$nama',nik='$nik',tanggal_lahir=$tglVal,jenis_kelamin='$jk',jumlah_tanggungan=$tang,pendapatan_bulanan=$pend,pekerjaan='$kerja',kondisi_rumah='$kond',status_bantuan='$stat',rt_rw='$rtrw',kelurahan='$kel',kecamatan='$kec',no_telp='$telp',keterangan='$ket' WHERE id=$id"); redir('data-warga.php','Data KPM diperbarui'); break; // ════════ UPDATE RADIUS ════════ case 'update_radius': $id=$conn->real_escape_string($_POST['id']??0); $r =(int)($_POST['radius']??300); $conn->query("UPDATE rumah_ibadah SET radius_m=$r WHERE id=$id"); echo json_encode(['status'=>'ok']); break; // ════════ UPDATE KOORDINAT ════════ case 'update_coords': $jenis=bersih($_POST['jenis']??'', $conn); $id =(int)($_POST['id']??0); $lat =(float)($_POST['lat']??0); $lng =(float)($_POST['lng']??0); $tbl =($jenis==='ibadah')?'rumah_ibadah':'rumah_miskin'; $conn->query("UPDATE $tbl SET lat=$lat,lng=$lng WHERE id=$id"); echo json_encode(['status'=>'ok']); break; // ════════ UPDATE STATUS BANTUAN MASSAL ════════ case 'update_status_bantuan': $updates=json_decode(file_get_contents('php://input'),true); if(!is_array($updates)){echo json_encode(['status'=>'error']);break;} foreach($updates as $item){ $id=(int)$item['id']; $st=bersih($item['status'],$conn); $conn->query("UPDATE rumah_miskin SET status_bantuan='$st' WHERE id=$id"); } echo json_encode(['status'=>'ok']); break; // ════════ HAPUS UMUM ════════ case 'hapus': $jenis=bersih($_POST['jenis']??'',$conn); $id=(int)($_POST['id']??0); $tbl=($jenis==='ibadah')?'rumah_ibadah':'rumah_miskin'; $conn->query("DELETE FROM $tbl WHERE id=$id"); echo json_encode(['status'=>'ok']); break; // ════════ SIMPAN BANTUAN ════════ case 'simpan_bantuan': $wid =(int)($_POST['warga_id'] ??0); $iid =(int)($_POST['ibadah_id'] ??0) ?: 'NULL'; $bid =(int)($_POST['bencana_id'] ??0) ?: 'NULL'; $jenis= bersih($_POST['jenis_bantuan']??'',$conn); $jml = bersih($_POST['jumlah'] ??'',$conn); $tgl = bersih($_POST['tanggal'] ??date('Y-m-d'),$conn); $pet = bersih($_POST['petugas'] ??'',$conn); $ket = bersih($_POST['keterangan'] ??'',$conn); if(!$wid||!$jenis){redir('data-warga.php','Data tidak lengkap','error');break;} $conn->query("INSERT INTO bantuan_tersalur(warga_id,ibadah_id,bencana_id,jenis_bantuan,jumlah,tanggal,petugas,keterangan,disalurkan_oleh) VALUES($wid,$iid,$bid,'$jenis','$jml','$tgl','$pet','$ket',$uid)"); $conn->query("UPDATE rumah_miskin SET status_bantuan='Sudah Menerima' WHERE id=$wid"); redir('data-warga.php','Bantuan berhasil dicatat'); break; // ════════ BENCANA ════════ case 'simpan_bencana': $nama = bersih($_POST['nama_bencana']??'',$conn); $jenis= bersih($_POST['jenis'] ??'Banjir',$conn); $tgl = bersih($_POST['tanggal'] ??date('Y-m-d'),$conn); $lok = bersih($_POST['lokasi'] ??'',$conn); $desk = bersih($_POST['deskripsi'] ??'',$conn); if(!$nama){redir('bencana.php','Nama bencana wajib diisi','error');break;} $conn->query("INSERT INTO bencana(nama_bencana,jenis,tanggal,lokasi,deskripsi,dibuat_oleh) VALUES('$nama','$jenis','$tgl','$lok','$desk',$uid)"); redir('bencana.php','Bencana berhasil dicatat'); break; case 'update_status_bencana': $id=(int)($_POST['id']??0); $st=bersih($_POST['status']??'Aktif',$conn); $conn->query("UPDATE bencana SET status='$st' WHERE id=$id"); echo json_encode(['status'=>'ok']); break; case 'hapus_bencana': $id=(int)($_POST['id']??0); $conn->query("DELETE FROM bencana WHERE id=$id"); echo json_encode(['status'=>'ok']); break; // ════════ TERDAMPAK BENCANA ════════ case 'tandai_terdampak': $bid =(int)($_POST['bencana_id']??0); $wid =(int)($_POST['warga_id'] ??0); $tkt = bersih($_POST['tingkat'] ??'Sedang',$conn); $ket = bersih($_POST['keterangan']??'',$conn); if(!$bid||!$wid){echo json_encode(['status'=>'error','message'=>'Data tidak lengkap']);break;} // Cek duplikat $cek=$conn->query("SELECT id FROM bencana_terdampak WHERE bencana_id=$bid AND warga_id=$wid"); if($cek->num_rows>0){echo json_encode(['status'=>'error','message'=>'Warga sudah ditandai']);break;} $conn->query("INSERT INTO bencana_terdampak(bencana_id,warga_id,tingkat,keterangan,ditandai_oleh) VALUES($bid,$wid,'$tkt','$ket',$uid)"); // Set prioritas $conn->query("UPDATE rumah_miskin SET prioritas=1 WHERE id=$wid"); echo json_encode(['status'=>'ok']); break; case 'hapus_terdampak': $id=(int)($_POST['id']??0); // Ambil warga_id sebelum hapus $r=$conn->query("SELECT warga_id FROM bencana_terdampak WHERE id=$id")->fetch_assoc(); $conn->query("DELETE FROM bencana_terdampak WHERE id=$id"); // Cek apakah masih ada bencana lain if($r){ $wid=$r['warga_id']; $sisa=$conn->query("SELECT id FROM bencana_terdampak WHERE warga_id=$wid"); if($sisa->num_rows===0) $conn->query("UPDATE rumah_miskin SET prioritas=0 WHERE id=$wid"); } echo json_encode(['status'=>'ok']); break; case 'list_terdampak': $bid=(int)($_GET['bencana_id']??0); $list=[]; $r=$conn->query("SELECT bt.*, rm.nama_kepala_keluarga FROM bencana_terdampak bt LEFT JOIN rumah_miskin rm ON bt.warga_id=rm.id WHERE bt.bencana_id=$bid ORDER BY bt.created_at DESC"); while($row=$r->fetch_assoc()) $list[]=$row; echo json_encode(['status'=>'ok','data'=>$list]); break; // ════════ USER MANAGEMENT (admin only) ════════ case 'tambah_user': if($_SESSION['role']!=='admin'){echo json_encode(['status'=>'error']);break;} $nama = bersih($_POST['nama_lengkap']??'',$conn); $uname = bersih($_POST['username'] ??'',$conn); $email = bersih($_POST['email'] ??'',$conn); $role = bersih($_POST['role'] ??'relawan',$conn); $pw = $_POST['password']??''; $pw2 = $_POST['password2']??''; if(!$nama||!$uname||!$email||!$pw){redir('manajemen-user.php','Semua field wajib diisi','error');break;} if($pw!==$pw2){redir('manajemen-user.php','Password tidak cocok','error');break;} if(strlen($pw)<6){redir('manajemen-user.php','Password minimal 6 karakter','error');break;} $hash=password_hash($pw,PASSWORD_DEFAULT); // Cek duplikat $cek=$conn->query("SELECT id FROM users WHERE username='$uname' OR email='$email'"); if($cek->num_rows>0){redir('manajemen-user.php','Username atau email sudah digunakan','error');break;} $conn->query("INSERT INTO users(nama_lengkap,username,email,password,role) VALUES('$nama','$uname','$email','$hash','$role')"); redir('manajemen-user.php','User berhasil dibuat'); break; case 'edit_user': if($_SESSION['role']!=='admin'){echo json_encode(['status'=>'error']);break;} $id =(int)($_POST['id']??0); $nama = bersih($_POST['nama_lengkap']??'',$conn); $uname = bersih($_POST['username'] ??'',$conn); $email = bersih($_POST['email'] ??'',$conn); $role = bersih($_POST['role'] ??'relawan',$conn); $conn->query("UPDATE users SET nama_lengkap='$nama',username='$uname',email='$email',role='$role' WHERE id=$id"); redir('manajemen-user.php','Data user diperbarui'); break; case 'reset_password': if($_SESSION['role']!=='admin'){break;} $id =(int)($_POST['id']??0); $pw =$_POST['password_baru']??''; $pw2 =$_POST['password_baru2']??''; if($pw!==$pw2){redir('manajemen-user.php','Password tidak cocok','error');break;} if(strlen($pw)<6){redir('manajemen-user.php','Password minimal 6 karakter','error');break;} $hash=password_hash($pw,PASSWORD_DEFAULT); $conn->query("UPDATE users SET password='$hash' WHERE id=$id"); redir('manajemen-user.php','Password berhasil direset'); break; case 'toggle_aktif': if($_SESSION['role']!=='admin'){break;} $id=(int)($_POST['id']??0); $ak=(int)($_POST['aktif']??0); $conn->query("UPDATE users SET aktif=$ak WHERE id=$id"); echo json_encode(['status'=>'ok']); break; case 'hapus_user': if($_SESSION['role']!=='admin'){break;} $id=(int)($_POST['id']??0); if($id===$uid){echo json_encode(['status'=>'error','message'=>'Tidak bisa hapus akun sendiri']);break;} $conn->query("DELETE FROM users WHERE id=$id"); echo json_encode(['status'=>'ok']); break; // ════════ KONFIRMASI BANTUAN (operator/relawan) ════════ case 'konfirmasi_bantuan': $id = (int)($_POST['id'] ?? 0); $status = bersih($_POST['status'] ?? 'Menunggu', $conn); $nama_p = bersih($_POST['nama_penerima_konfirmasi'] ?? '', $conn); $catatan= bersih($_POST['catatan_konfirmasi'] ?? '', $conn); if (!$id) { echo json_encode(['status'=>'error','message'=>'ID tidak valid']); break; } $conn->query("UPDATE bantuan_tersalur SET status_konfirmasi='$status', nama_penerima_konfirmasi='$nama_p', catatan_konfirmasi='$catatan', dikonfirmasi_oleh=$uid, tgl_konfirmasi=NOW() WHERE id=$id"); // Update status KPM jika dikonfirmasi if ($status === 'Dikonfirmasi') { $wid = $conn->query("SELECT warga_id FROM bantuan_tersalur WHERE id=$id")->fetch_assoc()['warga_id'] ?? 0; if ($wid) $conn->query("UPDATE rumah_miskin SET status_bantuan='Sudah Menerima' WHERE id=$wid"); } redir('konfirmasi-bantuan.php?tab='.strtolower($status === 'Dikonfirmasi' ? 'dikonfirmasi' : 'ditolak'), $status === 'Dikonfirmasi' ? 'Bantuan berhasil dikonfirmasi' : 'Laporan berhasil dikirim'); break; // ════════ HAPUS BANTUAN ════════ case 'hapus_bantuan': $id = (int)($_POST['id'] ?? 0); $conn->query("DELETE FROM bantuan_tersalur WHERE id=$id"); echo json_encode(['status'=>'ok']); break; default: echo json_encode(['status'=>'error','message'=>'Aksi tidak dikenal: '.$aksi]); } $conn->close();