Ini adalah aplikasi PPDB yang paling mudah dipakai
dan paling fleksibel, tapi tangguh. Siapa pun anda, pasti bisa memasang dan menggunakannya.
Cocok dipakai untuk SMP/SMA/SMK mana pun.
A. Latar Belakang
Aplikasi ini berangkat dari pemikiran: Bagaimana menciptakan sistem dan aplikasi PPDB yang:
Setiap sekolah (satuan pendidikan) boleh membuat dan mengembangkan aplikasinya
sendiri-sendiri, yang disimpan di web servernya sendiri (misalkan di website sekolah).
Ada keuntungan dari cara ini, yaitu beban prosesor dan bandwidth terdistribusi ke
masing-masing server sekolah, sehingga tidak diperlukan server khusus yang mahal (seperti
kebutuhan sistem PPDB dengan aplikasi terpusat).
Masing-masing sekolah cukup menyewa web hosting berbiaya murah.
Arsitekturnya mirip aplikasi UNBK, yaitu aplikasi ada di sekolah masing-masing, tapi aplikasi
di sekolah tetap terhubung dengan server pusat (untuk mendapat token, upload /
mengunggah jawaban siswa, dan sebagainya).
Walau pun tiap sekolah (satuan pendidikan) boleh membuat dan mengembangkan aplikasinya
sendiri-sendiri, tapi masing-masing sekolah dapat saling bertukar informasi tentang calon
peserta didik yang mendaftar di sekolahnya, sehingga bisa mencegah usaha pendaftaran
ganda, yaitu satu Calon Peserta Didik mendaftar di berbagai sekolah sekaligus.
INTINYA:
Calon Peserta Didik datang ke sekolah, menemui Operator PPDB.
Operator PPDB mengetik NIK Calon Peserta Didik.
Bila Calon Peserta Didik belum mendaftar di SMK lain, atau baru mendaftar
di satu SMA lain, maka pendaftaran diterima.
(Optional) Calon Peserta Didik diberi password
untuk login ke aplikasi ini.
Alur selanjutnya sila sesuaikan dengan alur PPDB di sekolah masing-masing.
Boleh memakai aplikasi PPDB buatan sendiri, boleh memakai Google Form, boleh juga tetap
memakai aplikasi PPDB ini.
Sekolah yang belum mampu membuat aplikasi PPDB sendiri, boleh memakai aplikasi buatan
saya ini hanya untuk mencegah pendaftar ganda, kemudian dilanjutkan dengan alur PPDB
di sekolah masing-masing misalkan memakai Google Form, atau diketik manual di Excel. Bebas!
Boleh juga terus lanjut memakai aplikasi ini. Bila tetap memakai aplikasi ini, maka
Calon Peserta Didik diminta mengetik nilai rapor semester 1 sampai 5, dan menentukan
koordinat rumahnya (untuk SMA jalur zonasi).
Sekolah yang mampu membuat aplikasi PPDB sendiri, boleh terus memakai aplikasi
buatannya, dengan menambahkan beberapa baris kode PHP untuk berkoordinasi dengan Server Master /
Server API agar tidak terjadi pendaftar ganda. Selanjutnya, sila gunakan aplikasi buatan sekolah
masing-masing sesuai alur PPDB yang diterapkan di sekolahnya.
Sistem PPDB di atas sangat cocok digunakan oleh wilayah yang ingin menghemat biaya
penyelenggaraan PPDB, sekaligus memberdayakan para programmer komputer di sekolah masing-masing
untuk berkreasi membuat aplikasi PPDB sebagus dan secanggih mungkin untuk sekolahnya sendiri.
B. Penerapan
Dari pemikiran di atas, maka saya membuat 2 aplikasi, yaitu aplikasi yang dipasang di web server
sekolah masing-masing, dan satu aplikasi yang dipasang di satu server khusus. Server
ini bertindak sebagai Server Master / Server API yang mencatat NIK Calon Peserta Didik di
seluruh sekolah yang bergabung dengan sistem ini.
1. Aplikasi di web server sekolah-sekolah.
Anda saat ini sedang memakai aplikasi pertama, yaitu yang dipasang di setiap web server sekolah.
Aplikasi ini dibuat berfokus pada syarat:
Biaya penyelenggaraan harus bisa ditekan semurah mungkin. Sekolah tidak perlu
menyediakan printer, tinta / toner printer, dan kertas. Bahkan aplikasi ini bisa dioperasikan oleh
panitia PPDB hanya dengan pulpen dan ponselnya. Boleh ditambah stempel agar lebih resmi.
Menghindari kerumuman massa di lingkungan sekolah. Tanpa printer bisa mempercepat proses
pendaftaran yang berarti mengurangi antrian panjang pada sekolah-sekolah favorit. Bila perlu,
seluruh panitia PPDB dikerahkan untuk mengentry data. Hanya bermodal pulpen dan ponsel.
Yang diketik pun minimal NIK, kemudian yang ditulis hanya nomor pendaftaran, password, dan
tanda tangan. Setelah itu Calon Peserta Didik pulang untuk mengetik nilai dari rumah masing-masing.
Harus bisa dipasang dan kuat dijalankan di web hosting sekolah dengan spec rendah.
Tanpa PHP Framework. Hanya dibutuhkan web server (Apache, Nginx, Litespeed), database
(MySQL, MariaDB, PostgreSQL), dan PHP (disarankan versi 7.x atau 8.x).
Harus mudah dipasang oleh siapa pun, bahkan oleh guru non-komputer yang hanya paham
cara memakai cPanel / Plesk yang disediakan penyedia web hosting.
Cukup copy-kan file-file aplikasi PPDB ini ke web server dan
tentukan databasenya. Selesai. Semudah itu!
Konfigurasi ditentukan di file config.php. Admin sekolah hanya perlu menyentuh file itu.
Bila tidak ada perubahan informasi ke masyarakat, file index.php tidak perlu diubah.
Selain 2 file di atas, tidak ada yang perlu diubah.
Untuk memperkecil beban web server, maka file-file PDF (misalkan tanda bukti Serah Terima
Berkas, dan Pengumuman Kelulusan) tidak dihasilkan oleh PHP yang pastinya membebani server,
tetapi dihasilkan dari Mailmerge Microsoft Word secara luring yang kemudian diprint
(save as) menjadi file PDF.
File-file PDF ini kemudian diunggah ke web server. Ketika Calon Peserta Didik mencoba
mengunduh, yang bekerja hanya Apache atau Nginx. Nyaris tidak diperlukan PHP dan akses ke
database.
Saya telah menyediakan file-file Microsoft Word tersebut yang dilengkapi dengan macro VBA
agar proses menjadi lebih mudah. File-file yang telah disediakan adalah:
Formulir Serah Terima Berkas.
Formulir Pendaftaran.
Pengumuman Diterima atau Tidak Diterima.
Mudah diperbarui (diupdate). Cukup copykan file terbaru ke web server. Bisa juga dengan
memakai perintah git pull bila diunduh dari Github.
Walau pun minimalis dan sederhana, tapi security harus maksimal.
2. Aplikasi server (data terpusat)
Selain aplikasi PPDB yang sedang anda lihat ini, saya juga membuat satu aplikasi yang dipasang
di server lain. Sebut saja ini sebagai Server Master atau Server API.
Masing-masing aplikasi PPDB di web sekolah, berkomunikasi dengan Server Master / Server API.
Tujuannya untuk mencegah Calon Peserta Didik mendaftar di lebih dari satu sekolah. Karena posisi
Server Master / Server API berada "di belakang" aplikasi PPDB tiap sekolah, maka masyarakat
tidak bisa mengakses langsung. Beban Server Master / Server API pun berkurang.
Server Master / Server API bisa diletakkan di servernya MKKS, KCD, Kominfo, atau di server
pribadi. Tidak diperlukan server dengan spesifikasi garang. Server biasa pun cukup.
Tidak usah khawatir dengan bandwidth. Komunikasi dari web PPDB sekolah dengan Server Master /
Server API hanya terjadi ketika Calon Peserta Didik mendaftar dan ketika mencabut berkas.
Data yang dikirim pun hanya NPSN, NIK, nama siswa, dan operator. Sangat kecil. Operasi lainnya
tidak perlu komunikasi dengan Server Master / Server API, misalkan operasi login / logout,
mengetik nilai rapor, mengunduh berkas, dan sebagainya.
Perhitungannya begini.
Misalkan di kota Tangerang ada 15 SMA Negeri dan 9 SMK Negeri. Total 24 sekolah.
Tiap sekolah menugaskan 10 guru untuk menjadi operator PPDB.
Bila proses pendaftaran satu orang Calon Peserta Didik membutuhkan waktu 15 detik, maka
dalam 15 detik hanya terjadi maksimal 240 query. Ini sangat jauh lebih ringan dari pada
aplikasi CBT / LMS yang diakses ribuan siswa. Artinya, bila suatu server kuat dijadikan server
CBT / LMS, maka pasti juga kuat dijadikan Server Master / Server API.
Lain halnya bila Server Master / Server API diakses langsung oleh Calon Peserta Didik, misalkan
seperti aplikasi PPDB terpusat. Bila satu sekolah diminati oleh 1000 Calon Peserta Didik,
maka dalam 15 detik bisa terjadi 24.000 query. Itu baru satu kota. Bagaimana bila 1 provinsi?
Itu sebabnya mengapa sering terjadi server PPDB terpusat yang akhirnya "down"
karena tidak kuat diakses oleh puluhan ribuan orang.
Singkatnya, sistem ini memecah 24.000 query menjadi 1.000 query ke masing-masing web PPDB sekolah.
Bila satu web PPDB sekolah down, maka hanya sekolah itu yang down. Sekolah lain tidak.
Server Master / Server API malah lebih santai. Tidak diakses ribuan peserta didik, tapi hanya
diakses oleh operator PPDB sekolah.
Dokumentasi cara mengakses Server Master / Server API bisa dipelajari di
tes.web.id
C. Alur PPDB
Calon Peserta Didik mengunduh file formulir.pdf,
di-print di kertas ukuran F4, dan diisi sejak dari rumah.
Calon Peserta Didik datang ke sekolah yang dituju.
Panitia PPDB memeriksa kelengkapan berkas yang dibawa Calon Peserta Didik.
Panitia PPDB mengetik NIK Calon Peserta Didik di aplikasi PPDB.
Aplikasi PPDB sekolah berkomunikasi dengan Server Master / Server API.
Bila Calon Peserta Didik belum mendaftar di sekolah mana pun, maka Muncul
Nomor Pendaftaran dan Password untuk Calon Peserta Didik.
Dengan menggunakan pulpen, Operator menulis Nomor Pendaftaran dan Password di lembar
Tanda Terima Berkas dan Formulir Pendaftaran.
Calon Peserta Didik boleh pulang.
Di rumah, Calon Peserta Didik login ke aplikasi web PPDB sekolah, menggunakan NIK dan
Password yang ditulis oleh Panitia PPDB.
Calon Peserta Didik mengisi Biodata dan Nilai Rapor.
Panitia PPDB dapat mencocokkan ketikan Calon Peserta Didik dengan hardcopy yang dibawa
ketika pendaftaran. Bila tidak ada data yang salah, panitia PPDB dapat mengunci sehingga
Calon Peserta Didik tidak bisa mengubah.
Ketika waktu Pendaftaran Selesai (menjelang Tes Khusus), Admin mengunduh nilai rapor yang
diketik oleh para Calon Peserta Didik.
Nilai rapor dan nilai Tes Khusus diolah.
Admin membuat file Excel sebagai Data Source untuk Mail Merge Microsoft Word.
Dengan memakai Microsoft Word, Admin membuat file-file PDF tentang status Calon
Peserta Didik apakah diterima atau tidak diterima. Satu Calon Peserta Didik mendapat
satu file. Tidak bisa mengunduh file milik Calon Peserta Didik yang lain.
Ketika jadwal Pengumuman tiba, file-file PDF diunggah ke server web PPDB.
Calon Peserta Didik mengunduh file PDF.
Yang lulus datang ke sekolah untuk Daftar Ulang.
Semua file Microsoft Word telah disediakan. Admin sekolah cukup mengubah kop dan beberapa
kalimat.
D. Fitur-Fitur Aplikasi PPDB di Sisi Sekolah
Bisa diset apakah aplikasi PPDB di web server sekolah harus berkoordinasi dengan Server Master
/ Server API ataukah benar-benar berdiri sendiri (tidak mengecek sekolah lain).
Perlindungan sistem dari SQL injection, serangan Brute Force Attack,
serangan XSS, dan serangan CSRF.
Bisa diset apakah semua Calon Peserta Didik diizinkan mengedit biodata dan nilai rapornya,
ataukah hanya diizinkan membaca saja (read only). Setting ini bisa secara manual,
dan bisa juga secara otomatis dengan timer yang ditentukan sebelumnya.
Seorang operator bisa mengunci seorang Calon Peserta Didik agar dia tidak bisa mengedit
biodata dan nilainya, termasuk operator lain. Bila dikunci, maka operator yang mengunci
itulah yang bisa membuka. Operator lain tidak bisa.
Hasil ketikan Calon Peserta Didik bisa diunduh menjadi file Excel.
Pengumuman diterima atau tidak diterima, berbentuk file PDF yang bisa diunduh oleh
Calon Peserta Didik yang bersangkutan. Tidak bisa mengunduh file milik Calon Peserta Didik lain.
E. Unduhan dan Dukungan
Bapak/ibu guru yang sekolahnya ingin menggunakan aplikasi ini, atau sudah punya aplikasi
sendiri tapi ingin menggunakan layanan Server Master / Server API, bisa mengirim email
ke
dengan isi email seperti ini:
Nama sekolah: [Nama sekolah]
NPSN: [NPSN]
URL aplikasi PPDB: [https://www.namasekolah.sch.id]
Nama admin: [Nama admin]
Catatan 10 Juni 2022:
Mulai tanggal 10 Juni 2022, Source Code aplikasi ini tidak diberikan secara bebas.
Bila bapak/ibu ingin memakai aplikasi ini, saya menyediakan server yang telah
terpasang aplikasi ini.
Sekolah bapak/ibu bisa langsung pakai.
F. Penyangkalan (Disclaimer)
Anda boleh memakai aplikasi ini, tapi tidak boleh dipakai untuk tujuan
komersil. Teks hak cipta tidak boleh dihapus. Dengan memakai aplikasi ini,
anda dianggap menyetujui semua ketentuan dan saya (Mawan) tidak bertanggung
jawab terhadap kerugian berbentuk apapun yang diakibatkan oleh penggunaan
aplikasi ini.
G. Donasi
Proses pembuatan aplikasi Native PHP sangat menyita waktu dan menguras energi.
Bila anda mendapat manfaat dari aplikasi ini, dukungan donasi
akan sangat berguna bagi perbaikan aplikasi ini dan pengembangan aplikasi lain di masa depan.
Kirimkan donasi anda ke:
Mawan Agus Nugroho Bank BCA: 868-0164-348
Dimohon mengabari saya bila telah mentransfer, berikut nama sekolahnya. Terima kasih.
H. FAQs (Pertanyaan Yang Sering Diajukan)
Saya tertarik memakai aplikasi ini. Apa yang harus saya lakukan?
Jawab:
Dapatkan source code aplikasi ini. Upload ke web server sekolah, misalnya
di web hosting idCloudHost,
RumahWeb, dan sebagainya. Pilih paket web hosting yang
sekiranya cukup mampu diakses oleh para Calon Peserta Didik.
Buat database.
Edit file config.php. Di situ ada konfigurasi nama database, username database,
dan password database. Tentukan juga username dan password awal untuk para operator.
Selain itu, yang harus diisi adalah NPSN dan API Key agar bisa berkomunikasi dengan
Server Master / Server API.
Edit file index.php. Tuliskan konten statis misalnya alur PPDB di sekolah
masing-masing.
Jalankan peramban (web browser). Proses pembuatan tabel database dan insert
data operator dilakukan otomatis dari background. Tidak perlu menu Setup.
Selesai. Semudah itu!
Sila pakai PHP versi 5.6, 7.x atau 8.x. Bebas!
Saya sengaja membuat aplikasi ini menggunakan Native PHP salah satu
tujuannya untuk memudahkan proses instalasi. Bila memakai framework Code Igniter
atau Laravel maka admin sekolah harus menginstall Composer, memahami fungsi tiap folder,
cara mengedit file .env, cara mengubah rute dari folder public_html ke folder public milik Laravel,
dan sebagainya.
Sekolah kami sudah punya aplikasi sendiri, dengan alur PPDB yang berbeda. Kami hanya ingin
memastikan bahwa Calon Peserta Didik tidak terdaftar di sekolah lain. Apakah bisa?
Jawab: Sangat bisa.
Tambahkan beberapa kode PHP di bagian mendaftarkan siswa. Kode ini untuk mengecek NIK Calon
Peserta Didik ke Server Master / Server API. Dokumentasi tentang ini bisa dibaca di:
https://www.tes.web.id/dokumentasi.php
Setelah itu, sila lanjutkan alur aplikasi anda dan alur PPDB sekolah anda.
Saya tidak mau aplikasi ini berkoordinasi dengan Server Master / Server API.
Bagaimana caranya?
Jawab: Edit file config.php. Kosongkan setting $API url,id, dan key.
Harus dipahami bahwa cara ini membuat aplikasi PPDB anda menjadi stand alone dan
tidak bisa mencegah pendaftar ganda di beberapa sekolah.
Apakah aplikasi ini bisa mencetak Bukti Pendaftaran?
Jawab: Aplikasi ini dirancang agar dapat pula digunakan pada kondisi darurat dan butuh waktu
serba cepat. Saya telah menyediakan formulir.pdf
yang harus diunduh oleh Calon Peserta Didik, di-print, kemudian diisi sejak dari rumah.
Sesampai di sekolah, Panitia PPDB hanya perlu mengetik NIK di aplikasi ini, kemudian menulis
password di lembar yang telah dibawa oleh Calon Peserta Didik. Lembar Bukti Pendaftaran ditandatangani
Panitia PPDB dan distempel kemudian dikembalikan ke Calon Peserta Didik.
Formulir Pendaftaran disimpan oleh sekolah. Calon Peserta Didik
kemudian pulang. Proses Pendaftaran sangat cepat. Diharapkan tidak akan terjadi antrian yang
mengular. Printer adalah salah satu faktor yang cukup menyita waktu, misalkan ketika laptop
gagal terhubung ke printer, tinta habis, kertas habis, atau listrik padam. Dengan system yang
saya rancang ini, PPDB bisa tetap berjalan hanya dengan HP.
Jadi jawaban pertanyaan di atas adalah: Tidak ada print-out berbentuk apa pun yang dihasilkan oleh
aplikasi ini.
Bagaimana cara menambah operator?
Jawab: Edit file config.php. Tambahkan username operator dan password awal. Setelah itu minta
operator tersebut login kemudian mengganti password. Tepat setelah seorang operator berhasil
login, maka data username dan password disimpan di tabel tb_operator sehingga datanya di
config.php boleh dihapus. Dibiarkan juga tidak apa-apa, bila si operator telah mengganti
password.
Bagaimana cara menghapus operator?
Jawab: Edit file config.php kemudian hapus data operator tersebut.
Bila operator tersebut pernah login, buka tabel tb_operator menggunakan PHPMyAdmin
kemudian hapus recordnya.
Setelah dipakai uji coba, saya ingin mereset database dari awal untuk dipakai pada
kegiatan PPDB yang sesungguhnya. Apa yang harus dilakukan?
Jawab: Buka PHPMyAdmin. Hapus seluruh tabel.
Cuma itu. Nanti aplikasi yang akan membuat tabel bila belum ada.
Adakah cara lain mengunduh nilai rata-rata rapor yang diketik Calon Peserta Didik?
Jawab: Unduh tabel tb_siswa menggunakan PHPMyAdmin. Di tabel itu telah ada perhitungan
akhir nilai rata-rata rapor.
Setiap kali Calon Peserta Didik mengetik nilai rapor kemudian menyimpan, maka aplikasi otomatis
menghitung nilai rata-rata persemester dan nilai rata-rata 5 semester. Hasil perhitungan
disimpan di tabel tb_siswa.
Seorang operator tidak sengaja mengedit Biodata atau Nilai Rapor Calon Peserta Didik,
sehingga record-nya terkunci. Bagaimana cara membuka kuncian ini?
Jawab: Lakukan Cabut Berkas, kemudian Daftarkan lagi. Kabari password terbaru ke Calon
Peserta Didik.
Cara lain adalah jalankan PHPMyAdmin kemudian buka tabel tb_siswa. Pada kolom dikunci_oleh
ubah menjadi null.
Bagaimana cara mengumumkan hasil PPDB?
Jawab: Buat file PDF dengan format nama file: [NIK]-[Judul Dokumen]-[angka/string random].pdf.
Contoh nama file: 1234567890123456-Hasil Zonasi-QwErTy.pdf di mana 16 angka pertama dari nama file
adalah NIK Calon Peserta Didik. String berikutnya adalah Judul Dokumen, dan terakhir adalah
string random agar sulit ditebak orang yang ingin mengunduh file pengumuman milik Calon Peserta
Didik lain.
Satu file PDF untuk satu Calon Peserta Didik. Artinya, bila ada 1000 Calon Peserta Didik yang
mendaftar, maka harus dibuat pula 1000 file PDF. Tapi jangan khawatir, saya telah membuatkan satu
file Mailmerge Microsoft Word yang dilengkapi dengan VBA. Sila edit file Microsoft Word.
Tambahkan kop sekolah dan sebagainya, setelah itu jalankan macro VBA yang akan membuat file PDF
secara otomatis.
Unggah file-file itu ke folder pengumuman. Tautan (link) untuk mengunduh file otomatis
akan aktif bila aplikasi melihat ada file untuk Calon Peserta Didik yang sedang login.
Pastikan di folder pengumuman ada file index.html kosong. Fungsinya untuk mencegah orang
mem-browse (melihat daftar nama-nama file) yang ada di folder tersebut.
Bagaimana Security pada aplikasi ini? Apakah aman?
Jawab: Di balik aplikasi web yang tampilannya sederhana, sesungguhnya telah disematkan berbagai
macam fitur untuk mempersulit para peretas (hacker) berbuat jahat. Beberapa di antaranya adalah:
Password disimpan dalam bentuk password_hash. Misalkan bila password anda adalah "Rahasia",
maka tulisan "Rahasia" ini tidak akan disimpan di database. Yang disimpan hanya hash-nya
(semacam perhitungan matematis yang rumit). Sederhananya: Password "AB" hash-nya adalah A (1) +
B (2) = 3. Bila peretas melihat angka 3, dia tidak tahu angka 3 ini dari mana? Mungkin
dari AAA atau AB atau BA. Tapi tentu saja hashing cara ini sangat lemah. Saya menggunakan
algoritma lain yaitu algoritma bcrypt yang mampu mencegah rainbow tables and
dictionary attacks.
Percobaan login yang gagal sebanyak 3 kali, akan membuat IP address-nya diblok selama
15 menit.
Satu akun hanya bisa dipakai oleh satu perangkat. Bila ada perangkat baru yang login,
maka perangkat lama otomatis logout.
String difilder dengan htmlentities untuk mencegah serangan XSS (Cross Site Scripting).
Akses ke database memakai PDO, sehingga aman dari serangan SQL Injection.
Form dilengkapi dengan token untuk melindungi form dari serangan CSRF
(Cross Site Request Forgery).
Dan lain sebagainya.
Tentu saja tindakan pencegahan di sisi aplikasi harus juga diiringi dengan tindakan pencegahan
di sisi admin misalkan password cPanel jangan terlalu mudah ditebak. Untuk yang memakai server
sendiri, ganti port SSH dan jangan izinkan login ke Sistem Operasi memakai plain text. Harus
login memakai pasangan Private Key dan Public Key.
Bolehkah source code aplikasi ini dipakai untuk Skripsi saya?
Jawab: Tidak boleh! Saya akan melaporkan ke perguruan tingginya dengan laporan plagiatisme.
Mungkin juga akan dibawa ke ranah hukum.