first commit
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
// php/check_auth.php
|
||||
require_once 'koneksi.php';
|
||||
if (session_status() === PHP_SESSION_NONE) { session_start(); }
|
||||
|
||||
header('Content-Type: application/json');
|
||||
|
||||
if (empty($_SESSION['user_id'])) {
|
||||
echo json_encode(['loggedIn' => false]);
|
||||
} else {
|
||||
echo json_encode([
|
||||
'loggedIn' => true,
|
||||
'nama' => $_SESSION['user_nama'] ?? '',
|
||||
'role' => $_SESSION['user_role'] ?? ''
|
||||
]);
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
// php/create_anggota.php
|
||||
require_once 'koneksi.php';
|
||||
header('Content-Type: text/plain');
|
||||
|
||||
$kemiskinanId = intval($_POST['kemiskinan_id'] ?? 0);
|
||||
$nama = trim($_POST['nama'] ?? '');
|
||||
$tanggalLahir = trim($_POST['tanggal_lahir'] ?? '');
|
||||
$jenisKelamin = trim($_POST['jenis_kelamin'] ?? 'laki_laki');
|
||||
$hubungan = trim($_POST['hubungan_keluarga'] ?? 'anak');
|
||||
$statusHidup = trim($_POST['status_hidup'] ?? 'hidup');
|
||||
$pendidikan = trim($_POST['pendidikan'] ?? 'belum_sekolah');
|
||||
$catatan = trim($_POST['catatan_khusus'] ?? '');
|
||||
|
||||
if (!$kemiskinanId || !$nama) {
|
||||
http_response_code(400); echo 'Data tidak lengkap.'; exit;
|
||||
}
|
||||
|
||||
// Validasi enum
|
||||
$validJK = ['laki_laki','perempuan'];
|
||||
$validHub = ['kepala_keluarga','istri','anak','orang_tua','saudara','lainnya'];
|
||||
$validStatus = ['hidup','meninggal','pindah','menikah_keluar'];
|
||||
$validPendid = ['belum_sekolah','paud','sd','smp','sma','kuliah','pesantren','pelatihan','bekerja','tidak_sekolah'];
|
||||
|
||||
if (!in_array($jenisKelamin, $validJK)) $jenisKelamin = 'laki_laki';
|
||||
if (!in_array($hubungan, $validHub)) $hubungan = 'anak';
|
||||
if (!in_array($statusHidup, $validStatus)) $statusHidup = 'hidup';
|
||||
if (!in_array($pendidikan, $validPendid)) $pendidikan = 'belum_sekolah';
|
||||
|
||||
// Validasi tanggal
|
||||
$tgl = (!empty($tanggalLahir) && strtotime($tanggalLahir)) ? $tanggalLahir : null;
|
||||
|
||||
$stmt = $conn->prepare(
|
||||
"INSERT INTO anggota_keluarga (kemiskinan_id, nama, tanggal_lahir, jenis_kelamin, hubungan_keluarga, status_hidup, pendidikan, catatan_khusus)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?)"
|
||||
);
|
||||
if (!$stmt) { http_response_code(500); echo 'Gagal prepare.'; exit; }
|
||||
|
||||
$stmt->bind_param('isssssss', $kemiskinanId, $nama, $tgl, $jenisKelamin, $hubungan, $statusHidup, $pendidikan, $catatan);
|
||||
if ($stmt->execute()) {
|
||||
echo 'success';
|
||||
} else {
|
||||
http_response_code(500); echo 'Gagal menyimpan: ' . $stmt->error;
|
||||
}
|
||||
$stmt->close();
|
||||
?>
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
// php/create_bantuan.php — simpan histori bantuan
|
||||
require_once 'koneksi.php';
|
||||
header('Content-Type: text/plain');
|
||||
|
||||
$kemiskinanId = intval($_POST['kemiskinan_id'] ?? 0);
|
||||
$masjidId = !empty($_POST['masjid_id']) ? intval($_POST['masjid_id']) : null;
|
||||
$jenisBantuan = trim($_POST['jenis_bantuan'] ?? 'lainnya');
|
||||
$deskripsi = trim($_POST['deskripsi_bantuan'] ?? '');
|
||||
$jumlahBantuan = !empty($_POST['jumlah_bantuan']) ? floatval($_POST['jumlah_bantuan']) : null;
|
||||
$satuan = trim($_POST['satuan'] ?? '');
|
||||
$tanggal = trim($_POST['tanggal_bantuan'] ?? date('Y-m-d'));
|
||||
$periodeBerikutnya = !empty($_POST['periode_berikutnya']) ? trim($_POST['periode_berikutnya']) : null;
|
||||
$statusPenyaluran = trim($_POST['status_penyaluran'] ?? 'belum');
|
||||
$dicatatOleh = trim($_POST['dicatat_oleh'] ?? '');
|
||||
|
||||
if (!$kemiskinanId || !$deskripsi) {
|
||||
http_response_code(400); echo 'Data tidak lengkap.'; exit;
|
||||
}
|
||||
$validJenis = ['sembako','uang','pendidikan','kesehatan','pakaian','pelatihan','lainnya'];
|
||||
$validStatus = ['tersalur','belum','batal'];
|
||||
if (!in_array($jenisBantuan, $validJenis)) $jenisBantuan = 'lainnya';
|
||||
if (!in_array($statusPenyaluran, $validStatus)) $statusPenyaluran = 'belum';
|
||||
if (!strtotime($tanggal)) $tanggal = date('Y-m-d');
|
||||
if ($periodeBerikutnya && !strtotime($periodeBerikutnya)) $periodeBerikutnya = null;
|
||||
|
||||
$esc = fn($v) => mysqli_real_escape_string($conn, (string)$v);
|
||||
|
||||
$mjId = $masjidId ? intval($masjidId) : 'NULL';
|
||||
$jml = $jumlahBantuan !== null ? floatval($jumlahBantuan) : 'NULL';
|
||||
$prd = $periodeBerikutnya ? "'" . $esc($periodeBerikutnya) . "'" : 'NULL';
|
||||
|
||||
$sql = "INSERT INTO histori_bantuan
|
||||
(kemiskinan_id, masjid_id, jenis_bantuan, deskripsi_bantuan, jumlah_bantuan, satuan, tanggal_bantuan, periode_berikutnya, status_penyaluran, dicatat_oleh)
|
||||
VALUES (
|
||||
{$kemiskinanId}, {$mjId},
|
||||
'{$esc($jenisBantuan)}', '{$esc($deskripsi)}',
|
||||
{$jml}, '{$esc($satuan)}', '{$esc($tanggal)}',
|
||||
{$prd}, '{$esc($statusPenyaluran)}', '{$esc($dicatatOleh)}'
|
||||
)";
|
||||
|
||||
if (mysqli_query($conn, $sql)) {
|
||||
echo 'success';
|
||||
} else {
|
||||
http_response_code(500); echo 'Gagal: ' . mysqli_error($conn);
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
// php/create_kemiskinan.php
|
||||
include 'koneksi.php';
|
||||
|
||||
$namaKepalaKeluarga = trim($_POST['nama_kepala_keluarga'] ?? '');
|
||||
$jumlahKkRaw = $_POST['jumlah_kk'] ?? null;
|
||||
$jumlahKk = filter_var($jumlahKkRaw, FILTER_VALIDATE_INT);
|
||||
$alamat = trim($_POST['alamat'] ?? '');
|
||||
$statusKeluarga = $_POST['status_keluarga'] ?? 'aktif';
|
||||
$latitudeRaw = $_POST['lat'] ?? null;
|
||||
$longitudeRaw = $_POST['lng'] ?? null;
|
||||
$latitude = is_numeric($latitudeRaw) ? (float) $latitudeRaw : null;
|
||||
$longitude = is_numeric($longitudeRaw) ? (float) $longitudeRaw : null;
|
||||
|
||||
$validStatus = ['aktif', 'meninggal', 'pindah', 'sudah_mampu'];
|
||||
if (!in_array($statusKeluarga, $validStatus)) { $statusKeluarga = 'aktif'; }
|
||||
|
||||
if ($namaKepalaKeluarga === '' || $alamat === '' || $jumlahKk === false || $jumlahKk === null || $jumlahKk < 1 || $latitude === null || $longitude === null) {
|
||||
http_response_code(400);
|
||||
exit('error');
|
||||
}
|
||||
|
||||
$statement = null;
|
||||
|
||||
try {
|
||||
$statement = mysqli_prepare(
|
||||
$conn,
|
||||
"INSERT INTO kemiskinan (nama_kepala_keluarga, jumlah_kk, alamat, latitude, longitude, status_keluarga) VALUES (?, ?, ?, ?, ?, ?)"
|
||||
);
|
||||
|
||||
mysqli_stmt_bind_param($statement, "sisdds", $namaKepalaKeluarga, $jumlahKk, $alamat, $latitude, $longitude, $statusKeluarga);
|
||||
|
||||
if (mysqli_stmt_execute($statement)) {
|
||||
echo 'success';
|
||||
} else {
|
||||
http_response_code(500);
|
||||
echo 'error';
|
||||
}
|
||||
} catch (mysqli_sql_exception $exception) {
|
||||
http_response_code(500);
|
||||
echo 'error: ' . $exception->getMessage();
|
||||
}
|
||||
|
||||
if ($statement) {
|
||||
mysqli_stmt_close($statement);
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
// php/create_laporan.php — PUBLIK, tidak butuh login
|
||||
require_once 'koneksi.php';
|
||||
header('Content-Type: text/plain');
|
||||
|
||||
$kemiskinanId = !empty($_POST['kemiskinan_id']) ? intval($_POST['kemiskinan_id']) : null;
|
||||
$namaPelapor = trim($_POST['nama_pelapor'] ?? '');
|
||||
$nomorWa = trim($_POST['nomor_wa'] ?? '');
|
||||
$kategori = trim($_POST['kategori'] ?? 'lainnya');
|
||||
$deskripsi = trim($_POST['deskripsi'] ?? '');
|
||||
|
||||
if (!$namaPelapor || !$deskripsi) {
|
||||
http_response_code(400); echo 'Nama pelapor dan deskripsi wajib diisi.'; exit;
|
||||
}
|
||||
|
||||
$validKategori = ['sakit','kematian','kelahiran','pernikahan','pindah','darurat_ekonomi','lainnya'];
|
||||
if (!in_array($kategori, $validKategori)) $kategori = 'lainnya';
|
||||
|
||||
$esc = fn($v) => mysqli_real_escape_string($conn, (string)$v);
|
||||
$kemId = $kemiskinanId ? intval($kemiskinanId) : 'NULL';
|
||||
|
||||
$sql = "INSERT INTO laporan_kondisi (kemiskinan_id, nama_pelapor, nomor_wa, kategori, deskripsi)
|
||||
VALUES ({$kemId}, '{$esc($namaPelapor)}', '{$esc($nomorWa)}', '{$esc($kategori)}', '{$esc($deskripsi)}')";
|
||||
|
||||
if (mysqli_query($conn, $sql)) { echo 'success'; }
|
||||
else { http_response_code(500); echo 'Gagal: ' . mysqli_error($conn); }
|
||||
?>
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
// php/create_masjid.php — tambah rumah ibadah
|
||||
include 'koneksi.php';
|
||||
|
||||
$namaIbadah = trim($_POST['nama_masjid'] ?? '');
|
||||
$picIbadah = trim($_POST['pic_masjid'] ?? '');
|
||||
$alamat = trim($_POST['alamat'] ?? '');
|
||||
$latitudeRaw = $_POST['lat'] ?? null;
|
||||
$longitudeRaw= $_POST['lng'] ?? null;
|
||||
$radiusRaw = $_POST['radius'] ?? 500;
|
||||
$jenisIbadah = trim($_POST['jenis_ibadah'] ?? 'masjid');
|
||||
$latitude = is_numeric($latitudeRaw) ? (float) $latitudeRaw : null;
|
||||
$longitude = is_numeric($longitudeRaw) ? (float) $longitudeRaw : null;
|
||||
$radius = is_numeric($radiusRaw) ? (float) $radiusRaw : null;
|
||||
|
||||
$validJenis = ['masjid','gereja','vihara','pura','klenteng','kapel','lainnya'];
|
||||
if (!in_array($jenisIbadah, $validJenis)) { $jenisIbadah = 'lainnya'; }
|
||||
|
||||
if ($namaIbadah === '' || $picIbadah === '' || $alamat === '' || $latitude === null || $longitude === null || $radius === null || $radius < 100 || $radius > 5000) {
|
||||
http_response_code(400);
|
||||
exit('error: data tidak lengkap');
|
||||
}
|
||||
|
||||
$stmt = $conn->prepare(
|
||||
"INSERT INTO masjid (nama_masjid, pic_masjid, alamat, latitude, longitude, radius, jenis_ibadah)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)"
|
||||
);
|
||||
if (!$stmt) { http_response_code(500); echo 'Gagal prepare: ' . $conn->error; exit; }
|
||||
|
||||
$stmt->bind_param('sssddis', $namaIbadah, $picIbadah, $alamat, $latitude, $longitude, $radius, $jenisIbadah);
|
||||
|
||||
if ($stmt->execute()) {
|
||||
echo 'success';
|
||||
} else {
|
||||
http_response_code(500);
|
||||
echo 'error: ' . $stmt->error;
|
||||
}
|
||||
$stmt->close();
|
||||
?>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
// php/delete_anggota.php
|
||||
require_once 'koneksi.php';
|
||||
header('Content-Type: text/plain');
|
||||
|
||||
$id = intval($_POST['id'] ?? 0);
|
||||
if (!$id) { http_response_code(400); echo 'ID tidak valid.'; exit; }
|
||||
|
||||
$stmt = $conn->prepare("DELETE FROM anggota_keluarga WHERE id=?");
|
||||
$stmt->bind_param('i', $id);
|
||||
if ($stmt->execute()) { echo 'success'; }
|
||||
else { http_response_code(500); echo 'Gagal: ' . $stmt->error; }
|
||||
$stmt->close();
|
||||
?>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
// php/delete_bantuan.php
|
||||
require_once 'koneksi.php';
|
||||
header('Content-Type: text/plain');
|
||||
$id = intval($_POST['id'] ?? 0);
|
||||
if (!$id) { http_response_code(400); echo 'ID tidak valid.'; exit; }
|
||||
if (mysqli_query($conn, "DELETE FROM histori_bantuan WHERE id={$id}")) { echo 'success'; }
|
||||
else { http_response_code(500); echo mysqli_error($conn); }
|
||||
?>
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
include 'koneksi.php';
|
||||
|
||||
$idRaw = $_POST['id'] ?? null;
|
||||
$id = filter_var($idRaw, FILTER_VALIDATE_INT);
|
||||
|
||||
if ($id === false || $id === null || $id <= 0) {
|
||||
http_response_code(400);
|
||||
exit('error');
|
||||
}
|
||||
|
||||
$statement = mysqli_prepare($conn, "DELETE FROM kemiskinan WHERE id = ?");
|
||||
mysqli_stmt_bind_param($statement, "i", $id);
|
||||
|
||||
try {
|
||||
if (mysqli_stmt_execute($statement)) {
|
||||
echo 'success';
|
||||
} else {
|
||||
http_response_code(500);
|
||||
echo 'error';
|
||||
}
|
||||
} catch (mysqli_sql_exception $exception) {
|
||||
http_response_code(500);
|
||||
echo 'error: ' . $exception->getMessage();
|
||||
}
|
||||
|
||||
mysqli_stmt_close($statement);
|
||||
?>
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
include 'koneksi.php';
|
||||
|
||||
$idRaw = $_POST['id'] ?? null;
|
||||
$id = filter_var($idRaw, FILTER_VALIDATE_INT);
|
||||
|
||||
if ($id === false || $id === null || $id <= 0) {
|
||||
http_response_code(400);
|
||||
exit('error');
|
||||
}
|
||||
|
||||
$statement = mysqli_prepare($conn, "DELETE FROM masjid WHERE id = ?");
|
||||
mysqli_stmt_bind_param($statement, "i", $id);
|
||||
|
||||
try {
|
||||
if (mysqli_stmt_execute($statement)) {
|
||||
echo 'success';
|
||||
} else {
|
||||
http_response_code(500);
|
||||
echo 'error';
|
||||
}
|
||||
} catch (mysqli_sql_exception $exception) {
|
||||
http_response_code(500);
|
||||
echo 'error: ' . $exception->getMessage();
|
||||
}
|
||||
|
||||
mysqli_stmt_close($statement);
|
||||
?>
|
||||
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_WARNING);
|
||||
include 'koneksi.php';
|
||||
|
||||
header('Content-Type: text/csv; charset=utf-8');
|
||||
header('Content-Disposition: attachment; filename="Data_Keluarga_Prasejahtera_GeoPoverty.csv"');
|
||||
|
||||
$output = fopen('php://output', 'w');
|
||||
|
||||
// Header CSV
|
||||
fputcsv($output, [
|
||||
'ID',
|
||||
'Nama Kepala Keluarga',
|
||||
'Alamat',
|
||||
'Latitude',
|
||||
'Longitude',
|
||||
'Status Keluarga',
|
||||
'Jumlah Jiwa',
|
||||
'Daftar Anggota Keluarga (Nama - Hubungan - Pendidikan)',
|
||||
'Total Bantuan Diterima (Kali)',
|
||||
'Riwayat Bantuan (Detail)',
|
||||
'Laporan Darurat / Kondisi',
|
||||
'Tanggal Didata',
|
||||
'Terakhir Diubah'
|
||||
]);
|
||||
|
||||
$query = "
|
||||
SELECT
|
||||
k.id, k.nama_kepala_keluarga, k.alamat, k.latitude, k.longitude, k.status_keluarga, k.jumlah_kk, k.created_at, k.updated_at,
|
||||
(SELECT GROUP_CONCAT(CONCAT(nama, ' (', hubungan_keluarga, ' - ', pendidikan, ')') SEPARATOR ' | ') FROM anggota_keluarga WHERE kemiskinan_id = k.id) as rincian_anggota,
|
||||
(SELECT COUNT(id) FROM histori_bantuan WHERE kemiskinan_id = k.id AND status_penyaluran = 'tersalur') as total_bantuan,
|
||||
(SELECT GROUP_CONCAT(CONCAT(tanggal_bantuan, ': ', jenis_bantuan, ' - ', deskripsi_bantuan) SEPARATOR ' | ') FROM histori_bantuan WHERE kemiskinan_id = k.id AND status_penyaluran = 'tersalur') as riwayat_bantuan,
|
||||
(SELECT GROUP_CONCAT(CONCAT(DATE(created_at), ': ', kategori, ' - ', deskripsi) SEPARATOR ' | ') FROM laporan_kondisi WHERE kemiskinan_id = k.id) as laporan_darurat
|
||||
FROM kemiskinan k
|
||||
ORDER BY k.id DESC
|
||||
";
|
||||
|
||||
$result = mysqli_query($conn, $query);
|
||||
|
||||
if ($result) {
|
||||
while ($row = mysqli_fetch_assoc($result)) {
|
||||
|
||||
// Clean status label
|
||||
$status = ucfirst(str_replace('_', ' ', $row['status_keluarga']));
|
||||
if ($row['status_keluarga'] == 'sudah_mampu') $status = 'Sudah Mampu';
|
||||
|
||||
fputcsv($output, [
|
||||
$row['id'],
|
||||
$row['nama_kepala_keluarga'],
|
||||
$row['alamat'],
|
||||
$row['latitude'],
|
||||
$row['longitude'],
|
||||
$status,
|
||||
$row['jumlah_kk'],
|
||||
$row['rincian_anggota'] ? $row['rincian_anggota'] : 'Belum didata',
|
||||
$row['total_bantuan'] . ' kali',
|
||||
$row['riwayat_bantuan'] ? $row['riwayat_bantuan'] : 'Tidak ada catatan bantuan',
|
||||
$row['laporan_darurat'] ? $row['laporan_darurat'] : 'Tidak ada laporan',
|
||||
$row['created_at'],
|
||||
$row['updated_at']
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
fclose($output);
|
||||
exit();
|
||||
?>
|
||||
+206
@@ -0,0 +1,206 @@
|
||||
<?php
|
||||
$conn = mysqli_connect("127.0.0.1", "root", "", "webgis_kemiskinan");
|
||||
|
||||
if (!$conn) {
|
||||
die("Koneksi gagal: " . mysqli_connect_error());
|
||||
}
|
||||
|
||||
mysqli_set_charset($conn, "utf8mb4");
|
||||
|
||||
// Helper: tambah kolom hanya jika belum ada
|
||||
function addColumnIfNotExists($conn, $table, $column, $definition)
|
||||
{
|
||||
$db = mysqli_select_db($conn, 'webgis_kemiskinan') ? 'webgis_kemiskinan' : '';
|
||||
$check = mysqli_query(
|
||||
$conn,
|
||||
"SELECT COUNT(*) as cnt FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = '$table' AND COLUMN_NAME = '$column'"
|
||||
);
|
||||
if ($check) {
|
||||
$row = mysqli_fetch_assoc($check);
|
||||
if ((int) $row['cnt'] === 0) {
|
||||
mysqli_query($conn, "ALTER TABLE `$table` ADD COLUMN `$column` $definition");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$bootstrapQueries = [
|
||||
// ── Tabel: kemiskinan
|
||||
"CREATE TABLE IF NOT EXISTS kemiskinan (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_kepala_keluarga VARCHAR(255) NOT NULL,
|
||||
jumlah_kk INT NOT NULL,
|
||||
alamat TEXT NOT NULL,
|
||||
latitude DECIMAL(10,8) NOT NULL,
|
||||
longitude DECIMAL(11,8) NOT NULL,
|
||||
status_keluarga ENUM('aktif','meninggal','pindah','sudah_mampu') NOT NULL DEFAULT 'aktif',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci",
|
||||
|
||||
// ── Tabel: masjid (rumah ibadah)
|
||||
"CREATE TABLE IF NOT EXISTS masjid (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_masjid VARCHAR(255) NOT NULL,
|
||||
pic_masjid VARCHAR(255) NOT NULL,
|
||||
alamat TEXT NOT NULL,
|
||||
latitude DECIMAL(10,8) NOT NULL,
|
||||
longitude DECIMAL(11,8) NOT NULL,
|
||||
radius INT NOT NULL DEFAULT 500,
|
||||
jenis_ibadah ENUM('masjid','gereja','vihara','pura','klenteng','kapel','lainnya') NOT NULL DEFAULT 'masjid',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci",
|
||||
|
||||
// ── Tabel: pengguna (login multi-role)
|
||||
"CREATE TABLE IF NOT EXISTS pengguna (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(100) NOT NULL UNIQUE,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
nama_lengkap VARCHAR(255) NOT NULL,
|
||||
role ENUM('pengurus_masjid','pimpinan_daerah') NOT NULL DEFAULT 'pengurus_masjid',
|
||||
masjid_id INT NULL,
|
||||
aktif TINYINT(1) NOT NULL DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci",
|
||||
|
||||
// ── Tabel: anggota_keluarga (individu per KK)
|
||||
"CREATE TABLE IF NOT EXISTS anggota_keluarga (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
kemiskinan_id INT NOT NULL,
|
||||
nama VARCHAR(255) NOT NULL,
|
||||
tanggal_lahir DATE NULL,
|
||||
jenis_kelamin ENUM('laki_laki','perempuan') NOT NULL DEFAULT 'laki_laki',
|
||||
hubungan_keluarga ENUM('kepala_keluarga','istri','anak','orang_tua','saudara','lainnya') NOT NULL DEFAULT 'anak',
|
||||
status_hidup ENUM('hidup','meninggal','pindah','menikah_keluar') NOT NULL DEFAULT 'hidup',
|
||||
pendidikan ENUM('belum_sekolah','paud','sd','smp','sma','kuliah','pesantren','pelatihan','bekerja','tidak_sekolah') NOT NULL DEFAULT 'belum_sekolah',
|
||||
catatan_khusus TEXT NULL,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (kemiskinan_id) REFERENCES kemiskinan(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci",
|
||||
|
||||
// ── Tabel: histori_bantuan
|
||||
"CREATE TABLE IF NOT EXISTS histori_bantuan (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
kemiskinan_id INT NOT NULL,
|
||||
masjid_id INT NULL,
|
||||
jenis_bantuan ENUM('sembako','uang','pendidikan','kesehatan','pakaian','pelatihan','lainnya') NOT NULL DEFAULT 'lainnya',
|
||||
deskripsi_bantuan TEXT NOT NULL,
|
||||
jumlah_bantuan DECIMAL(10,2) NULL,
|
||||
satuan VARCHAR(50) NULL COMMENT 'e.g. karung, kg, Rp, bulan',
|
||||
tanggal_bantuan DATE NOT NULL,
|
||||
periode_berikutnya DATE NULL COMMENT 'Untuk bantuan berkala',
|
||||
status_penyaluran ENUM('tersalur','belum','batal') NOT NULL DEFAULT 'belum',
|
||||
dicatat_oleh VARCHAR(255) NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (kemiskinan_id) REFERENCES kemiskinan(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci",
|
||||
|
||||
// ── Tabel: laporan_kondisi (dari warga)
|
||||
"CREATE TABLE IF NOT EXISTS laporan_kondisi (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
kemiskinan_id INT NULL,
|
||||
nama_pelapor VARCHAR(255) NOT NULL,
|
||||
nomor_wa VARCHAR(20) NULL,
|
||||
kategori ENUM('sakit','kematian','kelahiran','pernikahan','pindah','darurat_ekonomi','lainnya') NOT NULL DEFAULT 'lainnya',
|
||||
deskripsi TEXT NOT NULL,
|
||||
status_laporan ENUM('menunggu','diproses','selesai','ditolak') NOT NULL DEFAULT 'menunggu',
|
||||
ditangani_oleh VARCHAR(255) NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci",
|
||||
|
||||
// ── Tabel: pesan_komunikasi
|
||||
"CREATE TABLE IF NOT EXISTS pesan_komunikasi (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
pengirim_id INT NOT NULL,
|
||||
penerima_id INT NULL COMMENT 'NULL = broadcast ke semua',
|
||||
judul VARCHAR(255) NOT NULL,
|
||||
isi TEXT NOT NULL,
|
||||
jenis ENUM('permintaan_bantuan','koordinasi','pengumuman') NOT NULL DEFAULT 'koordinasi',
|
||||
status ENUM('baru','dibaca','diarsip') NOT NULL DEFAULT 'baru',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci"
|
||||
];
|
||||
|
||||
foreach ($bootstrapQueries as $query) {
|
||||
mysqli_query($conn, $query);
|
||||
}
|
||||
|
||||
// ── Migrasi aman: tambah kolom baru ke tabel yang sudah ada
|
||||
addColumnIfNotExists(
|
||||
$conn,
|
||||
'kemiskinan',
|
||||
'status_keluarga',
|
||||
"ENUM('aktif','meninggal','pindah','sudah_mampu') NOT NULL DEFAULT 'aktif'"
|
||||
);
|
||||
addColumnIfNotExists(
|
||||
$conn,
|
||||
'kemiskinan',
|
||||
'updated_at',
|
||||
"TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
|
||||
);
|
||||
addColumnIfNotExists(
|
||||
$conn,
|
||||
'masjid',
|
||||
'jenis_ibadah',
|
||||
"ENUM('masjid','gereja','vihara','pura','klenteng','kapel','lainnya') NOT NULL DEFAULT 'masjid'"
|
||||
);
|
||||
|
||||
// ── Seed akun default jika tabel pengguna masih kosong
|
||||
$checkUser = mysqli_query($conn, "SELECT COUNT(*) as total FROM pengguna");
|
||||
if ($checkUser) {
|
||||
$row = mysqli_fetch_assoc($checkUser);
|
||||
if ((int) $row['total'] === 0) {
|
||||
$defaultUsers = [
|
||||
['pengurus1', password_hash('password', PASSWORD_DEFAULT), 'Pengurus Masjid Al-Ikhlas', 'pengurus_masjid'],
|
||||
['pimpinan1', password_hash('password', PASSWORD_DEFAULT), 'Kepala Dinas Sosial', 'pimpinan_daerah'],
|
||||
];
|
||||
$stmt = mysqli_prepare($conn, "INSERT INTO pengguna (username, password_hash, nama_lengkap, role) VALUES (?, ?, ?, ?)");
|
||||
if ($stmt) {
|
||||
foreach ($defaultUsers as $u) {
|
||||
mysqli_stmt_bind_param($stmt, 'ssss', $u[0], $u[1], $u[2], $u[3]);
|
||||
mysqli_stmt_execute($stmt);
|
||||
}
|
||||
mysqli_stmt_close($stmt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ── Helper: cek autentikasi (panggil di endpoint yang butuh login)
|
||||
function requireAuth($requiredRole = null)
|
||||
{
|
||||
if (session_status() === PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
if (empty($_SESSION['user_id'])) {
|
||||
http_response_code(401);
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(['error' => 'Tidak terautentikasi. Silakan login.']);
|
||||
exit;
|
||||
}
|
||||
if ($requiredRole && $_SESSION['user_role'] !== $requiredRole) {
|
||||
http_response_code(403);
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(['error' => 'Akses ditolak. Role tidak sesuai.']);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
function isLoggedIn()
|
||||
{
|
||||
if (session_status() === PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
return !empty($_SESSION['user_id']);
|
||||
}
|
||||
|
||||
function currentRole()
|
||||
{
|
||||
if (session_status() === PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
return $_SESSION['user_role'] ?? null;
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
// php/login.php
|
||||
require_once 'koneksi.php';
|
||||
if (session_status() === PHP_SESSION_NONE) { session_start(); }
|
||||
|
||||
header('Content-Type: application/json');
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||
http_response_code(405);
|
||||
echo json_encode(['error' => 'Method not allowed']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$username = trim($_POST['username'] ?? '');
|
||||
$password = trim($_POST['password'] ?? '');
|
||||
|
||||
if (!$username || !$password) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['error' => 'Username dan password wajib diisi.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$stmt = $conn->prepare("SELECT id, password_hash, nama_lengkap, role FROM pengguna WHERE username = ? AND aktif = 1 LIMIT 1");
|
||||
$stmt->bind_param('s', $username);
|
||||
$stmt->execute();
|
||||
$result = $stmt->get_result();
|
||||
$user = $result->fetch_assoc();
|
||||
$stmt->close();
|
||||
|
||||
if (!$user || !password_verify($password, $user['password_hash'])) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['error' => 'Username atau password salah.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$_SESSION['user_id'] = $user['id'];
|
||||
$_SESSION['user_nama'] = $user['nama_lengkap'];
|
||||
$_SESSION['user_role'] = $user['role'];
|
||||
|
||||
echo json_encode([
|
||||
'success' => true,
|
||||
'nama' => $user['nama_lengkap'],
|
||||
'role' => $user['role']
|
||||
]);
|
||||
?>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
// php/logout.php
|
||||
if (session_status() === PHP_SESSION_NONE) { session_start(); }
|
||||
session_destroy();
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(['success' => true]);
|
||||
?>
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
// php/read_anggota.php
|
||||
require_once 'koneksi.php';
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
$kemiskinanId = intval($_GET['kemiskinan_id'] ?? 0);
|
||||
if (!$kemiskinanId) {
|
||||
echo json_encode([]); exit;
|
||||
}
|
||||
|
||||
$stmt = $conn->prepare(
|
||||
"SELECT *,
|
||||
TIMESTAMPDIFF(YEAR, tanggal_lahir, CURDATE()) AS umur,
|
||||
DATE_FORMAT(updated_at, '%Y-%m-%d %H:%i') AS updated_at_fmt,
|
||||
DATE_FORMAT(tanggal_lahir, '%d/%m/%Y') AS tgl_lahir_fmt
|
||||
FROM anggota_keluarga
|
||||
WHERE kemiskinan_id = ?
|
||||
ORDER BY hubungan_keluarga, nama"
|
||||
);
|
||||
$stmt->bind_param('i', $kemiskinanId);
|
||||
$stmt->execute();
|
||||
$result = $stmt->get_result();
|
||||
$data = [];
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
$data[] = $row;
|
||||
}
|
||||
$stmt->close();
|
||||
echo json_encode($data);
|
||||
?>
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
// php/read_bantuan.php
|
||||
require_once 'koneksi.php';
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
$kemiskinanId = intval($_GET['kemiskinan_id'] ?? 0);
|
||||
if (!$kemiskinanId) { echo json_encode([]); exit; }
|
||||
|
||||
$esc = fn($v) => mysqli_real_escape_string($conn, (string)$v);
|
||||
|
||||
$sql = "SELECT hb.*, m.nama_masjid,
|
||||
DATE_FORMAT(hb.tanggal_bantuan, '%d/%m/%Y') AS tanggal_fmt,
|
||||
DATE_FORMAT(hb.periode_berikutnya, '%d/%m/%Y') AS periode_fmt,
|
||||
CASE WHEN hb.periode_berikutnya IS NOT NULL AND hb.periode_berikutnya <= CURDATE() AND hb.status_penyaluran = 'belum' THEN 1 ELSE 0 END AS jatuh_tempo
|
||||
FROM histori_bantuan hb
|
||||
LEFT JOIN masjid m ON hb.masjid_id = m.id
|
||||
WHERE hb.kemiskinan_id = {$kemiskinanId}
|
||||
ORDER BY hb.tanggal_bantuan DESC";
|
||||
|
||||
$result = mysqli_query($conn, $sql);
|
||||
$data = [];
|
||||
if ($result) {
|
||||
while ($row = mysqli_fetch_assoc($result)) {
|
||||
$data[] = $row;
|
||||
}
|
||||
}
|
||||
echo json_encode($data);
|
||||
?>
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
// php/read_kemiskinan.php
|
||||
include 'koneksi.php';
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
$query = "SELECT *, DATE_FORMAT(updated_at, '%Y-%m-%d %H:%i:%s') as updated_at_fmt FROM kemiskinan ORDER BY updated_at DESC, id DESC";
|
||||
$result = mysqli_query($conn, $query);
|
||||
$data = [];
|
||||
|
||||
if ($result) {
|
||||
while ($row = mysqli_fetch_assoc($result)) {
|
||||
$data[] = $row;
|
||||
}
|
||||
}
|
||||
|
||||
echo json_encode($data);
|
||||
?>
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
// php/read_laporan.php
|
||||
require_once 'koneksi.php';
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
$statusFilter = trim($_GET['status'] ?? '');
|
||||
$kemiskinanIdRaw = isset($_GET['kemiskinan_id']) ? intval($_GET['kemiskinan_id']) : 0;
|
||||
$validStatus = ['menunggu','diproses','selesai','ditolak'];
|
||||
|
||||
$conditions = [];
|
||||
|
||||
if ($kemiskinanIdRaw > 0) {
|
||||
$conditions[] = "lk.kemiskinan_id = {$kemiskinanIdRaw}";
|
||||
}
|
||||
if (in_array($statusFilter, $validStatus)) {
|
||||
$esc = mysqli_real_escape_string($conn, $statusFilter);
|
||||
$conditions[] = "lk.status_laporan = '{$esc}'";
|
||||
}
|
||||
|
||||
$where = count($conditions) ? 'WHERE ' . implode(' AND ', $conditions) : '';
|
||||
|
||||
$sql = "SELECT lk.*, k.nama_kepala_keluarga, k.alamat AS alamat_kk,
|
||||
DATE_FORMAT(lk.created_at, '%d/%m/%Y %H:%i') AS created_fmt
|
||||
FROM laporan_kondisi lk
|
||||
LEFT JOIN kemiskinan k ON lk.kemiskinan_id = k.id
|
||||
{$where}
|
||||
ORDER BY lk.created_at DESC
|
||||
LIMIT 200";
|
||||
|
||||
$result = mysqli_query($conn, $sql);
|
||||
$data = [];
|
||||
if ($result) {
|
||||
while ($row = mysqli_fetch_assoc($result)) { $data[] = $row; }
|
||||
}
|
||||
echo json_encode($data);
|
||||
?>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
include 'koneksi.php';
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
$query = "SELECT * FROM masjid ORDER BY id DESC";
|
||||
$result = mysqli_query($conn, $query);
|
||||
$data = [];
|
||||
|
||||
if ($result) {
|
||||
while ($row = mysqli_fetch_assoc($result)) {
|
||||
$data[] = $row;
|
||||
}
|
||||
}
|
||||
|
||||
echo json_encode($data);
|
||||
?>
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
// php/read_pesan.php
|
||||
require_once 'koneksi.php';
|
||||
if (session_status() === PHP_SESSION_NONE) { session_start(); }
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
$userId = intval($_SESSION['user_id'] ?? 0);
|
||||
if (!$userId) {
|
||||
echo json_encode([]); exit;
|
||||
}
|
||||
|
||||
// Ambil pesan broadcast + pesan yang ditujukan ke user ini
|
||||
$sql = "SELECT pm.*,
|
||||
p.nama_lengkap AS nama_pengirim, p.role AS role_pengirim,
|
||||
DATE_FORMAT(pm.created_at, '%d/%m/%Y %H:%i') AS created_fmt
|
||||
FROM pesan_komunikasi pm
|
||||
JOIN pengguna p ON pm.pengirim_id = p.id
|
||||
WHERE pm.penerima_id IS NULL OR pm.penerima_id = {$userId}
|
||||
ORDER BY pm.created_at DESC
|
||||
LIMIT 100";
|
||||
|
||||
$result = mysqli_query($conn, $sql);
|
||||
$data = [];
|
||||
if ($result) {
|
||||
while ($row = mysqli_fetch_assoc($result)) { $data[] = $row; }
|
||||
}
|
||||
|
||||
// Mark as read — semua pesan yang belum dibaca oleh user ini
|
||||
$markSql = "UPDATE pesan_komunikasi SET status='dibaca'
|
||||
WHERE status='baru' AND (penerima_id = {$userId} OR penerima_id IS NULL) AND pengirim_id != {$userId}";
|
||||
mysqli_query($conn, $markSql);
|
||||
|
||||
echo json_encode($data);
|
||||
?>
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
// php/send_pesan.php
|
||||
require_once 'koneksi.php';
|
||||
if (session_status() === PHP_SESSION_NONE) { session_start(); }
|
||||
header('Content-Type: text/plain');
|
||||
|
||||
$pengirimId = intval($_SESSION['user_id'] ?? 0);
|
||||
if (!$pengirimId) { http_response_code(401); echo 'Tidak terautentikasi.'; exit; }
|
||||
|
||||
$penerimaId = !empty($_POST['penerima_id']) ? intval($_POST['penerima_id']) : null;
|
||||
$judul = trim($_POST['judul'] ?? '');
|
||||
$isi = trim($_POST['isi'] ?? '');
|
||||
$jenis = trim($_POST['jenis'] ?? 'koordinasi');
|
||||
|
||||
if (!$judul || !$isi) { http_response_code(400); echo 'Judul dan isi wajib diisi.'; exit; }
|
||||
$validJenis = ['permintaan_bantuan','koordinasi','pengumuman'];
|
||||
if (!in_array($jenis, $validJenis)) $jenis = 'koordinasi';
|
||||
|
||||
$esc = fn($v) => mysqli_real_escape_string($conn, (string)$v);
|
||||
$penerima = $penerimaId ? intval($penerimaId) : 'NULL';
|
||||
|
||||
$sql = "INSERT INTO pesan_komunikasi (pengirim_id, penerima_id, judul, isi, jenis)
|
||||
VALUES ({$pengirimId}, {$penerima}, '{$esc($judul)}', '{$esc($isi)}', '{$esc($jenis)}')";
|
||||
|
||||
if (mysqli_query($conn, $sql)) { echo 'success'; }
|
||||
else { http_response_code(500); echo mysqli_error($conn); }
|
||||
?>
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
// php/update_anggota.php
|
||||
require_once 'koneksi.php';
|
||||
header('Content-Type: text/plain');
|
||||
|
||||
$id = intval($_POST['id'] ?? 0);
|
||||
$nama = trim($_POST['nama'] ?? '');
|
||||
$tanggalLahir = trim($_POST['tanggal_lahir'] ?? '');
|
||||
$jenisKelamin = trim($_POST['jenis_kelamin'] ?? 'laki_laki');
|
||||
$hubungan = trim($_POST['hubungan_keluarga'] ?? 'anak');
|
||||
$statusHidup = trim($_POST['status_hidup'] ?? 'hidup');
|
||||
$pendidikan = trim($_POST['pendidikan'] ?? 'belum_sekolah');
|
||||
$catatan = trim($_POST['catatan_khusus'] ?? '');
|
||||
|
||||
if (!$id || !$nama) {
|
||||
http_response_code(400); echo 'Data tidak lengkap.'; exit;
|
||||
}
|
||||
|
||||
$validJK = ['laki_laki','perempuan'];
|
||||
$validHub = ['kepala_keluarga','istri','anak','orang_tua','saudara','lainnya'];
|
||||
$validStatus = ['hidup','meninggal','pindah','menikah_keluar'];
|
||||
$validPendid = ['belum_sekolah','paud','sd','smp','sma','kuliah','pesantren','pelatihan','bekerja','tidak_sekolah'];
|
||||
|
||||
if (!in_array($jenisKelamin, $validJK)) $jenisKelamin = 'laki_laki';
|
||||
if (!in_array($hubungan, $validHub)) $hubungan = 'anak';
|
||||
if (!in_array($statusHidup, $validStatus)) $statusHidup = 'hidup';
|
||||
if (!in_array($pendidikan, $validPendid)) $pendidikan = 'belum_sekolah';
|
||||
|
||||
// Validasi tanggal — null jika kosong/tidak valid
|
||||
$tgl = (!empty($tanggalLahir) && strtotime($tanggalLahir)) ? $tanggalLahir : null;
|
||||
|
||||
// 8 kolom: nama(s) tgl(s) jk(s) hub(s) status(s) pendidikan(s) catatan(s) id(i)
|
||||
$stmt = $conn->prepare(
|
||||
"UPDATE anggota_keluarga
|
||||
SET nama=?, tanggal_lahir=?, jenis_kelamin=?, hubungan_keluarga=?,
|
||||
status_hidup=?, pendidikan=?, catatan_khusus=?
|
||||
WHERE id=?"
|
||||
);
|
||||
if (!$stmt) { http_response_code(500); echo 'Gagal prepare: ' . $conn->error; exit; }
|
||||
|
||||
$stmt->bind_param('sssssssi', $nama, $tgl, $jenisKelamin, $hubungan, $statusHidup, $pendidikan, $catatan, $id);
|
||||
|
||||
if ($stmt->execute()) {
|
||||
echo 'success';
|
||||
} else {
|
||||
http_response_code(500); echo 'Gagal: ' . $stmt->error;
|
||||
}
|
||||
$stmt->close();
|
||||
?>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
// php/update_bantuan_status.php
|
||||
require_once 'koneksi.php';
|
||||
header('Content-Type: text/plain');
|
||||
|
||||
$id = intval($_POST['id'] ?? 0);
|
||||
$status = trim($_POST['status_penyaluran'] ?? '');
|
||||
$valid = ['tersalur','belum','batal'];
|
||||
|
||||
if (!$id || !in_array($status, $valid)) {
|
||||
http_response_code(400); echo 'Data tidak valid.'; exit;
|
||||
}
|
||||
|
||||
$sql = "UPDATE histori_bantuan SET status_penyaluran='" . mysqli_real_escape_string($conn, $status) . "' WHERE id={$id}";
|
||||
if (mysqli_query($conn, $sql)) { echo 'success'; }
|
||||
else { http_response_code(500); echo 'Gagal: ' . mysqli_error($conn); }
|
||||
?>
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
// php/update_kemiskinan.php
|
||||
require_once 'koneksi.php';
|
||||
|
||||
header('Content-Type: text/plain');
|
||||
|
||||
$id = isset($_POST['id']) ? intval($_POST['id']) : 0;
|
||||
$nama = isset($_POST['nama_kepala_keluarga']) ? trim($_POST['nama_kepala_keluarga']) : '';
|
||||
$jml = isset($_POST['jumlah_kk']) ? intval($_POST['jumlah_kk']) : 0;
|
||||
$alamat = isset($_POST['alamat']) ? trim($_POST['alamat']) : '';
|
||||
$status = isset($_POST['status_keluarga']) ? trim($_POST['status_keluarga']) : 'aktif';
|
||||
|
||||
$validStatus = ['aktif', 'meninggal', 'pindah', 'sudah_mampu'];
|
||||
if (!in_array($status, $validStatus)) { $status = 'aktif'; }
|
||||
|
||||
if (!$id || !$nama || $jml < 1 || !$alamat) {
|
||||
http_response_code(400);
|
||||
echo 'Data tidak lengkap atau tidak valid.';
|
||||
exit;
|
||||
}
|
||||
|
||||
$stmt = $conn->prepare("UPDATE kemiskinan SET nama_kepala_keluarga=?, jumlah_kk=?, alamat=?, status_keluarga=? WHERE id=?");
|
||||
if (!$stmt) {
|
||||
http_response_code(500);
|
||||
echo 'Gagal menyiapkan query.';
|
||||
exit;
|
||||
}
|
||||
|
||||
$stmt->bind_param('sissi', $nama, $jml, $alamat, $status, $id);
|
||||
if ($stmt->execute()) {
|
||||
echo 'success';
|
||||
} else {
|
||||
http_response_code(500);
|
||||
echo 'Gagal memperbarui data: ' . $stmt->error;
|
||||
}
|
||||
$stmt->close();
|
||||
$conn->close();
|
||||
?>
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
// php/update_laporan_status.php
|
||||
require_once 'koneksi.php';
|
||||
header('Content-Type: text/plain');
|
||||
|
||||
$id = intval($_POST['id'] ?? 0);
|
||||
$status = trim($_POST['status_laporan'] ?? '');
|
||||
$ditanganiOleh = trim($_POST['ditangani_oleh'] ?? '');
|
||||
$valid = ['menunggu','diproses','selesai','ditolak'];
|
||||
|
||||
if (!$id || !in_array($status, $valid)) {
|
||||
http_response_code(400); echo 'Data tidak valid.'; exit;
|
||||
}
|
||||
|
||||
$esc = fn($v) => mysqli_real_escape_string($conn, (string)$v);
|
||||
$sql = "UPDATE laporan_kondisi SET status_laporan='{$esc($status)}', ditangani_oleh='{$esc($ditanganiOleh)}' WHERE id={$id}";
|
||||
|
||||
if (mysqli_query($conn, $sql)) { echo 'success'; }
|
||||
else { http_response_code(500); echo mysqli_error($conn); }
|
||||
?>
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
// php/update_masjid.php — perbarui rumah ibadah
|
||||
require_once 'koneksi.php';
|
||||
header('Content-Type: text/plain');
|
||||
|
||||
$id = isset($_POST['id']) ? intval($_POST['id']) : 0;
|
||||
$nama = isset($_POST['nama_masjid']) ? trim($_POST['nama_masjid']) : '';
|
||||
$pic = isset($_POST['pic_masjid']) ? trim($_POST['pic_masjid']) : '';
|
||||
$alamat = isset($_POST['alamat']) ? trim($_POST['alamat']) : '';
|
||||
$jenisIbadah = isset($_POST['jenis_ibadah'])? trim($_POST['jenis_ibadah']) : 'masjid';
|
||||
|
||||
$validJenis = ['masjid','gereja','vihara','pura','klenteng','kapel','lainnya'];
|
||||
if (!in_array($jenisIbadah, $validJenis)) { $jenisIbadah = 'lainnya'; }
|
||||
|
||||
if (!$id || !$nama || !$pic || !$alamat) {
|
||||
http_response_code(400);
|
||||
echo 'Data tidak lengkap.';
|
||||
exit;
|
||||
}
|
||||
|
||||
$stmt = $conn->prepare("UPDATE masjid SET nama_masjid=?, pic_masjid=?, alamat=?, jenis_ibadah=? WHERE id=?");
|
||||
if (!$stmt) {
|
||||
http_response_code(500);
|
||||
echo 'Gagal menyiapkan query.';
|
||||
exit;
|
||||
}
|
||||
|
||||
$stmt->bind_param('ssssi', $nama, $pic, $alamat, $jenisIbadah, $id);
|
||||
if ($stmt->execute()) {
|
||||
echo 'success';
|
||||
} else {
|
||||
http_response_code(500);
|
||||
echo 'Gagal memperbarui data: ' . $stmt->error;
|
||||
}
|
||||
$stmt->close();
|
||||
?>
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
include 'koneksi.php';
|
||||
|
||||
$idRaw = $_POST['id'] ?? null;
|
||||
$radiusRaw = $_POST['radius'] ?? null;
|
||||
$id = filter_var($idRaw, FILTER_VALIDATE_INT);
|
||||
$radius = is_numeric($radiusRaw) ? (float) $radiusRaw : null;
|
||||
|
||||
if ($id === false || $id === null || $id <= 0 || $radius === null || $radius < 100 || $radius > 5000) {
|
||||
http_response_code(400);
|
||||
exit('error');
|
||||
}
|
||||
|
||||
$statement = mysqli_prepare($conn, "UPDATE masjid SET radius = ? WHERE id = ?");
|
||||
mysqli_stmt_bind_param($statement, "di", $radius, $id);
|
||||
|
||||
try {
|
||||
if (mysqli_stmt_execute($statement)) {
|
||||
echo 'success';
|
||||
} else {
|
||||
http_response_code(500);
|
||||
echo 'error';
|
||||
}
|
||||
} catch (mysqli_sql_exception $exception) {
|
||||
http_response_code(500);
|
||||
echo 'error: ' . $exception->getMessage();
|
||||
}
|
||||
|
||||
mysqli_stmt_close($statement);
|
||||
?>
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
include 'koneksi.php';
|
||||
include 'check_auth.php';
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$id = isset($_POST['id']) ? intval($_POST['id']) : 0;
|
||||
$status = isset($_POST['status']) ? $_POST['status'] : 'dibaca';
|
||||
|
||||
if ($id <= 0) {
|
||||
http_response_code(400);
|
||||
die("Invalid ID");
|
||||
}
|
||||
|
||||
$stmt = $conn->prepare("UPDATE pesan_komunikasi SET status = ? WHERE id = ?");
|
||||
$stmt->bind_param("si", $status, $id);
|
||||
|
||||
if ($stmt->execute()) {
|
||||
echo "Success";
|
||||
} else {
|
||||
http_response_code(500);
|
||||
echo "Error: " . $conn->error;
|
||||
}
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user