updatee
This commit is contained in:
@@ -1,28 +0,0 @@
|
||||
<?php
|
||||
include "db_config.php";
|
||||
|
||||
|
||||
$columns = [
|
||||
"ALTER TABLE kemiskinan ADD COLUMN tanggal_lahir DATE NULL AFTER nama_kk",
|
||||
"ALTER TABLE kemiskinan ADD COLUMN pendidikan VARCHAR(100) NULL AFTER tanggal_lahir",
|
||||
"ALTER TABLE kemiskinan ADD COLUMN riwayat_penyakit TEXT NULL AFTER pendidikan",
|
||||
];
|
||||
|
||||
foreach ($columns as $sql) {
|
||||
$result = $conn->query($sql);
|
||||
preg_match('/ADD COLUMN (\w+)/', $sql, $m);
|
||||
$colName = $m[1] ?? $sql;
|
||||
if ($result) {
|
||||
echo "Kolom $colName: OK\n";
|
||||
} else {
|
||||
|
||||
if ($conn->errno == 1060) {
|
||||
echo "Kolom $colName: Sudah ada (skip)\n";
|
||||
} else {
|
||||
echo "Kolom $colName: GAGAL - " . $conn->error . "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
echo "\nDatabase sudah siap!\n";
|
||||
?>
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
ini_set('display_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
|
||||
require_once 'db_config.php';
|
||||
|
||||
$res = $conn->query("SHOW TABLES");
|
||||
if($res) {
|
||||
while($row = $res->fetch_array()) {
|
||||
echo $row[0] . "<br>";
|
||||
}
|
||||
} else {
|
||||
echo "Error showing tables: " . $conn->error;
|
||||
}
|
||||
|
||||
echo "<hr>";
|
||||
|
||||
$sql = "INSERT INTO spbu (nama,no,status,lat,lng) VALUES ('Test','123','Ya','0','0')";
|
||||
if($conn->query($sql)){
|
||||
echo "Insert SPBU success: ID " . $conn->insert_id;
|
||||
}else{
|
||||
echo "Insert SPBU error: " . $conn->error;
|
||||
}
|
||||
?>
|
||||
@@ -1,15 +0,0 @@
|
||||
<?php
|
||||
ini_set('display_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
|
||||
header('Content-Type: application/json');
|
||||
|
||||
$raw = file_get_contents("php://input");
|
||||
echo json_encode([
|
||||
"raw_input" => $raw,
|
||||
"json_decoded" => json_decode($raw, true),
|
||||
"json_error" => json_last_error_msg(),
|
||||
"request_method" => $_SERVER['REQUEST_METHOD'],
|
||||
"content_type" => $_SERVER['CONTENT_TYPE'] ?? 'not set',
|
||||
]);
|
||||
?>
|
||||
@@ -1,46 +0,0 @@
|
||||
<?php
|
||||
require_once 'db_config.php';
|
||||
|
||||
$sqls = [
|
||||
"CREATE TABLE IF NOT EXISTS spbu (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama VARCHAR(200) NOT NULL,
|
||||
no VARCHAR(60) NOT NULL,
|
||||
status ENUM('Ya','Tidak') NOT NULL DEFAULT 'Tidak',
|
||||
lat DECIMAL(10,7) NOT NULL,
|
||||
lng DECIMAL(10,7) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
|
||||
"CREATE TABLE IF NOT EXISTS jalan (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama VARCHAR(200) NOT NULL,
|
||||
status ENUM('Nasional','Provinsi','Kabupaten') NOT NULL DEFAULT 'Kabupaten',
|
||||
panjang DECIMAL(12,2) NOT NULL DEFAULT 0,
|
||||
koordinat LONGTEXT NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
|
||||
"CREATE TABLE IF NOT EXISTS parsil (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama VARCHAR(200) NOT NULL,
|
||||
pemilik VARCHAR(200) NOT NULL,
|
||||
status ENUM('SHM','HGB','Sewa','Lainnya') NOT NULL DEFAULT 'SHM',
|
||||
luas DECIMAL(14,2) NOT NULL DEFAULT 0,
|
||||
koordinat LONGTEXT NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"
|
||||
];
|
||||
|
||||
foreach($sqls as $sql) {
|
||||
if ($conn->query($sql) === TRUE) {
|
||||
echo "Tabel berhasil dibuat/diperbarui.<br>";
|
||||
} else {
|
||||
echo "Error: " . $conn->error . "<br>";
|
||||
}
|
||||
}
|
||||
echo "Selesai!";
|
||||
?>
|
||||
@@ -1,19 +0,0 @@
|
||||
<?php
|
||||
include "db_config.php";
|
||||
|
||||
// Cek data user walikota
|
||||
$r = $conn->query("SELECT username, nama_lengkap, role FROM users WHERE username='walikota'");
|
||||
$row = $r->fetch_assoc();
|
||||
echo "Data di DB:\n";
|
||||
print_r($row);
|
||||
|
||||
// Fix: update role ke walikota jika salah
|
||||
$fix = $conn->query("UPDATE users SET role='walikota' WHERE username='walikota'");
|
||||
echo "\nUpdate role: " . ($fix ? "OK (affected: ".$conn->affected_rows.")" : "GAGAL - ".$conn->error) . "\n";
|
||||
|
||||
// Cek lagi setelah fix
|
||||
$r2 = $conn->query("SELECT username, nama_lengkap, role FROM users WHERE username='walikota'");
|
||||
$row2 = $r2->fetch_assoc();
|
||||
echo "\nData setelah fix:\n";
|
||||
print_r($row2);
|
||||
?>
|
||||
@@ -1,49 +0,0 @@
|
||||
CREATE DATABASE IF NOT EXISTS kemiskinan_ibadah
|
||||
CHARACTER SET utf8mb4
|
||||
COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
USE kemiskinan_ibadah;
|
||||
|
||||
DROP TABLE IF EXISTS rumah_ibadah;
|
||||
DROP TABLE IF EXISTS kemiskinan;
|
||||
|
||||
CREATE TABLE kemiskinan (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_kk VARCHAR(200) NOT NULL,
|
||||
jumlah_kk INT NOT NULL DEFAULT 1,
|
||||
alamat TEXT NOT NULL,
|
||||
lat DECIMAL(10,7) NOT NULL,
|
||||
lng DECIMAL(10,7) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE rumah_ibadah (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_rumah_ibadah VARCHAR(200) NOT NULL,
|
||||
penanggung_jawab VARCHAR(200) NOT NULL,
|
||||
alamat TEXT NOT NULL,
|
||||
radius INT NOT NULL DEFAULT 500,
|
||||
lat DECIMAL(10,7) NOT NULL,
|
||||
lng DECIMAL(10,7) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
INSERT INTO kemiskinan (nama_kk, jumlah_kk, alamat, lat, lng) VALUES
|
||||
('Siti Aminah', 4, 'Jl. Tanjung Raya II, Pontianak Timur', -0.0268500, 109.3611200),
|
||||
('Budi Santoso', 5, 'Jl. Panglima Aim, Pontianak Timur', -0.0314200, 109.3553800),
|
||||
('Rohani', 3, 'Gg. Karya Bakti, Pontianak Kota', -0.0226400, 109.3337600),
|
||||
('M. Yusuf', 6, 'Jl. Kom Yos Sudarso, Pontianak Barat', -0.0149800, 109.3079200),
|
||||
('Nurhayati', 2, 'Jl. Imam Bonjol, Pontianak Selatan', -0.0412200, 109.3420600),
|
||||
('Hendra Saputra', 4, 'Jl. Parit H. Husin II, Pontianak Tenggara', -0.0556100, 109.3659200),
|
||||
('Ramlah', 5, 'Jl. Gusti Situt Mahmud, Pontianak Utara', 0.0021400, 109.3288800),
|
||||
('Agus Salim', 3, 'Jl. Sungai Raya Dalam, Pontianak Tenggara', -0.0614600, 109.3785400);
|
||||
|
||||
INSERT INTO rumah_ibadah (nama_rumah_ibadah, penanggung_jawab, alamat, radius, lat, lng) VALUES
|
||||
('Masjid Raya Mujahidin', 'H. Ahmad Fauzi', 'Jl. Jenderal Ahmad Yani, Pontianak', 800, -0.0446400, 109.3369800),
|
||||
('Gereja Katedral Santo Yosef', 'Pastor Markus', 'Jl. Pattimura, Pontianak Kota', 650, -0.0241300, 109.3374500),
|
||||
('Vihara Bodhisatva Karaniya Metta', 'Lina Wijaya', 'Jl. Sultan Muhammad, Pontianak Kota', 500, -0.0212600, 109.3413400),
|
||||
('Masjid Jami Sultan Syarif Abdurrahman', 'H. Sulaiman', 'Kampung Beting, Pontianak Timur', 700, -0.0264100, 109.3567600),
|
||||
('Gereja HKBP Pontianak', 'St. Daniel Simanjuntak', 'Jl. Gajah Mada, Pontianak Selatan', 550, -0.0356200, 109.3459600),
|
||||
('Pura Giripati Mulawarman', 'I Wayan Sudana', 'Jl. Adi Sucipto, Pontianak Tenggara', 500, -0.0643600, 109.3774200);
|
||||
@@ -1,50 +0,0 @@
|
||||
<?php
|
||||
// Script ini hanya dijalankan SEKALI untuk membuat tabel users dan akun admin default.
|
||||
// Hapus file ini setelah selesai dijalankan.
|
||||
|
||||
require_once 'db_config.php';
|
||||
|
||||
// 1. Buat tabel users
|
||||
$sql_table = "CREATE TABLE IF NOT EXISTS users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(100) NOT NULL UNIQUE,
|
||||
password VARCHAR(255) NOT NULL,
|
||||
nama_lengkap VARCHAR(200) NOT NULL,
|
||||
role ENUM('admin','operator') NOT NULL DEFAULT 'operator',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4";
|
||||
|
||||
if ($conn->query($sql_table)) {
|
||||
echo "<p style='color:green'>✓ Tabel <strong>users</strong> berhasil dibuat.</p>";
|
||||
} else {
|
||||
echo "<p style='color:red'>✗ Gagal membuat tabel users: " . $conn->error . "</p>";
|
||||
}
|
||||
|
||||
// 2. Insert akun admin default (password: admin123)
|
||||
$password_hash = password_hash('admin123', PASSWORD_BCRYPT);
|
||||
|
||||
$stmt = $conn->prepare("INSERT IGNORE INTO users (username, password, nama_lengkap, role) VALUES (?, ?, ?, 'admin')");
|
||||
$username = 'admin';
|
||||
$nama = 'Administrator';
|
||||
$stmt->bind_param('sss', $username, $password_hash, $nama);
|
||||
|
||||
if ($stmt->execute()) {
|
||||
if ($stmt->affected_rows > 0) {
|
||||
echo "<p style='color:green'>✓ Akun admin berhasil dibuat.</p>";
|
||||
} else {
|
||||
echo "<p style='color:orange'>⚠ Akun admin sudah ada (tidak diubah).</p>";
|
||||
}
|
||||
} else {
|
||||
echo "<p style='color:red'>✗ Gagal membuat akun admin: " . $stmt->error . "</p>";
|
||||
}
|
||||
|
||||
$stmt->close();
|
||||
$conn->close();
|
||||
|
||||
echo "<hr>";
|
||||
echo "<p><strong>Kredensial Login:</strong></p>";
|
||||
echo "<p>Username: <code>admin</code></p>";
|
||||
echo "<p>Password: <code>admin123</code></p>";
|
||||
echo "<hr>";
|
||||
echo "<p style='color:red'><strong>PENTING:</strong> Hapus file ini setelah setup selesai!</p>";
|
||||
?>
|
||||
@@ -1,14 +0,0 @@
|
||||
USE kemiskinan_ibadah;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(100) NOT NULL UNIQUE,
|
||||
password VARCHAR(255) NOT NULL,
|
||||
nama_lengkap VARCHAR(200) NOT NULL,
|
||||
role ENUM('admin','operator') NOT NULL DEFAULT 'operator',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- Password default: admin123 (bcrypt hashed)
|
||||
INSERT IGNORE INTO users (username, password, nama_lengkap, role) VALUES
|
||||
('admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'Administrator', 'admin');
|
||||
@@ -1,27 +0,0 @@
|
||||
<?php
|
||||
require_once 'db_config.php';
|
||||
|
||||
$sql = "
|
||||
CREATE TABLE IF NOT EXISTS warga (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
kemiskinan_id INT NOT NULL,
|
||||
nik VARCHAR(50) DEFAULT NULL,
|
||||
nama_warga VARCHAR(200) NOT NULL,
|
||||
hubungan_keluarga VARCHAR(100) DEFAULT NULL,
|
||||
tanggal_lahir DATE DEFAULT NULL,
|
||||
pendidikan VARCHAR(100) DEFAULT NULL,
|
||||
riwayat_penyakit TEXT DEFAULT 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;
|
||||
";
|
||||
|
||||
if ($conn->query($sql) === TRUE) {
|
||||
echo "Table 'warga' created successfully\n";
|
||||
} else {
|
||||
echo "Error creating table: " . $conn->error . "\n";
|
||||
}
|
||||
|
||||
$conn->close();
|
||||
?>
|
||||
@@ -1,60 +0,0 @@
|
||||
CREATE DATABASE IF NOT EXISTS webgis
|
||||
CHARACTER SET utf8mb4
|
||||
COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
USE webgis;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS spbu (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama VARCHAR(200) NOT NULL,
|
||||
no VARCHAR(60) NOT NULL,
|
||||
status ENUM('Ya','Tidak') NOT NULL DEFAULT 'Tidak',
|
||||
lat DECIMAL(10,7) NOT NULL,
|
||||
lng DECIMAL(10,7) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS jalan (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama VARCHAR(200) NOT NULL,
|
||||
status ENUM('Nasional','Provinsi','Kabupaten') NOT NULL DEFAULT 'Kabupaten',
|
||||
panjang DECIMAL(12,2) NOT NULL DEFAULT 0,
|
||||
koordinat LONGTEXT NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS parsil (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama VARCHAR(200) NOT NULL,
|
||||
pemilik VARCHAR(200) NOT NULL,
|
||||
status ENUM('SHM','HGB','Sewa','Lainnya') NOT NULL DEFAULT 'SHM',
|
||||
luas DECIMAL(14,2) NOT NULL DEFAULT 0,
|
||||
koordinat LONGTEXT NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS kemiskinan (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_kk VARCHAR(200) NOT NULL,
|
||||
jumlah_kk INT NOT NULL DEFAULT 1,
|
||||
alamat TEXT NOT NULL,
|
||||
lat DECIMAL(10,7) NOT NULL,
|
||||
lng DECIMAL(10,7) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS masjid (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_masjid VARCHAR(200) NOT NULL,
|
||||
pic_masjid VARCHAR(200) NOT NULL,
|
||||
alamat_masjid TEXT NOT NULL,
|
||||
radius INT NOT NULL DEFAULT 500,
|
||||
lat DECIMAL(10,7) NOT NULL,
|
||||
lng DECIMAL(10,7) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
@@ -1,5 +0,0 @@
|
||||
<?php
|
||||
require 'db_config.php';
|
||||
$res = $conn->query('DESCRIBE jalan');
|
||||
while($row = $res->fetch_assoc()) echo json_encode($row)."\n";
|
||||
?>
|
||||
@@ -1,11 +0,0 @@
|
||||
<?php
|
||||
require 'db_config.php';
|
||||
$stmt = $conn->prepare("INSERT INTO jalan (nama, status, panjang, koordinat) VALUES (?, ?, ?, ?)");
|
||||
$nama = 'Test';
|
||||
$status = 'Jalan Kabupaten';
|
||||
$panjang = 10;
|
||||
$koordinat = '[]';
|
||||
$stmt->bind_param("ssds", $nama, $status, $panjang, $koordinat);
|
||||
$stmt->execute();
|
||||
echo $stmt->error;
|
||||
?>
|
||||
@@ -1,38 +0,0 @@
|
||||
USE kemiskinan_ibadah;
|
||||
|
||||
-- 1. Update USERS table role ENUM
|
||||
ALTER TABLE users MODIFY COLUMN role ENUM('admin', 'operator', 'walikota') NOT NULL DEFAULT 'operator';
|
||||
|
||||
-- 2. Add walikota user (password: walikota123, hash generated previously or will generate)
|
||||
-- Let's use the hash for 'walikota123': $2y$10$w6QO8q/s28pX83JgY3WvM.Hw2N2G1aN9M0iR8L7Pq4z8i5u0N72E. (Wait, let's just create a PHP script to insert to avoid hash issues)
|
||||
|
||||
-- 3. Modify KEMISKINAN table
|
||||
ALTER TABLE kemiskinan
|
||||
ADD COLUMN tanggal_lahir DATE NULL AFTER nama_kk,
|
||||
ADD COLUMN pendidikan VARCHAR(100) NULL AFTER tanggal_lahir,
|
||||
ADD COLUMN riwayat_penyakit TEXT NULL AFTER pendidikan;
|
||||
|
||||
-- 4. Create LAPORAN_MASYARAKAT table
|
||||
CREATE TABLE IF NOT EXISTS laporan_masyarakat (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_pelapor VARCHAR(150) NOT NULL,
|
||||
kontak VARCHAR(50) NULL,
|
||||
deskripsi_laporan TEXT NOT NULL,
|
||||
lat DECIMAL(10,7) NOT NULL,
|
||||
lng DECIMAL(10,7) NOT NULL,
|
||||
foto VARCHAR(255) NULL,
|
||||
status ENUM('menunggu', 'diproses', 'selesai') NOT NULL DEFAULT 'menunggu',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- 5. Create HISTORI_BANTUAN table
|
||||
CREATE TABLE IF NOT EXISTS histori_bantuan (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
kemiskinan_id INT NOT NULL,
|
||||
jenis_bantuan VARCHAR(150) NOT NULL,
|
||||
tanggal DATE NOT NULL,
|
||||
keterangan TEXT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (kemiskinan_id) REFERENCES kemiskinan(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
@@ -10,7 +10,6 @@ $jumlah_kk = isset($data['jumlah_kk']) ? intval($data['jumlah_kk']) :
|
||||
$alamat = $conn->real_escape_string($data['alamat'] ?? '');
|
||||
$lat = isset($data['lat']) ? floatval($data['lat']) : 0;
|
||||
$lng = isset($data['lng']) ? floatval($data['lng']) : 0;
|
||||
// Kolom baru
|
||||
$tanggal_lahir = $conn->real_escape_string($data['tanggal_lahir'] ?? '');
|
||||
$pendidikan = $conn->real_escape_string($data['pendidikan'] ?? '');
|
||||
$riwayat_penyakit = $conn->real_escape_string($data['riwayat_penyakit'] ?? '');
|
||||
@@ -22,6 +21,7 @@ if ($id <= 0 || $nama_kk === '') {
|
||||
|
||||
$tgl_val = !empty($tanggal_lahir) ? "'$tanggal_lahir'" : "NULL";
|
||||
|
||||
// 1. Update tabel kemiskinan
|
||||
$sql = "UPDATE kemiskinan SET
|
||||
nama_kk='$nama_kk',
|
||||
jumlah_kk=$jumlah_kk,
|
||||
@@ -34,8 +34,18 @@ $sql = "UPDATE kemiskinan SET
|
||||
WHERE id=$id";
|
||||
|
||||
if ($conn->query($sql)) {
|
||||
// 2. Sync data ke tabel warga (baris Kepala Keluarga)
|
||||
$sql_warga = "UPDATE warga SET
|
||||
nama_warga='$nama_kk',
|
||||
tanggal_lahir=$tgl_val,
|
||||
pendidikan='$pendidikan',
|
||||
riwayat_penyakit='$riwayat_penyakit'
|
||||
WHERE kemiskinan_id=$id AND hubungan_keluarga='Kepala Keluarga'";
|
||||
$conn->query($sql_warga);
|
||||
|
||||
echo json_encode(["status" => "success"]);
|
||||
} else {
|
||||
echo json_encode(["status" => "error", "message" => $conn->error]);
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
+132
-62
@@ -4098,9 +4098,9 @@
|
||||
map.fitBounds(bounds, { padding: [24, 24], maxZoom: 13 });
|
||||
}
|
||||
|
||||
console.log('Layer kecamatan berhasil dimuat:', kecLayer.getLayers().length, 'fitur');
|
||||
// log removed
|
||||
})
|
||||
.catch(err => console.log('Admin Kecamatan Error:', err));
|
||||
.catch(err => {});
|
||||
}
|
||||
|
||||
/* ── MODE ── */
|
||||
@@ -4402,19 +4402,19 @@
|
||||
|
||||
map.closePopup();
|
||||
setMode(null);
|
||||
ensureLayerVisible('jalan', jalan.id);
|
||||
focusFeature('jalan', jalan.id);
|
||||
ensureLayerVisible('jalan', d.id);
|
||||
focusFeature('jalan', d.id);
|
||||
|
||||
} else {
|
||||
|
||||
console.log(response);
|
||||
// log removed
|
||||
alert("Gagal simpan jalan");
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
.catch(err => {
|
||||
console.log(err);
|
||||
// log removed
|
||||
alert("Error simpan jalan");
|
||||
});
|
||||
|
||||
@@ -4423,7 +4423,7 @@
|
||||
|
||||
const pts = normalizeLinePoints(d.pts);
|
||||
if (pts.length < 2) {
|
||||
console.log('Format koordinat jalan tidak valid:', d.pts);
|
||||
// log removed
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -4663,19 +4663,19 @@
|
||||
}
|
||||
|
||||
else {
|
||||
console.log(response);
|
||||
// log removed
|
||||
alert("Gagal simpan parsil");
|
||||
}
|
||||
|
||||
})
|
||||
.catch(err => console.log("Parsil Error:", err));
|
||||
.catch(err => {});
|
||||
}
|
||||
|
||||
function renderParsil(d) {
|
||||
|
||||
const pts = normalizePolyPoints(d.pts);
|
||||
if (pts.length < 3) {
|
||||
console.log('Format koordinat parsil tidak valid:', d.pts);
|
||||
// log removed
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -4904,7 +4904,7 @@
|
||||
state.featureRefs[type] = {};
|
||||
if (type === 'kemiskinan') state.kkLayerRefs = {};
|
||||
const list = document.getElementById('list-' + type);
|
||||
list.querySelectorAll('.dcard').forEach(x => x.remove());
|
||||
if (list) list.querySelectorAll('.dcard').forEach(x => x.remove());
|
||||
|
||||
state[type].forEach(d => {
|
||||
if (type === 'spbu') {
|
||||
@@ -5320,7 +5320,7 @@
|
||||
});
|
||||
|
||||
})
|
||||
.catch(err => console.log("SPBU Error:", err));
|
||||
.catch(err => {});
|
||||
|
||||
}
|
||||
|
||||
@@ -5358,7 +5358,7 @@
|
||||
});
|
||||
|
||||
})
|
||||
.catch(err => console.log("Jalan Error:", err));
|
||||
.catch(err => {});
|
||||
|
||||
}
|
||||
|
||||
@@ -5397,7 +5397,7 @@
|
||||
});
|
||||
|
||||
})
|
||||
.catch(err => console.log("Parsil Error:", err));
|
||||
.catch(err => {});
|
||||
}
|
||||
|
||||
/* ── KEMISKINAN ── */
|
||||
@@ -5522,6 +5522,22 @@
|
||||
<label>Jumlah Jiwa <span class="req">*</span></label>
|
||||
<input type="number" id="k-jumlah" value="${escapeAttr(draft.jumlah_kk || '1')}" min="1" oninput="window._kkVulnUpdate()">
|
||||
</div>
|
||||
<div class="km-field">
|
||||
<label>Tanggal Lahir</label>
|
||||
<input type="date" id="k-tgl-lahir">
|
||||
</div>
|
||||
<div class="km-field">
|
||||
<label>Pendidikan Terakhir</label>
|
||||
<select id="k-pendidikan">
|
||||
<option value="">-- Pilih Pendidikan --</option>
|
||||
<option value="Tidak Sekolah">Tidak Sekolah</option>
|
||||
<option value="SD/Sederajat">SD/Sederajat</option>
|
||||
<option value="SMP/Sederajat">SMP/Sederajat</option>
|
||||
<option value="SMA/Sederajat">SMA/Sederajat</option>
|
||||
<option value="D3/S1">D3/S1</option>
|
||||
<option value="S2/S3">S2/S3</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="km-field">
|
||||
<label>Alamat <span class="req">*</span></label>
|
||||
<input id="k-alamat" placeholder="Alamat" value="${escapeAttr(draft.alamat)}">
|
||||
@@ -5654,13 +5670,13 @@
|
||||
renderDashboard();
|
||||
if (window._tmpM) { map.closePopup(); map.removeLayer(window._tmpM); window._tmpM = null; }
|
||||
setMode(null);
|
||||
ensureLayerVisible('jalan', jalan.id);
|
||||
focusFeature('jalan', jalan.id);
|
||||
ensureLayerVisible('kemiskinan', d.id);
|
||||
focusFeature('kemiskinan', d.id);
|
||||
} else {
|
||||
alert("Gagal simpan: " + (response.message || 'Error'));
|
||||
}
|
||||
})
|
||||
.catch(err => { console.log(err); alert("Terjadi error"); });
|
||||
.catch(err => { alert("Terjadi error"); });
|
||||
}
|
||||
|
||||
function renderKemiskinan(d) {
|
||||
@@ -5762,64 +5778,114 @@
|
||||
});
|
||||
renderDashboard();
|
||||
if (state.masjid.length) refreshType('masjid');
|
||||
}).catch(err => console.log("Kemiskinan Error:", err));
|
||||
}).catch(err => {});
|
||||
}
|
||||
|
||||
function openEditKemiskinan(id) {
|
||||
const d = getById('kemiskinan', id);
|
||||
if (!d) return;
|
||||
const existing = document.getElementById('ek-overlay');
|
||||
if (existing) existing.remove();
|
||||
|
||||
const pendOpts = ['', 'Tidak Sekolah', 'SD/Sederajat', 'SMP/Sederajat', 'SMA/Sederajat', 'D3/S1', 'S2/S3'];
|
||||
const pendSelects = pendOpts.map(v => `<option value="${v}" ${d.pendidikan === v ? 'selected' : ''}>${v || '-- Pilih Pendidikan --'}</option>`).join('');
|
||||
const html = `<div class="pf" style="width:300px">
|
||||
<h4><i class="fas fa-edit" style="color:var(--amber)"></i> Edit KK Miskin</h4>
|
||||
<label>Nama Kepala Keluarga</label>
|
||||
<input id="e-k-nama" value="${(d.nama_kk || '').replace(/"/g, '"')}">
|
||||
<label>Jumlah Jiwa</label>
|
||||
<input type="number" id="e-k-jumlah" value="${d.jumlah_kk}" min="1">
|
||||
<label>Tanggal Lahir</label>
|
||||
<input type="date" id="e-k-tgl-lahir" value="${d.tanggal_lahir || ''}">
|
||||
<label>Pendidikan Terakhir</label>
|
||||
<select id="e-k-pendidikan">${pendSelects}</select>
|
||||
<label>Alamat</label>
|
||||
<textarea id="e-k-alamat">${(d.alamat || '').replace(/</g, '<')}</textarea>
|
||||
<label>Riwayat Penyakit</label>
|
||||
<textarea id="e-k-riwayat" rows="2">${(d.riwayat_penyakit || '').replace(/</g, '<')}</textarea>
|
||||
<label>Latitude</label>
|
||||
<input id="e-k-lat" value="${Number(d.lat).toFixed(6)}">
|
||||
<label>Longitude</label>
|
||||
<input id="e-k-lng" value="${Number(d.lng).toFixed(6)}">
|
||||
<label>Status Penanganan</label>
|
||||
<select id="e-k-status">
|
||||
<option ${getKKStatus(id) === 'Belum Ditangani' ? 'selected' : ''}>Belum Ditangani</option>
|
||||
<option ${getKKStatus(id) === 'Diproses' ? 'selected' : ''}>Diproses</option>
|
||||
<option ${getKKStatus(id) === 'Sudah Ditangani' ? 'selected' : ''}>Sudah Ditangani</option>
|
||||
</select>
|
||||
<button class="pbtn pbtn-y" onclick="saveEditKemiskinan(${id})">Simpan Perubahan</button>
|
||||
</div>`;
|
||||
map.closePopup();
|
||||
L.popup({ maxWidth: 330, autoPanPaddingTopLeft: [0, 80], autoPanPaddingBottomRight: [0, 20] }).setLatLng([d.lat, d.lng]).setContent(html).openOn(map);
|
||||
const curStatus = getKKStatus(id);
|
||||
|
||||
const overlay = document.createElement('div');
|
||||
overlay.className = 'hb-overlay';
|
||||
overlay.id = 'ek-overlay';
|
||||
overlay.innerHTML = `
|
||||
<div class="hb-box" style="max-width:520px">
|
||||
<div class="hb-head" style="background:linear-gradient(135deg,#f59e0b,#d97706)">
|
||||
<div class="hb-head-icon"><i class="fas fa-user-edit"></i></div>
|
||||
<div style="flex:1;min-width:0">
|
||||
<div class="hb-head-title">Edit Data KK Miskin</div>
|
||||
<div style="font-size:11px;opacity:.8;margin-top:1px">${escapeText(d.nama_kk)}</div>
|
||||
</div>
|
||||
<button class="hb-head-close" onclick="document.getElementById('ek-overlay').remove()">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="hb-body">
|
||||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:12px">
|
||||
<div class="km-field" style="grid-column:1/-1">
|
||||
<label>Nama Kepala Keluarga *</label>
|
||||
<input id="ek-nama" value="${(d.nama_kk || '').replace(/"/g, '"')}" placeholder="Nama lengkap">
|
||||
</div>
|
||||
<div class="km-field">
|
||||
<label>Jumlah Jiwa *</label>
|
||||
<input type="number" id="ek-jumlah" value="${d.jumlah_kk}" min="1">
|
||||
</div>
|
||||
<div class="km-field">
|
||||
<label>Tanggal Lahir</label>
|
||||
<input type="date" id="ek-tgl-lahir" value="${d.tanggal_lahir || ''}">
|
||||
</div>
|
||||
<div class="km-field" style="grid-column:1/-1">
|
||||
<label>Pendidikan Terakhir</label>
|
||||
<select id="ek-pendidikan">${pendSelects}</select>
|
||||
</div>
|
||||
<div class="km-field" style="grid-column:1/-1">
|
||||
<label>Alamat *</label>
|
||||
<textarea id="ek-alamat" rows="2" style="resize:vertical">${(d.alamat || '').replace(/</g, '<')}</textarea>
|
||||
</div>
|
||||
<div class="km-field" style="grid-column:1/-1">
|
||||
<label>Riwayat Penyakit</label>
|
||||
<textarea id="ek-riwayat" rows="2" style="resize:vertical">${(d.riwayat_penyakit || '').replace(/</g, '<')}</textarea>
|
||||
</div>
|
||||
<div class="km-field">
|
||||
<label>Latitude</label>
|
||||
<input id="ek-lat" value="${Number(d.lat).toFixed(6)}" style="font-family:monospace;font-size:12px">
|
||||
</div>
|
||||
<div class="km-field">
|
||||
<label>Longitude</label>
|
||||
<input id="ek-lng" value="${Number(d.lng).toFixed(6)}" style="font-family:monospace;font-size:12px">
|
||||
</div>
|
||||
<div class="km-field" style="grid-column:1/-1">
|
||||
<label>Status Penanganan</label>
|
||||
<select id="ek-status">
|
||||
<option value="Belum Ditangani" ${curStatus === 'Belum Ditangani' ? 'selected' : ''}>Belum Ditangani</option>
|
||||
<option value="Diproses" ${curStatus === 'Diproses' ? 'selected' : ''}>Diproses</option>
|
||||
<option value="Sudah Ditangani" ${curStatus === 'Sudah Ditangani' ? 'selected' : ''}>Sudah Ditangani</option>
|
||||
</select>
|
||||
</div>
|
||||
<button class="hb-submit" style="grid-column:1/-1;background:linear-gradient(135deg,#f59e0b,#d97706)" onclick="saveEditKemiskinan(${id})">
|
||||
<i class="fas fa-save"></i> Simpan Perubahan
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>`;
|
||||
document.body.appendChild(overlay);
|
||||
// Close on backdrop click
|
||||
overlay.addEventListener('click', e => { if (e.target === overlay) overlay.remove(); });
|
||||
}
|
||||
|
||||
function saveEditKemiskinan(id) {
|
||||
const nama_kk = document.getElementById('e-k-nama').value.trim();
|
||||
const jumlah_kk = document.getElementById('e-k-jumlah').value.trim();
|
||||
const alamat = document.getElementById('e-k-alamat').value.trim();
|
||||
const lat = parseFloat(document.getElementById('e-k-lat').value);
|
||||
const lng = parseFloat(document.getElementById('e-k-lng').value);
|
||||
const status = document.getElementById('e-k-status')?.value || getKKStatus(id);
|
||||
const tanggal_lahir = document.getElementById('e-k-tgl-lahir')?.value || '';
|
||||
const pendidikan = document.getElementById('e-k-pendidikan')?.value || '';
|
||||
const riwayat_penyakit = document.getElementById('e-k-riwayat')?.value.trim() || '';
|
||||
const nama_kk = document.getElementById('ek-nama')?.value.trim();
|
||||
const jumlah_kk = document.getElementById('ek-jumlah')?.value.trim();
|
||||
const alamat = document.getElementById('ek-alamat')?.value.trim();
|
||||
const lat = parseFloat(document.getElementById('ek-lat')?.value);
|
||||
const lng = parseFloat(document.getElementById('ek-lng')?.value);
|
||||
const status = document.getElementById('ek-status')?.value || getKKStatus(id);
|
||||
const tanggal_lahir = document.getElementById('ek-tgl-lahir')?.value || '';
|
||||
const pendidikan = document.getElementById('ek-pendidikan')?.value || '';
|
||||
const riwayat_penyakit = document.getElementById('ek-riwayat')?.value.trim() || '';
|
||||
|
||||
if (!nama_kk || !jumlah_kk || !alamat || !Number.isFinite(lat) || !Number.isFinite(lng)) {
|
||||
alert('Data belum valid'); return;
|
||||
alert('Lengkapi data: Nama, Jumlah Jiwa, dan Alamat wajib diisi!'); return;
|
||||
}
|
||||
|
||||
const btn = document.querySelector('#ek-overlay .hb-submit');
|
||||
if (btn) { btn.disabled = true; btn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Menyimpan...'; }
|
||||
|
||||
fetch('api/update_kemiskinan.php', {
|
||||
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ id, nama_kk, jumlah_kk, alamat, lat, lng, tanggal_lahir, pendidikan, riwayat_penyakit })
|
||||
}).then(res => res.json()).then(resp => {
|
||||
if (resp.status !== 'success') { alert('Gagal update'); return; }
|
||||
if (resp.status !== 'success') {
|
||||
alert('Gagal menyimpan: ' + (resp.message || 'Error'));
|
||||
if (btn) { btn.disabled = false; btn.innerHTML = '<i class="fas fa-save"></i> Simpan Perubahan'; }
|
||||
return;
|
||||
}
|
||||
const d = getById('kemiskinan', id); if (!d) return;
|
||||
d.nama_kk = nama_kk; d.jumlah_kk = parseInt(jumlah_kk); d.alamat = alamat; d.lat = lat; d.lng = lng;
|
||||
d.tanggal_lahir = tanggal_lahir; d.pendidikan = pendidikan; d.riwayat_penyakit = riwayat_penyakit;
|
||||
@@ -5827,16 +5893,20 @@
|
||||
const mapStatus = getStatusMap();
|
||||
mapStatus[String(id)] = status;
|
||||
localStorage.setItem(statusStoreKey, JSON.stringify(mapStatus));
|
||||
// Simpan status ke database
|
||||
fetch('api/update_status_kemiskinan.php', {
|
||||
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ id: parseInt(id), status })
|
||||
}).catch(() => console.warn('Gagal simpan status ke DB'));
|
||||
}).catch(() => {});
|
||||
renderDashboard();
|
||||
refreshType('kemiskinan');
|
||||
map.closePopup();
|
||||
document.getElementById('ek-overlay')?.remove();
|
||||
showToast('✅ Data berhasil disimpan', 'success');
|
||||
focusFeature('kemiskinan', id);
|
||||
}).catch(() => alert('Error update data'));
|
||||
}).catch(() => {
|
||||
alert('Error jaringan, coba lagi');
|
||||
if (btn) { btn.disabled = false; btn.innerHTML = '<i class="fas fa-save"></i> Simpan Perubahan'; }
|
||||
});
|
||||
}
|
||||
|
||||
/* ── MASJID ── */
|
||||
@@ -5983,7 +6053,7 @@
|
||||
if (window._tmpC) { map.removeLayer(window._tmpC); window._tmpC = null; }
|
||||
setMode(null);
|
||||
} else { alert("Gagal simpan database"); }
|
||||
}).catch(err => { console.log(err); alert("Terjadi error"); });
|
||||
}).catch(err => { alert("Terjadi error"); });
|
||||
}
|
||||
|
||||
function renderMasjid(d) {
|
||||
@@ -6046,7 +6116,7 @@
|
||||
addCard('masjid', m.id, m.nama_masjid, m.pic_masjid, 'Rumah Ibadah', '#0f6250');
|
||||
});
|
||||
renderDashboard();
|
||||
}).catch(err => console.log("Masjid Error:", err));
|
||||
}).catch(err => {});
|
||||
}
|
||||
|
||||
function openEditMasjid(id) {
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<?php
|
||||
$ch = curl_init('http://localhost/webtugas/01/api/save_jalan.php');
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"nama":"Jl. Test","status":"Kabupaten","panjang":100,"koordinat":[[0,0]]}');
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
|
||||
$res = curl_exec($ch);
|
||||
echo "RAW RESPONSE: |" . $res . "|\n";
|
||||
echo "JSON DECODE: " . (json_decode($res) ? "OK" : json_last_error_msg());
|
||||
?>
|
||||
@@ -1,10 +0,0 @@
|
||||
<?php
|
||||
$ch = curl_init('http://localhost/webtugas/01/api/save_jalan.php');
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"nama":"Jl. Test","status":"Jalan Kabupaten","panjang":100,"koordinat":[[0,0]]}');
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
|
||||
$res = curl_exec($ch);
|
||||
echo "RAW RESPONSE: |" . $res . "|\n";
|
||||
echo "JSON DECODE: " . (json_decode($res) ? "OK" : json_last_error_msg());
|
||||
?>
|
||||
Reference in New Issue
Block a user