Files
Recruitment-HC/dashboard
dirga 24383d9ed1
Build and publish Docker image / build (push) Successful in 12s
penyesuaian pada Daftar Peserta Psikotest masih ada data yang tidak tampil
2026-10-20 14:35:28 +07:00
..

Dashboard admin recruitment

Akses /dashboard/login.php. Dashboard memakai PHP + mysqli dan CSS responsif tanpa ketergantungan AdminLTE, CDN, Node, atau proses build. Tampilan terinspirasi dashboard modern; aplikasi ini tidak dimigrasikan ke framework Svelte.

Instalasi

  1. Siapkan database MySQL khusus recruitment, lalu impor ekspor tiga tabel in_daper, in_soal, dan in_jawab yang sudah tersedia. Impor hanya pada database baru/kosong; dump dapat berisi perintah DROP TABLE.

  2. Isi includes/conn.php sesuai database tersebut. Admin menggunakan file koneksi yang sama dengan peserta. Dashboard dan peserta selalu memakai file koneksi ini; environment REC_DB_* tidak digunakan.

  3. Dari terminal server, di folder root project, jalankan:

    php dashboard/tools/create-admin.php
    

    Isi nama, email, dan password admin (minimal 12 karakter). Password disembunyikan saat diketik dan disimpan sebagai hash. Perintah otomatis membuat tabel rec_admin menggunakan migrasi dashboard/migrations/001_admin.sql. Akun yang sudah ada tidak ditimpa. Tidak ada akun/password admin bawaan.

  4. Buka /dashboard/login.php, lalu masuk dengan akun yang baru dibuat.

Jika pengelola database hanya dapat membuat tabel melalui phpMyAdmin, jalankan migrasi 001_admin.sql lebih dahulu, kemudian jalankan perintah CLI pembuat akun. PHP memerlukan ekstensi mysqli, dukungan mysqlnd (get_result), dan terminal interaktif untuk pembuatan akun. PHP minimum 7.3; pengujian dilakukan pada PHP 8.3/MySQL 8.0.

Perilaku

  • Daftar peserta: pencarian nama/email/posisi, filter seleksi, pagination 25 data, penambahan peserta, progres empat fase, dan tautan hasil.
  • Tahap seleksi mempertahankan kode lama: 0 calon kandidat, 1 tidak dilanjutkan, 2 tes offline/interview, 3 diterima, 99 demo/arsip. Status ini dipilih admin secara manual.
  • Hasil menampilkan seluruh jawaban dan kunci kategori 1–4. Admin menilai benar (10) atau salah (0). Seluruh jawaban kategori tersebut harus dinilai sebelum finalisasi. Nilai dapat dikoreksi dengan menyimpan ulang.
  • Finalisasi tersedia setelah peserta menyelesaikan empat fase (level >= 4). Data yang kehilangan referensi soal perlu diperbaiki sebelum finalisasi.
  • Kategori 5 (kepribadian): menampilkan pilihan L/R dan jawaban, tanpa skor atau interpretasi otomatis.
  • Ambang skor awal 300, mengikuti halaman daftar lama. Halaman detail lama menggunakan 320; sekarang seluruh halaman admin memakai satu nilai. Ubah environment REC_PASS_SCORE menjadi 320 jika itu kebijakan yang digunakan. Label lulus skor tidak otomatis mengubah keputusan seleksi.
  • Bank soal: pencarian, filter lima kategori, pagination, tambah, edit, duplikat, dan hapus. Soal yang sudah digunakan terkunci dari edit/hapus untuk menjaga hasil historis. Duplikasi membuat soal tambahan yang ikut pengacakan tes; ini bukan penggantian/penonaktifan soal lama.
  • Session admin terpisah dari peserta, kedaluwarsa setelah satu jam tanpa aktivitas. Form mutasi memakai token CSRF; query input memakai prepared statements dan keluaran di-escape.
  • Lima login gagal dalam satu sesi browser menyebabkan jeda lima menit. Untuk produksi, terapkan pembatasan percobaan login tambahan pada web server/reverse proxy.

Penempatan server

Gunakan HTTPS. Jangan menyimpan dump SQL dalam document root produksi; .gitignore mengecualikan dump, dan .htaccess root memblokir akses HTTP ke SQL pada Apache/LiteSpeed yang mengizinkan override. Jika memakai Nginx, terapkan aturan penolakan untuk dump dan folder dashboard/tools/ serta dashboard/migrations/ pada konfigurasi server. PHP development server tidak memproses .htaccess; pakai hanya untuk pengujian lokal.

Validasi yang dilakukan

SQL diimpor ke database MySQL sementara lokal. Login/logout, pembatasan akses, penolakan CSRF, pencarian/filter, detail hasil, tambah peserta sintetis, tambah/edit soal, penguncian soal bersejarah, penolakan nilai tidak valid, finalisasi/koreksi nilai, serta pembaruan tahap diuji melalui HTTP. Seluruh file PHP melewati pemeriksaan sintaks. Tampilan diperiksa di browser pada ukuran desktop dan mobile. Pengujian tidak mengubah database produksi.

Preview lokal yang sudah disiapkan

Jalankan ./dev/start-local.sh dari root project. Dashboard berada di port 8086 dan phpMyAdmin di port 8087; detail, kredensial, backup, dan cara menghentikan layanan ada di dev/README.md. Tabel admin baru menggunakan email, nama_de, nama_be, idkar, dan password_hash selain ID; script pembuat admin menerima identitas tersebut. Migrasi 002_admin_identity.sql menangani tabel admin versi lama tanpa mengganti hash password.