Fitur Acak Data mengganti seluruh data identitas warga di database — termasuk NIK, nama, tanggal lahir, nomor KK, telepon, dan e-mail — dengan nilai sintetis yang realistis, sekaligus mengolah foto-foto dan arsip surat di folder desa/, dan membersihkan semua file yang tidak diperlukan untuk data demo (cache langganan, output Prodeskel, konten stray, dan upload PII yang tidak lagi dirujuk database). Database dan folder desa yang dihasilkan dapat digunakan untuk keperluan demonstrasi, pengembangan, atau analisis tanpa membocorkan data warga yang sesungguhnya.
Setelah proses selesai, sebuah badge DEMO kecil muncul di logo header admin dan sebuah banner di bawah header menampilkan tanggal anonimasi — penanda visual bahwa instalasi ini berisi data sintetis.
Fitur Bersih Folder lihat PANDUAN SANITASI FOLDER DESA, menjalankan ruleset yang sama tetapi memberi kontrol selektif per-file — gunakan jika ingin meninjau dan memilih secara manual file mana saja yang dihapus.
Peringatan: Proses ini tidak dapat dibatalkan. Data yang telah diacak tidak bisa dikembalikan ke nilai aslinya. Selalu lakukan backup sebelum menjalankan fitur ini.
Fitur Acak Data beroperasi pada dua komponen sekaligus:
desa/ — file foto warga, foto pamong, foto artikel, dan foto galeri di desa/upload/.Kedua komponen ini harus berasal dari instalasi yang sama sebelum acak dijalankan. Jika database berasal dari instalasi A dan folder desa/ masih dari instalasi B — misalnya setelah restore database dari backup tetapi folder desa belum di-restore — acak akan memproses file foto yang tidak berkorespondensi dengan data di database. Hasilnya tidak terdefinisi dan kemungkinan besar tidak berguna.
Skenario yang paling berisiko: restore database dari instalasi lain → langsung jalankan acak tanpa merestore folder desa yang sesuai.
Formulir acak meminta konfirmasi eksplisit bahwa database dan folder desa sudah sinkron sebelum tombol Jalankan dapat digunakan.
Hanya super admin (grup Administrator) yang dapat mengakses fitur Acak Data, baik melalui web maupun artisan. Pengguna dengan peran lain tidak akan melihat tab Acak dan akan mendapat respons 403 jika mencoba mengakses URL-nya secara langsung.
Masuk sebagai super admin, lalu buka menu Database di navigasi admin. URL-nya adalah:
https://<domain-desa>/database/
Di bagian atas halaman terdapat beberapa tab: Backup/Restore, Migrasi DB, Acak, dan Bersih Folder. Klik tab Acak.
Tab Acak hanya muncul jika Anda login sebagai super admin.
Sebelum melanjutkan, pastikan keduanya sudah dibackup:
.sql atau .sql.gz.desa/ — gunakan fitur Backup/Restore Folder Desa untuk membuat arsip ZIP folder desa.Simpan kedua file backup di tempat yang aman di luar server.
Formulir memiliki tiga bagian:
Seed adalah kata kunci yang menentukan nilai-nilai sintetis yang akan dihasilkan:
opensid-demoFoto Warga & Perangkat Desa — pilih salah satu:
| Pilihan | Perilaku |
|---|---|
| Abaikan foto | Kolom foto di-set NULL; aplikasi menampilkan avatar default biru (pria) atau merah (wanita) secara otomatis. File fisik di desa/upload/user_pict/ tidak disentuh. |
| Ganti dengan avatar sintetis | File foto asli dihapus dan diganti avatar kartun dari DiceBear API (memerlukan internet). Latar belakang biru untuk pria, pink/peach untuk wanita. Fallback otomatis ke avatar inisial berbasis GD jika tidak ada internet. |
| Kabur wajah & nama pada foto (default) | Foto warga dan pamong yang ada di folder diproses oleh skrip Python: wajah dan lencana nama di seragam dikaburkan secara otomatis. Kolom foto di database tidak diubah — file dimodifikasi di tempat. Memerlukan Python 3 dan pustaka face-recognition terinstal di server. |
Foto Artikel, Galeri & Media — pilih salah satu:
| Pilihan | Perilaku |
|---|---|
| Abaikan | Foto artikel, galeri, dan media di desa/upload/artikel/, desa/upload/galeri/, dan desa/upload/media/ (termasuk sub-folder) tidak disentuh. |
| Ganti dengan foto acak | Foto diambil dari Picsum Photos (memerlukan internet); hasil deterministik per file. Jika tidak ada internet, diisi warna solid berteks "FOTO DEMO". Untuk artikel/galeri, varian kecil_ dan sedang_ juga dibuat; untuk media, hanya file asli yang diganti (tidak ada thumbnail). |
| Tambah tanda air DEMO (default) | Foto asli tetap ada; tanda air diagonal semi-transparan bertuliskan "FOTO DEMO" ditambahkan di atas setiap foto. Untuk artikel/galeri: termasuk varian kecil_ dan sedang_. Untuk media: hanya file asli (tidak ada thumbnail). |
Konfirmasi sinkronisasi — centang kotak konfirmasi yang menyatakan bahwa database dan folder desa yang aktif saat ini berasal dari instalasi yang sama. Tombol Jalankan Acak Data tidak akan memproses form jika kotak ini tidak dicentang.
Sebuah jendela konfirmasi akan muncul. Baca peringatannya dengan seksama, lalu klik Sudah backup, lanjutkan. Untuk membatalkan, klik Belum, kembali.
Proses acak berjalan langsung di server. Lama waktu tergantung pada jumlah data — untuk database dengan 7.000 warga, biasanya selesai dalam 15–60 detik (lebih lama jika mode avatar atau blur dipilih karena ada proses generasi atau manipulasi gambar). Jangan tutup atau muat ulang halaman selama proses berlangsung.
Setelah selesai, halaman akan menampilkan laporan hasil yang mencakup:
| Informasi | Keterangan |
|---|---|
| Waktu proses | Durasi dalam detik |
| Baris diproses | Total baris yang diperbarui di semua tabel |
| Tabel dimodifikasi | Daftar nama tabel yang diubah |
| NIK diganti | Jumlah NIK yang diganti |
| Nomor KK diganti | Jumlah nomor KK yang diganti |
| Nama diganti | Jumlah nama warga yang diganti |
| Nomor telepon diganti | Jumlah nomor telepon yang diganti |
| Avatar digenerate | Jumlah file avatar yang dibuat (hanya muncul jika mode avatar dipilih) |
| Foto dikabur | Jumlah wajah yang dikaburkan (hanya muncul jika mode blur dipilih) |
| Foto artikel diproses | Jumlah file foto artikel yang diproses |
| Foto galeri diproses | Jumlah file foto galeri yang diproses |
| Foto media diproses | Jumlah file foto media yang diproses (hanya muncul jika mode foto bukan abaikan) |
| File usang dihapus | Jumlah file dihapus oleh pembersihan folder (fase 2) — orphan arsip, thumbs, cache, prodeskel, PII uploads, dan stray content |
Setelah halaman hasil tampil, browser secara otomatis mengunduh ulang setiap foto yang diproses di latar belakang (fetch dengan cache: reload). Indikator "Memperbarui cache browser…" akan berubah menjadi hijau saat selesai — setelah itu foto yang diperbarui akan tampil langsung di halaman lain tanpa perlu hard-refresh manual.
Di bawah tabel statistik, ditampilkan juga contoh 5 baris sebelum dan sesudah acak, sehingga Anda dapat memverifikasi bahwa proses berjalan dengan benar.
Jika ada peringatan (misalnya tabel tertentu tidak ditemukan karena perbedaan versi OpenSID, atau pustaka Python untuk blur tidak tersedia), peringatan tersebut akan ditampilkan di bagian bawah.
Gunakan cara ini jika Anda memiliki akses ke terminal server dan ingin mengotomatiskan proses atau menjalankannya tanpa membuka browser.
php artisan opensid:db-acak
Perintah ini menggunakan seed default opensid-demo, mode foto none, dan mode foto artikel none.
php artisan opensid:db-acak --seed=nama-desa-demo --photos=avatar --foto-artikel=watermark
| Opsi | Default | Keterangan |
|---|---|---|
--seed=<nilai> |
opensid-demo |
Seed deterministik; seed yang sama selalu menghasilkan output identik |
--photos=<mode> |
none |
none — hapus kolom foto; avatar — ganti dengan avatar sintetis; blur — kabur wajah & nama (butuh Python) |
--foto-artikel=<mode> |
none |
none — abaikan; watermark — tambah tanda air DEMO; picsum — ganti dengan foto acak dari Picsum. Berlaku untuk artikel, galeri, dan media sekaligus. |
Catatan: Artisan tidak menampilkan konfirmasi sinkronisasi. Pastikan database dan folder desa sudah sinkron secara manual sebelum menjalankan perintah ini.
>_ Mulai proses acak data (seed: opensid-demo, foto: blur, foto-artikel: watermark)…
>_ Selesai dalam 28.4 detik
>_ Baris diproses : 29.426
>_ Tabel dimodifikasi: 21
>_ NIK diganti : 6.967
>_ KK diganti : 2.722
>_ Nama diganti : 6.967
>_ Telepon diganti : 83
>_ Foto dikabur : 142
>_ Foto artikel : 38
>_ Foto galeri : 24
>_ Foto media : 17
# Contoh menggunakan mysqldump
mysqldump -u root -p nama_database > backup-sebelum-acak-$(date +%Y%m%d).sql
| Tabel / Field | Yang diganti |
|---|---|
| NIK warga | 16 digit baru dengan format valid; prefix wilayah asli dipertahankan |
| Nama warga | Nama Indonesia realistis, sesuai jenis kelamin |
| Tanggal lahir | Tahun dipertahankan; bulan dan tanggal diacak |
| Nomor KK | 16 digit baru dengan format valid |
| Nama ayah / ibu | Nama sintetis, konsisten dengan data orang tua jika masih terdaftar |
| NIK ayah / ibu | Dipetakan ke NIK sintetis orang tua yang bersangkutan |
| Nomor telepon | Nomor HP Indonesia yang valid (08xx-xxxxxxxx) |
| Alamat e-mail sintetis | |
| Nama pamong desa | Nama sintetis |
| NIK pamong desa | Dipetakan ke NIK sintetis jika pamong juga terdaftar sebagai warga |
| Foto warga / pamong | Tergantung mode: kolom NULL, avatar baru, atau file dikaburkan di tempat |
| Foto artikel & galeri | Tergantung mode: tidak disentuh, tanda air ditambahkan, atau diganti foto acak; termasuk varian kecil_ dan sedang_ |
Foto media (upload/media/ dan sub-folder) |
Tergantung mode: tidak disentuh, tanda air ditambahkan, atau diganti foto acak; tidak ada thumbnail |
| Data penerima program | NIK, nama, dan alamat diganti |
| Isi surat yang diterbitkan | Diganti dengan [ISI SURAT DIREDAKSI]; file arsip RTF/PDF lama dihapus; placeholder PDF kosong dibuat di desa/arsip/ dengan nama standar surat_{id}.pdf |
| Thumbnail surat lama | File PNG di desa/upload/thumbs/ yang tidak dirujuk DB dihapus; thumbnail baru dibuat untuk setiap baris log_surat |
| Log aktivitas (audit) | Baris terkait warga dan pengguna dihapus |
| Identitas kontak desa | Nama, telepon, dan e-mail kontak diganti dengan nilai demo |
URL di pesan_singkat_wa |
URL mutlak diganti dengan placeholder [link_web] agar berfungsi di semua domain |
| Video anjungan | Kolom anjungan_video dan tampilan_anjungan_video dikosongkan |
| Link menu eksternal internal | Menu bertipe "URL Eksternal" yang mengarah ke halaman internal OpenSID dikonversi ke path relatif |
| Data | Alasan dipertahankan |
|---|---|
| Tahun lahir semua warga | Menjaga distribusi usia agar statistik tetap bermakna |
| Prefix wilayah NIK (6 digit awal) | Menjaga konteks geografis; prefix bukan data pribadi |
| Jenis kelamin, agama, pendidikan, pekerjaan | Data demografis untuk statistik |
| Hubungan keluarga (kepala, istri, anak, dst.) | Struktur rumah tangga dipertahankan |
| RT/RW, dusun, wilayah administratif | Data geografis bukan PII |
| Nama desa, kecamatan, kabupaten, provinsi | Data institusi, bukan perorangan |
| Seluruh kunci utama dan relasi antar-tabel | Integritas referensial database harus terjaga |
Kolom foto di tabel tweb_penduduk dan tweb_desa_pamong di-set menjadi NULL. Aplikasi secara otomatis menampilkan avatar bawaan OpenSID (pria → ikon biru, wanita → ikon merah). File foto fisik di desa/upload/user_pict/ tidak dihapus — jika ingin mendistribusikan folder desa/, hapus secara manual atau gunakan fitur Bersih Folder (folder user_pict/ tidak dipindai secara default, tetapi dapat dihapus secara manual dari server).
Hanya berlaku untuk warga dan perangkat desa yang sebelumnya memiliki foto di database. Yang tidak memiliki foto tetap NULL.
desa/upload/user_pict/ dihapus.micah). Memerlukan akses internet dari server saat proses berjalan.acak-{id}.jpg, 200×200) dan thumbnail (kecil_acak-{id}.jpg, 150×150).foto diperbarui ke nama file avatar baru.Warna latar ditentukan secara deterministik: pria → nuansa biru, wanita → nuansa pink/peach. Jika server tidak dapat menjangkau DiceBear API, sistem jatuh ke avatar inisial berbasis GD secara otomatis.
Foto warga dan pamong yang ada di folder diproses oleh skrip Python bin/blur_user_pict.py:
foto di database tidak berubah.face-recognition terinstal di server.Jika pustaka Python tidak tersedia atau skrip gagal, proses acak tetap berlanjut dan peringatan ditampilkan di halaman hasil.
Mode ini berlaku untuk tiga direktori sekaligus:
desa/upload/artikel/ — foto artikel beritadesa/upload/galeri/ — foto galeridesa/upload/media/ dan semua sub-foldernya — gambar yang diunggah melalui TinyMCE (sisipan artikel, banner, dll.)Perbedaan penting: foto artikel dan galeri memiliki varian thumbnail (kecil_ dan sedang_) yang juga diproses. Foto media adalah file penuh tanpa thumbnail — hanya file asli yang diproses.
Semua foto di ketiga direktori di atas tidak disentuh sama sekali.
Tanda air diagonal semi-transparan bertuliskan "FOTO DEMO" ditambahkan di atas setiap file foto yang ada. Untuk artikel dan galeri: tanda air juga diterapkan ke varian kecil_ dan sedang_. Untuk media: hanya file asli. File dimodifikasi di tempat — nama file dan referensi di database tidak berubah.
Foto diganti dengan gambar acak dari Picsum Photos. Seed diambil dari HMAC nama file, sehingga file yang sama selalu mendapat gambar yang sama di setiap run. Untuk artikel dan galeri: varian kecil_ (300×200) selalu dibuat; sedang_ (480×320) dibuat jika sudah ada sebelumnya. Untuk media: hanya file asli yang diganti (tidak ada thumbnail). Jika server tidak dapat menjangkau Picsum, otomatis menggunakan gambar placeholder warna solid berteks "FOTO DEMO".
Fitur acak juga menangani beberapa nilai yang hardcoded oleh admin desa di pengaturan dan navigasi, yang akan mengekspos domain desa asal jika tidak dibersihkan:
setting_aplikasi.pesan_singkat_wa — Jika admin pernah mengganti placeholder [link_web] dengan URL mutlak, acak akan memulihkan placeholder tersebut.
setting_aplikasi.anjungan_video dan tampilan_anjungan_video — Dikosongkan karena berisi URL video spesifik desa.
menu (tipe link 99 — URL Eksternal) — Menu yang disimpan sebagai URL mutlak ke halaman internal OpenSID dikonversi ke path relatif (/lapak, /siteman, dst.) agar berfungsi di domain mana pun.
Untuk sanitasi database dan mode Ganti dengan foto acak (picsum): ya, hasil identik setiap kali — seed yang sama menghasilkan nilai dan gambar yang sama.
Untuk mode Tanda Air DEMO (watermark): tidak idempoten. Setiap run menambah lapisan tanda air baru di atas file yang sudah ada, karena foto dimodifikasi di tempat tanpa menyimpan salinan asli. Menjalankan dua kali akan menghasilkan dua tanda air berlapis.
Solusi: selalu restore folder desa/ dari backup sebelum menjalankan ulang Acak Data dalam mode watermark.
Ya. Semua relasi antar-tabel dipertahankan, termasuk hubungan keluarga, data pamong, dan referensi silang NIK orang tua–anak. OpenSID akan berjalan normal dan menghasilkan statistik yang realistis karena distribusi demografis tidak diubah.
Ya. Fitur ini mencakup 19+ tabel, termasuk buku_tamu, pengaduan, pelapak, dan lainnya. Lihat tabel "Data yang diganti" di atas untuk daftar lengkap.
Mode blur dan watermark memodifikasi file foto di tempat tanpa mengubah nama file. Karena URL foto tidak berubah, browser mungkin masih menampilkan versi lama yang ada di cache-nya.
Halaman hasil acak secara otomatis mengatasi ini dengan mengunduh ulang semua foto yang diproses di latar belakang menggunakan fetch dengan cache: reload. Tunggu indikator "Memperbarui cache browser…" berubah menjadi hijau sebelum membuka halaman lain. Setelah itu, foto yang diperbarui akan tampil secara normal di seluruh aplikasi tanpa hard-refresh.
Acak akan tetap berjalan, tetapi hasilnya mungkin tidak konsisten:
Pastikan selalu merestore database dan folder desa dari sumber yang sama sebelum menjalankan acak.
Restore dari file backup yang dibuat sebelum acak dijalankan — dua backup: database (.sql) dan folder desa (.zip). Fitur Acak Data tidak menyimpan catatan nilai asli di manapun.
Tidak dihapus, tetapi diproses dalam tiga fase:
Fase 1 — Sanitasi database: isi surat diganti [ISI SURAT DIREDAKSI], kolom nama_surat diubah ke format surat_{id}.pdf (atau surat_dinas_{id}.pdf), nama pamong dianonimkan, NIK non-warga diremapping. Kolom berkas_scan di surat_masuk dan surat_keluar dikosongkan.
Fase 2 — Bersih folder (ruleset lengkap): menjalankan ruleset yang sama dengan fitur Bersih Folder Desa — semua file yang tidak diperlukan untuk data demo dihapus sekaligus:
desa/arsip/ — file RTF/PDF lama dengan NIK di nama file, dan file scan yang di-null dari fase 1desa/upload/thumbs/ — thumbnail PNG yang tidak lagi cocok dengan log_suratdesa/cache/status_langganan — JWT token dan domain instalasi asaldesa/prodeskel/ — semua file output Prodeskel (dapat di-generate ulang)desa/ root (contoh: desa/data_lama/) dan file loose yang tidak dikenaldokumen/, pendaftaran/, buku_tamu/, vaksin/, pengaduan/, pengesahan/Total file yang dihapus ditampilkan di halaman hasil sebagai "File usang dihapus".
Fase 3 — Buat placeholder: file PDF kosong berjudul [ISI SURAT DIREDAKSI] dibuat untuk setiap baris log_surat dan log_surat_dinas. Thumbnail PNG baru dibuat di desa/upload/thumbs/.
Setelah proses selesai, desa/arsip/ hanya berisi placeholder PDF anonimnya, bukan arsip RTF NIK-bearing yang asli. Metadata surat (tanggal, jenis, nama pamong) tetap ada namun sudah dianonimkan.
Acak Data menangani semua pembersihan yang diperlukan dalam satu jalankan:
Setelah Acak Data selesai, folder desa/ sudah siap untuk didistribusikan: tidak ada lagi file NIK-bearing, cache instalasi, output Prodeskel, konten stray, atau upload PII tanpa baris DB.
Fitur Bersih Folder (tab keempat di halaman Database, atau php artisan opensid:bersih-folder) tetap tersedia jika ingin meninjau dan memilih file secara selektif — misalnya untuk mempertahankan folder tertentu atau memverifikasi hasil pembersihan Acak. Lihat PANDUAN SANITASI FOLDER DESA, untuk dokumentasi lengkap.