mengupdate database.sql
This commit is contained in:
+145
-102
@@ -2,29 +2,25 @@
|
||||
-- DATABASE: webgis_sig
|
||||
-- Sistem Manajemen Data Jalan, Parsil Tanah & SPBU
|
||||
-- ============================================================
|
||||
|
||||
CREATE DATABASE IF NOT EXISTS webgis_sig CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
USE webgis_sig;
|
||||
|
||||
-- ============================================================
|
||||
-- TABEL: data_jalan (Line / Polyline)
|
||||
-- Menyimpan data ruas jalan berdasarkan status jalan
|
||||
-- Geometri disimpan dalam format GeoJSON (LineString)
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS data_jalan (
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_jalan VARCHAR(150) NOT NULL COMMENT 'Nama ruas jalan',
|
||||
status_jalan ENUM(
|
||||
'Jalan Nasional',
|
||||
'Jalan Provinsi',
|
||||
'Jalan Kabupaten'
|
||||
) NOT NULL COMMENT 'Status / klasifikasi jalan',
|
||||
panjang_m DECIMAL(12,2) DEFAULT 0.00 COMMENT 'Panjang jalan dalam meter (dihitung otomatis oleh LeafletJS)',
|
||||
geojson LONGTEXT NOT NULL COMMENT 'Geometri LineString dalam format GeoJSON',
|
||||
keterangan TEXT DEFAULT NULL COMMENT 'Keterangan tambahan',
|
||||
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;
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_jalan VARCHAR(150) NOT NULL COMMENT 'Nama ruas jalan',
|
||||
status_jalan ENUM (
|
||||
'Jalan Nasional',
|
||||
'Jalan Provinsi',
|
||||
'Jalan Kabupaten'
|
||||
) NOT NULL COMMENT 'Status / klasifikasi jalan',
|
||||
panjang_m DECIMAL(12, 2) DEFAULT 0.00 COMMENT 'Panjang jalan dalam meter (dihitung otomatis oleh LeafletJS)',
|
||||
geojson LONGTEXT NOT NULL COMMENT 'Geometri LineString dalam format GeoJSON',
|
||||
keterangan TEXT DEFAULT NULL COMMENT 'Keterangan tambahan',
|
||||
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: data_parsil (Polygon)
|
||||
@@ -32,84 +28,101 @@ CREATE TABLE IF NOT EXISTS data_jalan (
|
||||
-- Geometri disimpan dalam format GeoJSON (Polygon)
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS data_parsil (
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_parsil VARCHAR(150) NOT NULL COMMENT 'Nama / nomor parsil',
|
||||
status_hak ENUM(
|
||||
'Sertifikat Hak Milik',
|
||||
'Sertifikat Hak Guna Bangunan',
|
||||
'Sertifikat Hak Guna Usaha',
|
||||
'Sertifikat Hak Pakai'
|
||||
) NOT NULL COMMENT 'Status kepemilikan / hak atas tanah',
|
||||
luas_m2 DECIMAL(15,2) DEFAULT 0.00 COMMENT 'Luas tanah dalam meter persegi (dihitung otomatis oleh LeafletJS)',
|
||||
geojson LONGTEXT NOT NULL COMMENT 'Geometri Polygon dalam format GeoJSON',
|
||||
pemilik VARCHAR(150) DEFAULT NULL COMMENT 'Nama pemilik (opsional)',
|
||||
keterangan TEXT DEFAULT NULL COMMENT 'Keterangan tambahan',
|
||||
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;
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_parsil VARCHAR(150) NOT NULL COMMENT 'Nama / nomor parsil',
|
||||
status_hak ENUM (
|
||||
'Sertifikat Hak Milik',
|
||||
'Sertifikat Hak Guna Bangunan',
|
||||
'Sertifikat Hak Guna Usaha',
|
||||
'Sertifikat Hak Pakai'
|
||||
) NOT NULL COMMENT 'Status kepemilikan / hak atas tanah',
|
||||
luas_m2 DECIMAL(15, 2) DEFAULT 0.00 COMMENT 'Luas tanah dalam meter persegi (dihitung otomatis oleh LeafletJS)',
|
||||
geojson LONGTEXT NOT NULL COMMENT 'Geometri Polygon dalam format GeoJSON',
|
||||
pemilik VARCHAR(150) DEFAULT NULL COMMENT 'Nama pemilik (opsional)',
|
||||
keterangan TEXT DEFAULT NULL COMMENT 'Keterangan tambahan',
|
||||
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;
|
||||
|
||||
-- ============================================================
|
||||
-- DATA CONTOH – Jalan
|
||||
-- ============================================================
|
||||
INSERT INTO data_jalan (nama_jalan, status_jalan, panjang_m, geojson, keterangan) VALUES
|
||||
(
|
||||
'Jl. Sudirman',
|
||||
'Jalan Nasional',
|
||||
1250.50,
|
||||
'{"type":"LineString","coordinates":[[106.8272,-6.2088],[106.8290,-6.2075],[106.8310,-6.2060],[106.8330,-6.2045]]}',
|
||||
'Jalan protokol pusat kota'
|
||||
),
|
||||
(
|
||||
'Jl. Gatot Subroto',
|
||||
'Jalan Provinsi',
|
||||
980.00,
|
||||
'{"type":"LineString","coordinates":[[106.8200,-6.2100],[106.8220,-6.2095],[106.8240,-6.2090],[106.8260,-6.2085]]}',
|
||||
'Penghubung antar kecamatan'
|
||||
),
|
||||
(
|
||||
'Jl. Pramuka',
|
||||
'Jalan Kabupaten',
|
||||
620.75,
|
||||
'{"type":"LineString","coordinates":[[106.8150,-6.2180],[106.8160,-6.2170],[106.8175,-6.2160],[106.8185,-6.2150]]}',
|
||||
'Jalan lingkungan kabupaten'
|
||||
);
|
||||
INSERT INTO
|
||||
data_jalan (
|
||||
nama_jalan,
|
||||
status_jalan,
|
||||
panjang_m,
|
||||
geojson,
|
||||
keterangan
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
'Jl. Sudirman',
|
||||
'Jalan Nasional',
|
||||
1250.50,
|
||||
'{"type":"LineString","coordinates":[[106.8272,-6.2088],[106.8290,-6.2075],[106.8310,-6.2060],[106.8330,-6.2045]]}',
|
||||
'Jalan protokol pusat kota'
|
||||
),
|
||||
(
|
||||
'Jl. Gatot Subroto',
|
||||
'Jalan Provinsi',
|
||||
980.00,
|
||||
'{"type":"LineString","coordinates":[[106.8200,-6.2100],[106.8220,-6.2095],[106.8240,-6.2090],[106.8260,-6.2085]]}',
|
||||
'Penghubung antar kecamatan'
|
||||
),
|
||||
(
|
||||
'Jl. Pramuka',
|
||||
'Jalan Kabupaten',
|
||||
620.75,
|
||||
'{"type":"LineString","coordinates":[[106.8150,-6.2180],[106.8160,-6.2170],[106.8175,-6.2160],[106.8185,-6.2150]]}',
|
||||
'Jalan lingkungan kabupaten'
|
||||
);
|
||||
|
||||
-- ============================================================
|
||||
-- DATA CONTOH – Parsil Tanah
|
||||
-- ============================================================
|
||||
INSERT INTO data_parsil (nama_parsil, status_hak, luas_m2, geojson, pemilik, keterangan) VALUES
|
||||
(
|
||||
'Parsil A-001',
|
||||
'Sertifikat Hak Milik',
|
||||
1200.00,
|
||||
'{"type":"Polygon","coordinates":[[[106.8200,-6.2000],[106.8210,-6.2000],[106.8210,-6.2010],[106.8200,-6.2010],[106.8200,-6.2000]]]}',
|
||||
'Budi Santoso',
|
||||
'Tanah kavling perumahan'
|
||||
),
|
||||
(
|
||||
'Parsil B-002',
|
||||
'Sertifikat Hak Guna Bangunan',
|
||||
850.50,
|
||||
'{"type":"Polygon","coordinates":[[[106.8220,-6.2000],[106.8230,-6.2000],[106.8230,-6.2008],[106.8220,-6.2008],[106.8220,-6.2000]]]}',
|
||||
'PT. Maju Bersama',
|
||||
'Kavling komersial'
|
||||
),
|
||||
(
|
||||
'Parsil C-003',
|
||||
'Sertifikat Hak Guna Usaha',
|
||||
2500.00,
|
||||
'{"type":"Polygon","coordinates":[[[106.8240,-6.1990],[106.8260,-6.1990],[106.8260,-6.2010],[106.8240,-6.2010],[106.8240,-6.1990]]]}',
|
||||
'CV. Tani Makmur',
|
||||
'Lahan pertanian/perkebunan'
|
||||
),
|
||||
(
|
||||
'Parsil D-004',
|
||||
'Sertifikat Hak Pakai',
|
||||
4000.00,
|
||||
'{"type":"Polygon","coordinates":[[[106.8270,-6.1985],[106.8295,-6.1985],[106.8295,-6.2005],[106.8270,-6.2005],[106.8270,-6.1985]]]}',
|
||||
'Pemerintah Kota',
|
||||
'Lahan fasilitas umum'
|
||||
);
|
||||
INSERT INTO
|
||||
data_parsil (
|
||||
nama_parsil,
|
||||
status_hak,
|
||||
luas_m2,
|
||||
geojson,
|
||||
pemilik,
|
||||
keterangan
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
'Parsil A-001',
|
||||
'Sertifikat Hak Milik',
|
||||
1200.00,
|
||||
'{"type":"Polygon","coordinates":[[[106.8200,-6.2000],[106.8210,-6.2000],[106.8210,-6.2010],[106.8200,-6.2010],[106.8200,-6.2000]]]}',
|
||||
'Budi Santoso',
|
||||
'Tanah kavling perumahan'
|
||||
),
|
||||
(
|
||||
'Parsil B-002',
|
||||
'Sertifikat Hak Guna Bangunan',
|
||||
850.50,
|
||||
'{"type":"Polygon","coordinates":[[[106.8220,-6.2000],[106.8230,-6.2000],[106.8230,-6.2008],[106.8220,-6.2008],[106.8220,-6.2000]]]}',
|
||||
'PT. Maju Bersama',
|
||||
'Kavling komersial'
|
||||
),
|
||||
(
|
||||
'Parsil C-003',
|
||||
'Sertifikat Hak Guna Usaha',
|
||||
2500.00,
|
||||
'{"type":"Polygon","coordinates":[[[106.8240,-6.1990],[106.8260,-6.1990],[106.8260,-6.2010],[106.8240,-6.2010],[106.8240,-6.1990]]]}',
|
||||
'CV. Tani Makmur',
|
||||
'Lahan pertanian/perkebunan'
|
||||
),
|
||||
(
|
||||
'Parsil D-004',
|
||||
'Sertifikat Hak Pakai',
|
||||
4000.00,
|
||||
'{"type":"Polygon","coordinates":[[[106.8270,-6.1985],[106.8295,-6.1985],[106.8295,-6.2005],[106.8270,-6.2005],[106.8270,-6.1985]]]}',
|
||||
'Pemerintah Kota',
|
||||
'Lahan fasilitas umum'
|
||||
);
|
||||
|
||||
-- ============================================================
|
||||
-- TABEL: data_spbu (Point)
|
||||
@@ -117,22 +130,52 @@ INSERT INTO data_parsil (nama_parsil, status_hak, luas_m2, geojson, pemilik, ket
|
||||
-- Geometri disimpan dalam format GeoJSON (Point)
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS data_spbu (
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_spbu VARCHAR(150) NOT NULL COMMENT 'Nama SPBU / nama cabang',
|
||||
telepon VARCHAR(20) DEFAULT NULL COMMENT 'Nomor telepon SPBU',
|
||||
buka_24jam TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 = buka 24 jam (marker hijau), 0 = tidak (marker merah)',
|
||||
lat DECIMAL(10,7) NOT NULL COMMENT 'Latitude titik SPBU',
|
||||
lng DECIMAL(10,7) NOT NULL COMMENT 'Longitude titik SPBU',
|
||||
geojson LONGTEXT NOT NULL COMMENT 'Geometri Point dalam format GeoJSON',
|
||||
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;
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_spbu VARCHAR(150) NOT NULL COMMENT 'Nama SPBU / nama cabang',
|
||||
telepon VARCHAR(20) DEFAULT NULL COMMENT 'Nomor telepon SPBU',
|
||||
buka_24jam TINYINT (1) NOT NULL DEFAULT 0 COMMENT '1 = buka 24 jam (marker hijau), 0 = tidak (marker merah)',
|
||||
lat DECIMAL(10, 7) NOT NULL COMMENT 'Latitude titik SPBU',
|
||||
lng DECIMAL(10, 7) NOT NULL COMMENT 'Longitude titik SPBU',
|
||||
geojson LONGTEXT NOT NULL COMMENT 'Geometri Point dalam format GeoJSON',
|
||||
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;
|
||||
|
||||
-- ============================================================
|
||||
-- DATA CONTOH – SPBU di Pontianak
|
||||
-- ============================================================
|
||||
INSERT INTO data_spbu (nama_spbu, telepon, buka_24jam, lat, lng, geojson) VALUES
|
||||
('SPBU Jl. Ahmad Yani', '0561-123456', 1, -0.0200, 109.3300, '{"type":"Point","coordinates":[109.3300,-0.0200]}'),
|
||||
('SPBU Jl. Gajah Mada', '0561-654321', 0, -0.0350, 109.3200, '{"type":"Point","coordinates":[109.3200,-0.0350]}'),
|
||||
('SPBU Jl. Tanjungpura', '0561-789012', 1, -0.0100, 109.3450, '{"type":"Point","coordinates":[109.3450,-0.0100]}'),
|
||||
('SPBU Jl. Sutan Syahrir','0561-345678', 0, -0.0480, 109.3380, '{"type":"Point","coordinates":[109.3380,-0.0480]}');
|
||||
INSERT INTO
|
||||
data_spbu (nama_spbu, telepon, buka_24jam, lat, lng, geojson)
|
||||
VALUES
|
||||
(
|
||||
'SPBU Jl. Ahmad Yani',
|
||||
'0561-123456',
|
||||
1,
|
||||
-0.0200,
|
||||
109.3300,
|
||||
'{"type":"Point","coordinates":[109.3300,-0.0200]}'
|
||||
),
|
||||
(
|
||||
'SPBU Jl. Gajah Mada',
|
||||
'0561-654321',
|
||||
0,
|
||||
-0.0350,
|
||||
109.3200,
|
||||
'{"type":"Point","coordinates":[109.3200,-0.0350]}'
|
||||
),
|
||||
(
|
||||
'SPBU Jl. Tanjungpura',
|
||||
'0561-789012',
|
||||
1,
|
||||
-0.0100,
|
||||
109.3450,
|
||||
'{"type":"Point","coordinates":[109.3450,-0.0100]}'
|
||||
),
|
||||
(
|
||||
'SPBU Jl. Sutan Syahrir',
|
||||
'0561-345678',
|
||||
0,
|
||||
-0.0480,
|
||||
109.3380,
|
||||
'{"type":"Point","coordinates":[109.3380,-0.0480]}'
|
||||
);
|
||||
@@ -5,10 +5,11 @@
|
||||
// ============================================================
|
||||
|
||||
// Konfigurasi database
|
||||
define('DB_HOST', 'vg4so4ccs0444o4cgkssgos8');
|
||||
define('DB_NAME', 'default');
|
||||
define('DB_USER', 'mysql');
|
||||
define('DB_PASS', 'tg9lvPlr4hgUhgtT7aPq9XelkCEvvMGtsoV8eB4dD5FAkz891PwkJT340xmaEWxL');
|
||||
define('DB_HOST', 'vg4so4ccs0444o4cgkssgos8');
|
||||
define('DB_PORT', 3306);
|
||||
define('DB_NAME', 'default');
|
||||
define('DB_USER', 'mysql');
|
||||
define('DB_PASS', 'tg9lvPlr4hgUhgtT7aPq9XelkCEvvMGtsoV8eB4dD5FAkz891PwkJT340xmaEWxL');
|
||||
define('DB_CHARSET', 'utf8mb4');
|
||||
|
||||
// Direktori upload foto laporan
|
||||
@@ -22,13 +23,14 @@ if (session_status() === PHP_SESSION_NONE) {
|
||||
// ── Koneksi PDO ──────────────────────────────────────────────
|
||||
try {
|
||||
$pdo = new PDO(
|
||||
"mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET,
|
||||
"mysql:host=" . DB_HOST . ";port=" . DB_PORT . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET,
|
||||
DB_USER,
|
||||
DB_PASS,
|
||||
[
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
PDO::ATTR_EMULATE_PREPARES => false,
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
PDO::ATTR_EMULATE_PREPARES => false,
|
||||
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
|
||||
]
|
||||
);
|
||||
} catch (PDOException $e) {
|
||||
@@ -61,7 +63,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
||||
* Kirim respon JSON standar lalu hentikan eksekusi.
|
||||
* Format: {"success": true/false, "data": ..., "message": "..."}
|
||||
*/
|
||||
function jsonResponse($data = null, string $message = '', bool $success = true, int $httpCode = 200, array $extra = []): void {
|
||||
function jsonResponse($data = null, string $message = '', bool $success = true, int $httpCode = 200, array $extra = []): void
|
||||
{
|
||||
http_response_code($httpCode);
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
$response = [
|
||||
@@ -80,20 +83,22 @@ function jsonResponse($data = null, string $message = '', bool $success = true,
|
||||
/**
|
||||
* Bersihkan input string dari tag HTML.
|
||||
*/
|
||||
function clean(string $value): string {
|
||||
function clean(string $value): string
|
||||
{
|
||||
return htmlspecialchars(strip_tags(trim($value)), ENT_QUOTES, 'UTF-8');
|
||||
}
|
||||
|
||||
/**
|
||||
* Hitung jarak Haversine antara dua koordinat dalam kilometer.
|
||||
*/
|
||||
function haversine(float $lat1, float $lng1, float $lat2, float $lng2): float {
|
||||
function haversine(float $lat1, float $lng1, float $lat2, float $lng2): float
|
||||
{
|
||||
$R = 6371; // Radius bumi dalam km
|
||||
$dLat = deg2rad($lat2 - $lat1);
|
||||
$dLng = deg2rad($lng2 - $lng1);
|
||||
$a = sin($dLat / 2) * sin($dLat / 2) +
|
||||
cos(deg2rad($lat1)) * cos(deg2rad($lat2)) *
|
||||
sin($dLng / 2) * sin($dLng / 2);
|
||||
cos(deg2rad($lat1)) * cos(deg2rad($lat2)) *
|
||||
sin($dLng / 2) * sin($dLng / 2);
|
||||
$c = 2 * atan2(sqrt($a), sqrt(1 - $a));
|
||||
return round($R * $c, 4);
|
||||
}
|
||||
@@ -102,7 +107,8 @@ function haversine(float $lat1, float $lng1, float $lat2, float $lng2): float {
|
||||
* Auto-assign: cari rumah ibadah terdekat yang radius-nya mencakup lokasi KK.
|
||||
* Mengembalikan ['rumah_ibadah_id' => int|null, 'jarak_km' => float|null]
|
||||
*/
|
||||
function autoAssign(PDO $pdo, float $lat, float $lng): array {
|
||||
function autoAssign(PDO $pdo, float $lat, float $lng): array
|
||||
{
|
||||
$result = ['rumah_ibadah_id' => null, 'jarak_km' => null];
|
||||
|
||||
$stmt = $pdo->query("SELECT id, lat, lng, radius_km FROM rumah_ibadah");
|
||||
@@ -132,7 +138,8 @@ function autoAssign(PDO $pdo, float $lat, float $lng): array {
|
||||
* Cek apakah user sudah login. Jika belum, kirim 401.
|
||||
* Mengembalikan data session user.
|
||||
*/
|
||||
function requireLogin(): array {
|
||||
function requireLogin(): array
|
||||
{
|
||||
if (empty($_SESSION['user'])) {
|
||||
jsonResponse(null, 'Tidak diizinkan. Silakan login terlebih dahulu.', false, 401);
|
||||
}
|
||||
@@ -143,7 +150,8 @@ function requireLogin(): array {
|
||||
* Cek apakah role user termasuk dalam daftar yang diizinkan.
|
||||
* Jika tidak, kirim 403.
|
||||
*/
|
||||
function requireRole(array $allowedRoles): array {
|
||||
function requireRole(array $allowedRoles): array
|
||||
{
|
||||
$user = requireLogin();
|
||||
if (!in_array($user['role'], $allowedRoles)) {
|
||||
jsonResponse(null, 'Akses ditolak. Role Anda tidak memiliki izin.', false, 403);
|
||||
@@ -155,7 +163,8 @@ function requireRole(array $allowedRoles): array {
|
||||
* Blokir aksi tulis (POST/PUT/DELETE) untuk role walikota.
|
||||
* Walikota hanya boleh GET.
|
||||
*/
|
||||
function blockWalikotaWrite(): void {
|
||||
function blockWalikotaWrite(): void
|
||||
{
|
||||
if (!empty($_SESSION['user']) && $_SESSION['user']['role'] === 'walikota') {
|
||||
$method = $_SERVER['REQUEST_METHOD'];
|
||||
if (in_array($method, ['POST', 'PUT', 'DELETE'])) {
|
||||
@@ -168,7 +177,8 @@ function blockWalikotaWrite(): void {
|
||||
* Generate kode pengurus dengan format: RI-[JENIS 3 HURUF]-[RANDOM 4 DIGIT]
|
||||
* Contoh: RI-MSJ-4821, RI-GRJ-7153
|
||||
*/
|
||||
function generateKodePengurus(PDO $pdo, string $jenis): string {
|
||||
function generateKodePengurus(PDO $pdo, string $jenis): string
|
||||
{
|
||||
// Mapping jenis ke 3 huruf
|
||||
$map = [
|
||||
'Masjid' => 'MSJ',
|
||||
@@ -199,7 +209,8 @@ function generateKodePengurus(PDO $pdo, string $jenis): string {
|
||||
* Cek rate limit untuk IP tertentu. Maks 5 submit per jam.
|
||||
* Mengembalikan true jika masih diizinkan, false jika melebihi batas.
|
||||
*/
|
||||
function checkRateLimit(PDO $pdo, string $ip): bool {
|
||||
function checkRateLimit(PDO $pdo, string $ip): bool
|
||||
{
|
||||
// Hapus record yang lebih dari 1 jam
|
||||
$pdo->prepare("DELETE FROM rate_limit WHERE created_at < NOW() - INTERVAL 1 HOUR")->execute();
|
||||
|
||||
@@ -222,7 +233,8 @@ function checkRateLimit(PDO $pdo, string $ip): bool {
|
||||
/**
|
||||
* Handle upload file foto. Mengembalikan path relatif file atau null.
|
||||
*/
|
||||
function handleUpload(string $fieldName): ?string {
|
||||
function handleUpload(string $fieldName): ?string
|
||||
{
|
||||
if (!isset($_FILES[$fieldName]) || $_FILES[$fieldName]['error'] !== UPLOAD_ERR_OK) {
|
||||
return null;
|
||||
}
|
||||
@@ -259,7 +271,8 @@ function handleUpload(string $fieldName): ?string {
|
||||
/**
|
||||
* Dapatkan IP address client (mendukung proxy).
|
||||
*/
|
||||
function getClientIP(): string {
|
||||
function getClientIP(): string
|
||||
{
|
||||
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
||||
return explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0];
|
||||
}
|
||||
|
||||
+323
-219
@@ -2,17 +2,17 @@
|
||||
-- DATABASE: webgis_rumah_ibadah
|
||||
-- WebGIS Pontianak — Pengentasan Kemiskinan Berbasis Rumah Ibadah
|
||||
-- ============================================================
|
||||
|
||||
CREATE DATABASE IF NOT EXISTS webgis_rumah_ibadah
|
||||
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
USE webgis_rumah_ibadah;
|
||||
|
||||
-- Hapus tabel lama (urutan sesuai dependensi FK)
|
||||
DROP TABLE IF EXISTS histori_bantuan;
|
||||
|
||||
DROP TABLE IF EXISTS laporan_masyarakat;
|
||||
|
||||
DROP TABLE IF EXISTS keluarga_miskin;
|
||||
|
||||
DROP TABLE IF EXISTS users;
|
||||
|
||||
DROP TABLE IF EXISTS rumah_ibadah;
|
||||
|
||||
DROP TABLE IF EXISTS rate_limit;
|
||||
|
||||
-- ============================================================
|
||||
@@ -20,270 +20,374 @@ DROP TABLE IF EXISTS rate_limit;
|
||||
-- Menyimpan data titik lokasi rumah ibadah beserta radius cakupan
|
||||
-- ============================================================
|
||||
CREATE TABLE rumah_ibadah (
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
nama VARCHAR(200) NOT NULL COMMENT 'Nama rumah ibadah',
|
||||
jenis ENUM('Masjid','Gereja','Pura','Vihara','Klenteng','Lainnya')
|
||||
NOT NULL COMMENT 'Jenis rumah ibadah',
|
||||
alamat TEXT NOT NULL COMMENT 'Alamat lengkap',
|
||||
lat DECIMAL(10,7) NOT NULL COMMENT 'Latitude',
|
||||
lng DECIMAL(10,7) NOT NULL COMMENT 'Longitude',
|
||||
radius_km FLOAT NOT NULL DEFAULT 2.0 COMMENT 'Radius cakupan (km)',
|
||||
kode_pengurus VARCHAR(20) NULL UNIQUE COMMENT 'Kode unik login pengurus, format RI-XXX-9999',
|
||||
password_pengurus VARCHAR(255) NULL COMMENT 'Password pengurus (hashed)',
|
||||
kecamatan ENUM('Pontianak Utara','Pontianak Selatan','Pontianak Timur',
|
||||
'Pontianak Barat','Pontianak Tenggara','Pontianak Kota')
|
||||
NOT NULL COMMENT 'Kecamatan lokasi',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
nama VARCHAR(200) NOT NULL COMMENT 'Nama rumah ibadah',
|
||||
jenis ENUM (
|
||||
'Masjid',
|
||||
'Gereja',
|
||||
'Pura',
|
||||
'Vihara',
|
||||
'Klenteng',
|
||||
'Lainnya'
|
||||
) NOT NULL COMMENT 'Jenis rumah ibadah',
|
||||
alamat TEXT NOT NULL COMMENT 'Alamat lengkap',
|
||||
lat DECIMAL(10, 7) NOT NULL COMMENT 'Latitude',
|
||||
lng DECIMAL(10, 7) NOT NULL COMMENT 'Longitude',
|
||||
radius_km FLOAT NOT NULL DEFAULT 2.0 COMMENT 'Radius cakupan (km)',
|
||||
kode_pengurus VARCHAR(20) NULL UNIQUE COMMENT 'Kode unik login pengurus, format RI-XXX-9999',
|
||||
password_pengurus VARCHAR(255) NULL COMMENT 'Password pengurus (hashed)',
|
||||
kecamatan ENUM (
|
||||
'Pontianak Utara',
|
||||
'Pontianak Selatan',
|
||||
'Pontianak Timur',
|
||||
'Pontianak Barat',
|
||||
'Pontianak Tenggara',
|
||||
'Pontianak Kota'
|
||||
) NOT NULL COMMENT 'Kecamatan lokasi',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
|
||||
|
||||
-- ============================================================
|
||||
-- TABEL: users
|
||||
-- Manajemen pengguna dengan 3 role: admin, pengurus, walikota
|
||||
-- ============================================================
|
||||
CREATE TABLE users (
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
nama VARCHAR(150) NOT NULL COMMENT 'Nama lengkap pengguna',
|
||||
username VARCHAR(100) NOT NULL UNIQUE COMMENT 'Username login',
|
||||
password VARCHAR(255) NOT NULL COMMENT 'Password ter-hash (bcrypt)',
|
||||
role ENUM('admin','pengurus','walikota')
|
||||
NOT NULL DEFAULT 'pengurus' COMMENT 'Role pengguna',
|
||||
rumah_ibadah_id INT DEFAULT NULL COMMENT 'FK ke rumah_ibadah (hanya untuk pengurus)',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (rumah_ibadah_id) REFERENCES rumah_ibadah(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
nama VARCHAR(150) NOT NULL COMMENT 'Nama lengkap pengguna',
|
||||
username VARCHAR(100) NOT NULL UNIQUE COMMENT 'Username login',
|
||||
password VARCHAR(255) NOT NULL COMMENT 'Password ter-hash (bcrypt)',
|
||||
role ENUM ('admin', 'pengurus', 'walikota') NOT NULL DEFAULT 'pengurus' COMMENT 'Role pengguna',
|
||||
rumah_ibadah_id INT DEFAULT NULL COMMENT 'FK ke rumah_ibadah (hanya untuk pengurus)',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (rumah_ibadah_id) REFERENCES rumah_ibadah (id) ON DELETE SET NULL
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
|
||||
|
||||
-- ============================================================
|
||||
-- TABEL: keluarga_miskin
|
||||
-- Data keluarga miskin dengan auto-assign ke rumah ibadah terdekat
|
||||
-- ============================================================
|
||||
CREATE TABLE keluarga_miskin (
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
nik VARCHAR(20) NOT NULL UNIQUE COMMENT 'NIK Kepala Keluarga',
|
||||
nama_kepala_keluarga VARCHAR(200) NOT NULL COMMENT 'Nama Kepala Keluarga',
|
||||
tanggal_lahir DATE NULL COMMENT 'Tanggal lahir KK',
|
||||
pendidikan ENUM('Tidak Sekolah','SD','SMP','SMA','D3','S1','S2/S3')
|
||||
NOT NULL DEFAULT 'Tidak Sekolah',
|
||||
jumlah_anggota INT NOT NULL DEFAULT 1 COMMENT 'Jumlah anggota keluarga',
|
||||
alamat TEXT NOT NULL COMMENT 'Alamat lengkap',
|
||||
kecamatan ENUM('Pontianak Utara','Pontianak Selatan','Pontianak Timur',
|
||||
'Pontianak Barat','Pontianak Tenggara','Pontianak Kota')
|
||||
NOT NULL,
|
||||
lat DECIMAL(10,7) NOT NULL,
|
||||
lng DECIMAL(10,7) NOT NULL,
|
||||
tingkat_kemiskinan ENUM('Sangat Miskin','Miskin','Hampir Miskin')
|
||||
NOT NULL DEFAULT 'Miskin',
|
||||
status_dtks ENUM('Terdaftar DTKS','Belum DTKS','Sedang Diusulkan')
|
||||
NOT NULL DEFAULT 'Belum DTKS',
|
||||
riwayat_penyakit JSON NULL COMMENT 'Array penyakit: Stunting, TBC, Hipertensi, dll',
|
||||
rumah_ibadah_id INT DEFAULT NULL COMMENT 'Auto-assign ke RI terdekat',
|
||||
jarak_ke_ibadah FLOAT DEFAULT NULL COMMENT 'Jarak ke RI terdekat (km)',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (rumah_ibadah_id) REFERENCES rumah_ibadah(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
nik VARCHAR(20) NOT NULL UNIQUE COMMENT 'NIK Kepala Keluarga',
|
||||
nama_kepala_keluarga VARCHAR(200) NOT NULL COMMENT 'Nama Kepala Keluarga',
|
||||
tanggal_lahir DATE NULL COMMENT 'Tanggal lahir KK',
|
||||
pendidikan ENUM (
|
||||
'Tidak Sekolah',
|
||||
'SD',
|
||||
'SMP',
|
||||
'SMA',
|
||||
'D3',
|
||||
'S1',
|
||||
'S2/S3'
|
||||
) NOT NULL DEFAULT 'Tidak Sekolah',
|
||||
jumlah_anggota INT NOT NULL DEFAULT 1 COMMENT 'Jumlah anggota keluarga',
|
||||
alamat TEXT NOT NULL COMMENT 'Alamat lengkap',
|
||||
kecamatan ENUM (
|
||||
'Pontianak Utara',
|
||||
'Pontianak Selatan',
|
||||
'Pontianak Timur',
|
||||
'Pontianak Barat',
|
||||
'Pontianak Tenggara',
|
||||
'Pontianak Kota'
|
||||
) NOT NULL,
|
||||
lat DECIMAL(10, 7) NOT NULL,
|
||||
lng DECIMAL(10, 7) NOT NULL,
|
||||
tingkat_kemiskinan ENUM ('Sangat Miskin', 'Miskin', 'Hampir Miskin') NOT NULL DEFAULT 'Miskin',
|
||||
status_dtks ENUM (
|
||||
'Terdaftar DTKS',
|
||||
'Belum DTKS',
|
||||
'Sedang Diusulkan'
|
||||
) NOT NULL DEFAULT 'Belum DTKS',
|
||||
riwayat_penyakit JSON NULL COMMENT 'Array penyakit: Stunting, TBC, Hipertensi, dll',
|
||||
rumah_ibadah_id INT DEFAULT NULL COMMENT 'Auto-assign ke RI terdekat',
|
||||
jarak_ke_ibadah FLOAT DEFAULT NULL COMMENT 'Jarak ke RI terdekat (km)',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (rumah_ibadah_id) REFERENCES rumah_ibadah (id) ON DELETE SET NULL
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
|
||||
|
||||
-- ============================================================
|
||||
-- TABEL: laporan_masyarakat
|
||||
-- Laporan warga tentang kemiskinan (bisa anonim, tanpa login)
|
||||
-- ============================================================
|
||||
CREATE TABLE laporan_masyarakat (
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_terlapor VARCHAR(150) NULL COMMENT 'Nama warga yang dilaporkan (boleh null)',
|
||||
nik_terlapor VARCHAR(16) NULL COMMENT 'NIK warga yang dilaporkan (boleh null)',
|
||||
nama_pelapor VARCHAR(150) NULL COMMENT 'Boleh anonim (null)',
|
||||
no_hp VARCHAR(20) NULL,
|
||||
alamat_terlapor TEXT NOT NULL COMMENT 'Alamat yang dilaporkan',
|
||||
lat DECIMAL(10,7) NOT NULL,
|
||||
lng DECIMAL(10,7) NOT NULL,
|
||||
deskripsi TEXT NOT NULL COMMENT 'Deskripsi laporan',
|
||||
foto VARCHAR(255) NULL COMMENT 'Path file foto',
|
||||
status ENUM('Baru','Diverifikasi','Ditolak')
|
||||
NOT NULL DEFAULT 'Baru',
|
||||
alasan_tolak TEXT NULL COMMENT 'Alasan jika ditolak',
|
||||
ditangani_oleh INT NULL COMMENT 'FK ke users.id',
|
||||
converted_to_kk_id INT NULL COMMENT 'FK ke keluarga_miskin.id jika dikonversi',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (ditangani_oleh) REFERENCES users(id) ON DELETE SET NULL,
|
||||
FOREIGN KEY (converted_to_kk_id) REFERENCES keluarga_miskin(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_terlapor VARCHAR(150) NULL COMMENT 'Nama warga yang dilaporkan (boleh null)',
|
||||
nik_terlapor VARCHAR(16) NULL COMMENT 'NIK warga yang dilaporkan (boleh null)',
|
||||
nama_pelapor VARCHAR(150) NULL COMMENT 'Boleh anonim (null)',
|
||||
no_hp VARCHAR(20) NULL,
|
||||
alamat_terlapor TEXT NOT NULL COMMENT 'Alamat yang dilaporkan',
|
||||
lat DECIMAL(10, 7) NOT NULL,
|
||||
lng DECIMAL(10, 7) NOT NULL,
|
||||
deskripsi TEXT NOT NULL COMMENT 'Deskripsi laporan',
|
||||
foto VARCHAR(255) NULL COMMENT 'Path file foto',
|
||||
status ENUM ('Baru', 'Diverifikasi', 'Ditolak') NOT NULL DEFAULT 'Baru',
|
||||
alasan_tolak TEXT NULL COMMENT 'Alasan jika ditolak',
|
||||
ditangani_oleh INT NULL COMMENT 'FK ke users.id',
|
||||
converted_to_kk_id INT NULL COMMENT 'FK ke keluarga_miskin.id jika dikonversi',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (ditangani_oleh) REFERENCES users (id) ON DELETE SET NULL,
|
||||
FOREIGN KEY (converted_to_kk_id) REFERENCES keluarga_miskin (id) ON DELETE SET NULL
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
|
||||
|
||||
-- ============================================================
|
||||
-- TABEL: histori_bantuan
|
||||
-- Riwayat bantuan yang diterima keluarga miskin
|
||||
-- ============================================================
|
||||
CREATE TABLE histori_bantuan (
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
kk_id INT NOT NULL COMMENT 'FK ke keluarga_miskin',
|
||||
jenis_bantuan ENUM('PKH','BPNT/Sembako','Beras Bansos','KIS-PBI',
|
||||
'Bansos Tunai Pemkot','Rutilahu','PMT Stunting',
|
||||
'CSR Swasta','Lainnya')
|
||||
NOT NULL,
|
||||
nominal BIGINT NOT NULL DEFAULT 0 COMMENT 'Nominal dalam rupiah (0 jika non-uang)',
|
||||
keterangan TEXT NULL COMMENT 'Catatan bebas: 10 kg beras, 3 karung, dll',
|
||||
tanggal_penyaluran DATE NOT NULL,
|
||||
sumber_dana ENUM('APBN','APBD','CSR','Lainnya')
|
||||
NOT NULL DEFAULT 'APBD',
|
||||
penanggung_jawab INT NOT NULL COMMENT 'FK ke users.id',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (kk_id) REFERENCES keluarga_miskin(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (penanggung_jawab) REFERENCES users(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
kk_id INT NOT NULL COMMENT 'FK ke keluarga_miskin',
|
||||
jenis_bantuan ENUM (
|
||||
'PKH',
|
||||
'BPNT/Sembako',
|
||||
'Beras Bansos',
|
||||
'KIS-PBI',
|
||||
'Bansos Tunai Pemkot',
|
||||
'Rutilahu',
|
||||
'PMT Stunting',
|
||||
'CSR Swasta',
|
||||
'Lainnya'
|
||||
) NOT NULL,
|
||||
nominal BIGINT NOT NULL DEFAULT 0 COMMENT 'Nominal dalam rupiah (0 jika non-uang)',
|
||||
keterangan TEXT NULL COMMENT 'Catatan bebas: 10 kg beras, 3 karung, dll',
|
||||
tanggal_penyaluran DATE NOT NULL,
|
||||
sumber_dana ENUM ('APBN', 'APBD', 'CSR', 'Lainnya') NOT NULL DEFAULT 'APBD',
|
||||
penanggung_jawab INT NOT NULL COMMENT 'FK ke users.id',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (kk_id) REFERENCES keluarga_miskin (id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (penanggung_jawab) REFERENCES users (id) ON DELETE CASCADE
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
|
||||
|
||||
-- ============================================================
|
||||
-- TABEL: rate_limit
|
||||
-- Pembatasan submit laporan masyarakat per IP (maks 5/jam)
|
||||
-- ============================================================
|
||||
CREATE TABLE rate_limit (
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
ip_address VARCHAR(45) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
ip_address VARCHAR(45) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_ip_time (ip_address, created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
|
||||
|
||||
-- ============================================================
|
||||
-- DATA SEED: Rumah Ibadah (2 data)
|
||||
-- ============================================================
|
||||
INSERT INTO rumah_ibadah (nama, jenis, alamat, lat, lng, radius_km, kode_pengurus, password_pengurus, kecamatan) VALUES
|
||||
(
|
||||
'Masjid Raya Mujahidin',
|
||||
'Masjid',
|
||||
'Jl. Ahmad Yani No. 1, Pontianak Tenggara',
|
||||
-0.0263330, 109.3425200,
|
||||
2.5,
|
||||
'RI-MSJ-4821',
|
||||
-- password: pengurus123
|
||||
'$2y$10$EQKGMwtGqPsn3kxOGkUf3eh3cnXOCEYqVNfCKDVk.Q7WYTCKvi5iG',
|
||||
'Pontianak Tenggara'
|
||||
),
|
||||
(
|
||||
'Gereja Katedral Santo Yosef',
|
||||
'Gereja',
|
||||
'Jl. Diponegoro No. 120, Pontianak Kota',
|
||||
-0.0380000, 109.3422000,
|
||||
2.0,
|
||||
'RI-GRJ-7153',
|
||||
-- password: pengurus123
|
||||
'$2y$10$EQKGMwtGqPsn3kxOGkUf3eh3cnXOCEYqVNfCKDVk.Q7WYTCKvi5iG',
|
||||
'Pontianak Kota'
|
||||
);
|
||||
INSERT INTO
|
||||
rumah_ibadah (
|
||||
nama,
|
||||
jenis,
|
||||
alamat,
|
||||
lat,
|
||||
lng,
|
||||
radius_km,
|
||||
kode_pengurus,
|
||||
password_pengurus,
|
||||
kecamatan
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
'Masjid Raya Mujahidin',
|
||||
'Masjid',
|
||||
'Jl. Ahmad Yani No. 1, Pontianak Tenggara',
|
||||
-0.0263330,
|
||||
109.3425200,
|
||||
2.5,
|
||||
'RI-MSJ-4821',
|
||||
-- password: pengurus123
|
||||
'$2y$10$EQKGMwtGqPsn3kxOGkUf3eh3cnXOCEYqVNfCKDVk.Q7WYTCKvi5iG',
|
||||
'Pontianak Tenggara'
|
||||
),
|
||||
(
|
||||
'Gereja Katedral Santo Yosef',
|
||||
'Gereja',
|
||||
'Jl. Diponegoro No. 120, Pontianak Kota',
|
||||
-0.0380000,
|
||||
109.3422000,
|
||||
2.0,
|
||||
'RI-GRJ-7153',
|
||||
-- password: pengurus123
|
||||
'$2y$10$EQKGMwtGqPsn3kxOGkUf3eh3cnXOCEYqVNfCKDVk.Q7WYTCKvi5iG',
|
||||
'Pontianak Kota'
|
||||
);
|
||||
|
||||
-- ============================================================
|
||||
-- DATA SEED: Users (1 admin, 1 walikota)
|
||||
-- Password semua: admin123
|
||||
-- ============================================================
|
||||
INSERT INTO users (nama, username, password, role, rumah_ibadah_id) VALUES
|
||||
(
|
||||
'Administrator Sistem',
|
||||
'admin',
|
||||
'$2y$10$AIO3pPEflVaouN/G.rvgWeZmSjr0Nnjsd2PTna4lSHEoDTWr9KQpi',
|
||||
'admin',
|
||||
NULL
|
||||
),
|
||||
(
|
||||
'Walikota Pontianak',
|
||||
'walikota',
|
||||
'$2y$10$AIO3pPEflVaouN/G.rvgWeZmSjr0Nnjsd2PTna4lSHEoDTWr9KQpi',
|
||||
'walikota',
|
||||
NULL
|
||||
);
|
||||
INSERT INTO
|
||||
users (nama, username, password, role, rumah_ibadah_id)
|
||||
VALUES
|
||||
(
|
||||
'Administrator Sistem',
|
||||
'admin',
|
||||
'$2y$10$AIO3pPEflVaouN/G.rvgWeZmSjr0Nnjsd2PTna4lSHEoDTWr9KQpi',
|
||||
'admin',
|
||||
NULL
|
||||
),
|
||||
(
|
||||
'Walikota Pontianak',
|
||||
'walikota',
|
||||
'$2y$10$AIO3pPEflVaouN/G.rvgWeZmSjr0Nnjsd2PTna4lSHEoDTWr9KQpi',
|
||||
'walikota',
|
||||
NULL
|
||||
);
|
||||
|
||||
-- ============================================================
|
||||
-- DATA SEED: Keluarga Miskin (5 data)
|
||||
-- Auto-assign rumah_ibadah_id dilakukan oleh aplikasi saat disimpan
|
||||
-- ============================================================
|
||||
INSERT INTO keluarga_miskin (nik, nama_kepala_keluarga, tanggal_lahir, pendidikan, jumlah_anggota, alamat, kecamatan, lat, lng, tingkat_kemiskinan, status_dtks, riwayat_penyakit, rumah_ibadah_id, jarak_ke_ibadah) VALUES
|
||||
(
|
||||
'6171010101010001',
|
||||
'Budi Santoso',
|
||||
'1978-03-15',
|
||||
'SD',
|
||||
4,
|
||||
'Gg. Mawar No. 3, Benua Melayu Darat',
|
||||
'Pontianak Tenggara',
|
||||
-0.0283000, 109.3440000,
|
||||
'Sangat Miskin',
|
||||
'Terdaftar DTKS',
|
||||
'["Stunting","Gizi Buruk"]',
|
||||
1,
|
||||
0.2500
|
||||
),
|
||||
(
|
||||
'6171010101010002',
|
||||
'Siti Rahayu',
|
||||
'1985-07-22',
|
||||
'SMP',
|
||||
6,
|
||||
'Jl. Merdeka Gg. 5 No. 7, Mariana',
|
||||
'Pontianak Kota',
|
||||
-0.0370000, 109.3430000,
|
||||
'Miskin',
|
||||
'Terdaftar DTKS',
|
||||
'["TBC","Hipertensi"]',
|
||||
2,
|
||||
0.1200
|
||||
),
|
||||
(
|
||||
'6171010101010003',
|
||||
'Wayan Dharma',
|
||||
'1972-11-08',
|
||||
'Tidak Sekolah',
|
||||
3,
|
||||
'Gg. Bali No. 2, Bansir Laut',
|
||||
'Pontianak Tenggara',
|
||||
-0.0290000, 109.3410000,
|
||||
'Sangat Miskin',
|
||||
'Belum DTKS',
|
||||
'["Diabetes","Hipertensi","ODGJ"]',
|
||||
1,
|
||||
0.3400
|
||||
),
|
||||
(
|
||||
'6171010101010004',
|
||||
'Ahmad Fauzan',
|
||||
'1990-01-30',
|
||||
'SMA',
|
||||
5,
|
||||
'Jl. Tanjungpura Gg. 12, Parit Tokaya',
|
||||
'Pontianak Selatan',
|
||||
-0.0310000, 109.3350000,
|
||||
'Miskin',
|
||||
'Sedang Diusulkan',
|
||||
'["Stunting"]',
|
||||
NULL,
|
||||
NULL
|
||||
),
|
||||
(
|
||||
'6171010101010005',
|
||||
'Ruslan Effendi',
|
||||
'1968-09-05',
|
||||
'SD',
|
||||
7,
|
||||
'Jl. Sutan Syahrir Gg. Melati, Batu Layang',
|
||||
'Pontianak Utara',
|
||||
-0.0200000, 109.3460000,
|
||||
'Hampir Miskin',
|
||||
'Terdaftar DTKS',
|
||||
'["Jantung","DBD"]',
|
||||
1,
|
||||
0.7800
|
||||
);
|
||||
INSERT INTO
|
||||
keluarga_miskin (
|
||||
nik,
|
||||
nama_kepala_keluarga,
|
||||
tanggal_lahir,
|
||||
pendidikan,
|
||||
jumlah_anggota,
|
||||
alamat,
|
||||
kecamatan,
|
||||
lat,
|
||||
lng,
|
||||
tingkat_kemiskinan,
|
||||
status_dtks,
|
||||
riwayat_penyakit,
|
||||
rumah_ibadah_id,
|
||||
jarak_ke_ibadah
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
'6171010101010001',
|
||||
'Budi Santoso',
|
||||
'1978-03-15',
|
||||
'SD',
|
||||
4,
|
||||
'Gg. Mawar No. 3, Benua Melayu Darat',
|
||||
'Pontianak Tenggara',
|
||||
-0.0283000,
|
||||
109.3440000,
|
||||
'Sangat Miskin',
|
||||
'Terdaftar DTKS',
|
||||
'["Stunting","Gizi Buruk"]',
|
||||
1,
|
||||
0.2500
|
||||
),
|
||||
(
|
||||
'6171010101010002',
|
||||
'Siti Rahayu',
|
||||
'1985-07-22',
|
||||
'SMP',
|
||||
6,
|
||||
'Jl. Merdeka Gg. 5 No. 7, Mariana',
|
||||
'Pontianak Kota',
|
||||
-0.0370000,
|
||||
109.3430000,
|
||||
'Miskin',
|
||||
'Terdaftar DTKS',
|
||||
'["TBC","Hipertensi"]',
|
||||
2,
|
||||
0.1200
|
||||
),
|
||||
(
|
||||
'6171010101010003',
|
||||
'Wayan Dharma',
|
||||
'1972-11-08',
|
||||
'Tidak Sekolah',
|
||||
3,
|
||||
'Gg. Bali No. 2, Bansir Laut',
|
||||
'Pontianak Tenggara',
|
||||
-0.0290000,
|
||||
109.3410000,
|
||||
'Sangat Miskin',
|
||||
'Belum DTKS',
|
||||
'["Diabetes","Hipertensi","ODGJ"]',
|
||||
1,
|
||||
0.3400
|
||||
),
|
||||
(
|
||||
'6171010101010004',
|
||||
'Ahmad Fauzan',
|
||||
'1990-01-30',
|
||||
'SMA',
|
||||
5,
|
||||
'Jl. Tanjungpura Gg. 12, Parit Tokaya',
|
||||
'Pontianak Selatan',
|
||||
-0.0310000,
|
||||
109.3350000,
|
||||
'Miskin',
|
||||
'Sedang Diusulkan',
|
||||
'["Stunting"]',
|
||||
NULL,
|
||||
NULL
|
||||
),
|
||||
(
|
||||
'6171010101010005',
|
||||
'Ruslan Effendi',
|
||||
'1968-09-05',
|
||||
'SD',
|
||||
7,
|
||||
'Jl. Sutan Syahrir Gg. Melati, Batu Layang',
|
||||
'Pontianak Utara',
|
||||
-0.0200000,
|
||||
109.3460000,
|
||||
'Hampir Miskin',
|
||||
'Terdaftar DTKS',
|
||||
'["Jantung","DBD"]',
|
||||
1,
|
||||
0.7800
|
||||
);
|
||||
|
||||
-- ============================================================
|
||||
-- DATA SEED: Laporan Masyarakat (1 contoh)
|
||||
-- ============================================================
|
||||
INSERT INTO laporan_masyarakat (nama_pelapor, no_hp, alamat_terlapor, lat, lng, deskripsi, status) VALUES
|
||||
(
|
||||
'Pak RT 03',
|
||||
'081234567890',
|
||||
'Gg. Flamboyan No. 5, Pontianak Tenggara',
|
||||
-0.0275000, 109.3435000,
|
||||
'Terdapat keluarga dengan 5 anak yang sangat membutuhkan bantuan. Rumah tidak layak huni dan anak-anak putus sekolah.',
|
||||
'Baru'
|
||||
);
|
||||
INSERT INTO
|
||||
laporan_masyarakat (
|
||||
nama_pelapor,
|
||||
no_hp,
|
||||
alamat_terlapor,
|
||||
lat,
|
||||
lng,
|
||||
deskripsi,
|
||||
status
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
'Pak RT 03',
|
||||
'081234567890',
|
||||
'Gg. Flamboyan No. 5, Pontianak Tenggara',
|
||||
-0.0275000,
|
||||
109.3435000,
|
||||
'Terdapat keluarga dengan 5 anak yang sangat membutuhkan bantuan. Rumah tidak layak huni dan anak-anak putus sekolah.',
|
||||
'Baru'
|
||||
);
|
||||
|
||||
-- ============================================================
|
||||
-- DATA SEED: Histori Bantuan (2 contoh)
|
||||
-- ============================================================
|
||||
INSERT INTO histori_bantuan (kk_id, jenis_bantuan, nominal, keterangan, tanggal_penyaluran, sumber_dana, penanggung_jawab) VALUES
|
||||
(1, 'PKH', 3000000, 'Bantuan tahap I tahun 2026', '2026-01-15', 'APBN', 1),
|
||||
(2, 'BPNT/Sembako', 0, '10 kg beras + minyak goreng', '2026-02-20', 'APBN', 1);
|
||||
INSERT INTO
|
||||
histori_bantuan (
|
||||
kk_id,
|
||||
jenis_bantuan,
|
||||
nominal,
|
||||
keterangan,
|
||||
tanggal_penyaluran,
|
||||
sumber_dana,
|
||||
penanggung_jawab
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
1,
|
||||
'PKH',
|
||||
3000000,
|
||||
'Bantuan tahap I tahun 2026',
|
||||
'2026-01-15',
|
||||
'APBN',
|
||||
1
|
||||
),
|
||||
(
|
||||
2,
|
||||
'BPNT/Sembako',
|
||||
0,
|
||||
'10 kg beras + minyak goreng',
|
||||
'2026-02-20',
|
||||
'APBN',
|
||||
1
|
||||
);
|
||||
Reference in New Issue
Block a user