# CBT Sekolah: Aplikasi Ujian Online Berbasis Web
Aplikasi **Computer Based Test** lengkap untuk SD, SMP, SMA, SMK, dan MA. Dibangun dengan **CodeIgniter 4 + PHP 8.2**, desain modern dan responsif, serta bisa dijalankan di **LAN sekolah tanpa internet** maupun di **hosting online**.
🔗 **Live Demo:** https://DEMO-ANDA.com
(data demo otomatis kembali seperti semula setiap 1 jam)
| Peran | Login | Password / PIN |
|---|---|---|
| Admin | `admin` | `Admin#12345` |
| Guru | `guru1` | `Guru#12345` |
| Proktor | `proktor1` | `Proktor#12345` |
| Siswa | NIS `2026001` | PIN `123456` |
---
## ✨ Fitur Utama
### 👨💼 Administrator
- Dashboard dengan **checklist persiapan ujian**
- Master data: sekolah, tahun ajaran, kelas & rombel, mapel, guru (+ pengaturan mengajar), siswa, ruang & sesi
- **Import Excel** siswa & guru, PIN siswa dibuat otomatis
- Jadwal ujian **reguler / susulan / remedial** dengan bobot objektif-esai, KKM, dan batas pelanggaran
- **Token** otomatis berganti, tampilan layar penuh untuk proyektor
- **Plotting otomatis** peserta ke ruang & sesi
- Cetak **kartu peserta PDF** (8 kartu/A4)
- Manajemen akun, **backup & restore 1 klik**, arsip media, **log aktivitas**
### 👩🏫 Guru
- Bank soal **6 jenis**: Pilihan Ganda, PG Kompleks, Benar/Salah, Menjodohkan, Isian Singkat, Esai
- Skor parsial, **rumus KaTeX**, gambar, **audio listening**
- **Teks Arab kanan-ke-kiri** (font Amiri)
- Import soal dari Excel + ZIP gambar, pratinjau tampilan siswa
- **Koreksi esai** per soal / per siswa
### 🕵️ Proktor
- **Monitoring live** (otomatis diperbarui tiap 7 detik)
- Reset login, tambah waktu, kunci/buka, paksa selesai, termasuk aksi massal
- Daftar hadir & berita acara PDF
### 🎓 Siswa
- Login NIS + PIN, **1 akun = 1 perangkat**
- Timer dari server, ragu-ragu, navigasi soal, ukuran huruf, mode gelap
- **Offline-first**: jawaban disimpan di perangkat (IndexedDB) saat koneksi putus, lalu tersinkron otomatis
- Kirim otomatis saat waktu habis
### 📊 Hasil Ujian
- Nilai otomatis, rekap & ranking, **tuntas/remedial**
- Export **Excel & PDF**, rekap per kelas
- **Analisis butir soal**: tingkat kesukaran, daya beda, distribusi opsi
- Hitung ulang nilai bila kunci jawaban diperbaiki
---
## 🔒 Keamanan & Anti Curang
- Deteksi pindah tab / keluar layar penuh, kunci otomatis setelah N pelanggaran
- Urutan soal & opsi diacak per siswa
- **Kunci jawaban tidak pernah dikirim ke browser**
- CodeIgniter Shield, bcrypt, rate limit login, CSRF di semua form & AJAX
- HTMLPurifier (anti-XSS), validasi upload berdasarkan isi file, aman dari zip-slip
- Pembatasan akses per peran & per mapel (anti-IDOR)
## ⚡ Performa
- Uji beban: **72 siswa serentak, 1.080 simpan jawaban, 36 req/detik, 0 error** (laptop, tanpa OPcache)
- Dengan OPcache waktu respons turun **±2,5×** (139 ms → 55 ms)
- Cache jadwal & soal, simpan jawaban batch (upsert), DataTables server-side, semua aset lokal (tanpa CDN)
---
## 📦 Isi Paket
- ✅ Full source code **tanpa enkripsi** (sudah termasuk `vendor/`)
- ✅ **Wizard instalasi** lewat browser (cek server → database → tabel → akun admin)
- ✅ **PANDUAN-INSTALASI.pdf**: XAMPP, LAN sekolah, cPanel, VPS (Nginx), OPcache & tuning
- ✅ **PANDUAN-PENGGUNAAN.pdf**: lengkap dengan screenshot untuk setiap peran
- ✅ Data contoh (seeder) + perintah CLI: `cbt:backup`, `exam:finalize`
## 🛠️ Teknologi
`PHP 8.2` · `CodeIgniter 4.7` · `CodeIgniter Shield` · `MySQL 8 / MariaDB 10.4+` · `Bootstrap 5.3` · `DataTables` · `Select2` · `SweetAlert2` · `Summernote` · `KaTeX` · `PhpSpreadsheet` · `Dompdf`
## 💻 Kebutuhan Server
- PHP 8.2+ (intl, mbstring, mysqli, gd, zip, fileinfo)
- MySQL 8 / MariaDB 10.4+
- XAMPP / Laragon (Windows), cPanel, atau VPS Linux
---
## 📄 Lisensi
- Untuk 1 sekolah / penggunaan sendiri, **bebas dimodifikasi**
- Dilarang menjual ulang atau membagikan source code
## 💬 Dukungan
Bantuan instalasi melalui Instagram **@belajarcodingptk**.
> Dibuat dengan ❤️ oleh **Logika.Lab**