171 lines
10 KiB
Markdown
171 lines
10 KiB
Markdown
# WebGIS Poverty Mapping
|
|
|
|
Aplikasi utama Tugas Besar SIG untuk pemetaan warga miskin, rumah ibadah, kebutuhan bantuan, status bantuan, dan blank spot layanan berbasis Leaflet, PHP, dan MySQL/MariaDB.
|
|
|
|
Status audit terakhir: 2026-06-03. Kode aktif sudah memakai validasi koordinat bersama, CSRF untuk mutasi terautentikasi, session cookie hardening, scope operator, masking data publik, verifikasi warga sebelum workflow bantuan/kebutuhan, dan kebijakan import admin langsung `Terverifikasi`.
|
|
|
|
Catatan submit: project final ini sekarang dijalankan lewat Docker Compose dari root repository `webgis/`. Runtime utama memakai PHP 8.2 Apache dan MariaDB 11.4; database `db_webgis` otomatis dibuat dari `setup_database.sql` saat volume MariaDB masih kosong. SQL setup menggunakan syntax MariaDB-friendly seperti `ADD COLUMN IF NOT EXISTS`.
|
|
|
|
## Stack
|
|
|
|
- PHP procedural dengan MySQLi
|
|
- MySQL/MariaDB
|
|
- Leaflet untuk peta interaktif
|
|
- Chart.js untuk statistik
|
|
- Vanilla JavaScript modules
|
|
- Docker Compose sebagai runtime utama
|
|
- XAMPP/Laragon/WAMP hanya sebagai opsi legacy lokal
|
|
|
|
## Struktur Utama
|
|
|
|
```text
|
|
WebgisPovertyMapping/
|
|
├── index.php # Shell peta utama
|
|
├── dashboard.php # Dashboard administrator
|
|
├── config.php # Konfigurasi app, session, dan database
|
|
├── koneksi.php # Koneksi DB + Haversine/proximity helper
|
|
├── setup_database.sql # Schema database dan seed admin
|
|
├── auth/ # Login, change password, session/RBAC helper
|
|
├── api/ # Endpoint JSON/CSV/HTML per domain
|
|
├── pages/ # Halaman admin/operator
|
|
├── modules/ # JavaScript map modules
|
|
├── css/ # CSS admin
|
|
├── tests/ # Test PHP ad-hoc
|
|
└── docs/ # Dokumentasi audit, deployment, dan superpowers plans/specs
|
|
```
|
|
|
|
## Setup Lokal Dengan Docker
|
|
|
|
Jalankan dari root repository `webgis/`, bukan dari folder `WebgisPovertyMapping/`:
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
docker compose -f docker-compose.yml -f docker-compose.local.yml up --build -d
|
|
```
|
|
|
|
Akses aplikasi:
|
|
|
|
```text
|
|
http://localhost:8080/WebgisPovertyMapping/
|
|
```
|
|
|
|
Tambahkan `APP_PORT=8081` di file `.env` root jika port `8080` sudah dipakai. Database akan otomatis diinisialisasi oleh container MariaDB dari `WebgisPovertyMapping/setup_database.sql`.
|
|
|
|
Untuk reset database Docker dari awal:
|
|
|
|
```bash
|
|
docker compose -f docker-compose.yml -f docker-compose.local.yml down -v
|
|
docker compose -f docker-compose.yml -f docker-compose.local.yml up --build -d
|
|
```
|
|
|
|
XAMPP tidak lagi menjadi jalur utama. Dokumentasi XAMPP tetap ada sebagai referensi legacy di `docs/deployment-xampp.md`.
|
|
|
|
## Akun Default
|
|
|
|
Default akun demo untuk penilaian:
|
|
|
|
```text
|
|
Administrator: admin / password
|
|
Operator : operator / password
|
|
Viewer : viewer / password
|
|
```
|
|
|
|
Untuk demo penilaian, akun tersebut tidak dipaksa mengganti password saat login pertama.
|
|
|
|
## Role
|
|
|
|
- `viewer`: akses publik/read-only, data sensitif penduduk dimasking.
|
|
- `operator`: tambah/mengelola warga dan kebutuhan dalam rumah ibadah yang ditugaskan.
|
|
- `administrator`: kelola semua data, rumah ibadah, pengguna, import/export, verifikasi, dan recalculation.
|
|
|
|
Publik tanpa login tetap bisa membuka peta sebagai `viewer` read-only. Dashboard admin tidak menawarkan pembuatan akun `viewer` baru karena akses publik tidak membutuhkan akun; role tersebut dipertahankan sebagai fallback RBAC dan kompatibilitas akun lama.
|
|
|
|
Operator harus dikaitkan ke satu `rumah_ibadah` melalui halaman manajemen user.
|
|
|
|
Model ownership warga saat ini adalah `proximity-only`: `penduduk_miskin.ibadah_id` dihitung dari radius rumah ibadah terdekat dan menjadi dasar scope operator. Jika posisi/radius rumah ibadah berubah, admin dapat menjalankan hitung ulang proximity dan assignment warga bisa berubah mengikuti hasil spasial terbaru.
|
|
|
|
## Fitur Utama
|
|
|
|
- Peta interaktif Pontianak berbasis Leaflet.
|
|
- Layer rumah ibadah dengan radius layanan.
|
|
- Layer penduduk miskin dengan proximity dan blank spot.
|
|
- Status bantuan dan riwayat perubahan.
|
|
- Kebutuhan bantuan per warga dan papan kebutuhan publik.
|
|
- Dashboard statistik dan heatmap untuk operator/admin.
|
|
- Import CSV dan export laporan.
|
|
- RBAC berbasis session.
|
|
- Proteksi data publik: hanya warga `Terverifikasi` yang tampil, PII dimasking, dan koordinat rumah warga tidak dikirim untuk pengunjung publik.
|
|
- Workflow bantuan/kebutuhan hanya aktif untuk warga `Terverifikasi`.
|
|
|
|
## Dokumentasi Teknis
|
|
|
|
- `docs/codebase-navigation.md`: navigasi struktur repo, schema, endpoint, modul frontend, proximity, dan RBAC.
|
|
- `docs/codebase-audit-report.md`: laporan proses bisnis, wiring backend/frontend, data lifecycle, catatan logika, prioritas fix, dan saran pengembangan.
|
|
- `docs/business-process-sop.md`: SOP proses bisnis aktif untuk admin, operator, publik, dan donatur.
|
|
- `docs/deployment-docker.md`: panduan deployment Docker/Coolify, reverse proxy, database container, dan troubleshooting.
|
|
- `docs/deployment-xampp.md`: referensi legacy jika harus menjalankan aplikasi tanpa Docker.
|
|
- `docs/audit-fix-task-plan.md`: task plan audit/hardening lintas fase.
|
|
- `docs/superpowers/README.md`: indeks dokumen superpowers aktif.
|
|
- `docs/superpowers/plans/2026-06-03-codebase-audit-refresh.md`: ringkasan audit implementasi terbaru.
|
|
- `Tugas/` dan `DESIGN.md` adalah artifact lama/pendukung; gunakan dokumen di atas sebagai referensi implementasi aktif.
|
|
|
|
## Catatan Audit 2026-06-03
|
|
|
|
Yang sudah terlihat terpasang di kode:
|
|
|
|
- Validasi koordinat terpusat di `includes/validation.php` dan bounds wilayah studi di `config.php`.
|
|
- Import CSV admin menyimpan warga sebagai `Terverifikasi` beserta `verified_by` dan `verified_at`.
|
|
- Duplikasi NIK dicek terhadap semua record, termasuk arsip/inactive, agar validasi PHP sejalan dengan unique index database.
|
|
- Endpoint kebutuhan dan status bantuan menolak warga yang belum `Terverifikasi`.
|
|
- Statistik operator sudah scoped ke rumah ibadah operator.
|
|
- Heatmap publik disembunyikan; heatmap menggunakan dataset internal untuk operator/admin.
|
|
- User management mencegah self-demotion administrator dan operator ke rumah ibadah yang sudah dihapus.
|
|
|
|
Sisa pekerjaan yang masih disarankan:
|
|
|
|
- Rate limit session sederhana sudah aktif untuk form kontak donatur publik; pertimbangkan CAPTCHA atau rate limit IP untuk deploy publik serius.
|
|
- Pertimbangkan model ownership `hybrid` jika tanggung jawab operasional operator harus dipisah dari hasil proximity spasial.
|
|
- Perluas `tests/run_all.php` jika ingin mencakup semua test DB smoke test dalam satu runner.
|
|
- Siapkan mirror lokal untuk CDN/tile provider bila deployment berada di jaringan tertutup.
|
|
|
|
## Test dan Verifikasi Dengan Docker
|
|
|
|
Lint semua file PHP:
|
|
|
|
```bash
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app sh -lc 'find /var/www/html/WebgisPovertyMapping -name "*.php" -print0 | xargs -0 -n1 php -l'
|
|
```
|
|
|
|
Test ad-hoc statis yang aman dijalankan dari root project:
|
|
|
|
```bash
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app php /var/www/html/WebgisPovertyMapping/tests/run_all.php
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app php /var/www/html/WebgisPovertyMapping/tests/test_verifikasi_binding.php
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app php /var/www/html/WebgisPovertyMapping/tests/test_update_posisi_scope.php
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app php /var/www/html/WebgisPovertyMapping/tests/test_operator_scope_endpoints.php
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app php /var/www/html/WebgisPovertyMapping/tests/test_public_verification_filters.php
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app php /var/www/html/WebgisPovertyMapping/tests/test_frontend_module_loader.php
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app php /var/www/html/WebgisPovertyMapping/tests/test_frontend_reliability_guards.php
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app php /var/www/html/WebgisPovertyMapping/tests/test_no_legacy_poi.php
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app php /var/www/html/WebgisPovertyMapping/tests/test_viewer_public_filters.php
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app php /var/www/html/WebgisPovertyMapping/tests/test_operator_scope_strict.php
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app php /var/www/html/WebgisPovertyMapping/tests/test_penduduk_binding_types.php
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app php /var/www/html/WebgisPovertyMapping/tests/test_csrf_enforcement.php
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app php /var/www/html/WebgisPovertyMapping/tests/test_session_cookie_security.php
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app php /var/www/html/WebgisPovertyMapping/tests/test_operator_ibadah_highlight.php
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app php /var/www/html/WebgisPovertyMapping/tests/test_viewer_account_ui_hidden.php
|
|
```
|
|
|
|
Test yang memuat `../config.php` atau `../koneksi.php` perlu dijalankan dari folder `tests`:
|
|
|
|
```bash
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app sh -lc 'cd /var/www/html/WebgisPovertyMapping/tests && php test_auth_helper.php'
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app sh -lc 'cd /var/www/html/WebgisPovertyMapping/tests && php test_db.php'
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app sh -lc 'cd /var/www/html/WebgisPovertyMapping/tests && php test_ibadah.php'
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app sh -lc 'cd /var/www/html/WebgisPovertyMapping/tests && php test_kebutuhan.php'
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app sh -lc 'cd /var/www/html/WebgisPovertyMapping/tests && php test_penduduk.php'
|
|
docker compose -f ../docker-compose.yml -f ../docker-compose.local.yml exec app sh -lc 'cd /var/www/html/WebgisPovertyMapping/tests && php test_proximity.php'
|
|
```
|
|
|
|
Beberapa test membutuhkan container database yang sudah sehat. Jika menjalankan mode XAMPP legacy, sesuaikan command PHP dan port database mengikuti `docs/deployment-xampp.md`.
|