diff --git a/peta.php b/peta.php new file mode 100644 index 0000000..e29f486 --- /dev/null +++ b/peta.php @@ -0,0 +1,444 @@ + +'; + +include 'includes/sidebar.php'; +?> + + +
+ +
+ + + + + + + +
+ +
+ + +
+ + + +
+ +
+ + +
+ + + + +
+ +
+ + +
+ 0 Ibadah + 0 Terjangkau + 0 Blank Spot +
+
+ + +
+
+
+
+
Legenda
+
Rumah Ibadah
+
Radius
+
KPM Terjangkau
+
KPM Blank Spot
+
KPM Prioritas
+
+
+ + + + + \ No newline at end of file diff --git a/proses.php b/proses.php new file mode 100644 index 0000000..9c6a2ec --- /dev/null +++ b/proses.php @@ -0,0 +1,335 @@ +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(); \ No newline at end of file