V 2.0 — Production Ready
Report Maintenance System
Sistem manajemen laporan maintenance berbasis web — dibangun ulang dari CodeIgniter 3 ke CodeIgniter 4 dengan arsitektur modern, performa lebih tinggi, dan keamanan yang diperkuat.
Riwayat Versi
V 1.0 Legacy
CodeIgniter 3 · PHP 7.4
- MVC manual tanpa namespace
- Session native CI3 + HMVC-style loader
- Query Builder CI3 (
$this->db->get()) - Auth via
$this->session->userdata() - View:
$this->load->view()— header/footer manual - Pagination: library bawaan CI3
- Upload:
$this->upload->initialize() - Tidak ada Filter/Middleware resmi
- Tidak ada CLI built-in (spark)
- Belum ada ORM modern
⚠️ EOL — tidak ada update keamanan dari EllisLab/BCit
Migrasi penuh · 14 sesi development
V 2.0 Current
CodeIgniter 4.7 · PHP 8.2
- Namespace PSR-4 + Autoloading modern
- Filter/Middleware resmi (AuthFilter, AdminFilter)
- Entity & Model ORM dengan
$returnType = 'array' - Template Engine:
extend()+section() - Pager terpusat dengan template Bootstrap
- CLI:
php sparkuntuk generate, migrate, serve - CSRF protection built-in di setiap form
- ID enkripsi di URL (EncryptHelper)
- WebP auto-convert saat upload foto
- Google Drive Backup via OAuth 2.0
✅ Aktif dipakai — fully migrated & production ready
Perbandingan CI3 vs CI4
| Aspek | CI3 (V1) | CI4 (V2) |
|---|---|---|
| PHP Support | PHP 5.6 – 7.4 | PHP 7.4 – 8.3 ✅ |
| Namespace | Tidak ada — global class | PSR-4 penuh (App\Controllers\...) |
| Autoloader | CI3 custom loader | Composer PSR-4 / built-in CI4 |
| Middleware/Filter | Tidak ada resmi — pakai hook/MY_Controller | Filter resmi (app/Filters/) |
| Routing | Manual di routes.php tanpa group |
Group routes, named routes, RESTful |
| View Engine | $this->load->view('header') manual |
extend() + section() template inheritance |
| Model | MY_Model atau manual query | CodeIgniter Model ORM dengan allowedFields |
| Query Builder | $this->db->get('tabel') |
$this->db->table('tabel')->get() + chaining |
| CSRF | Manual — sering dinonaktifkan | Built-in, wajib di semua POST form |
| Auth | $this->session->userdata('logged_in') |
Filter + session()->get('logged_in') |
| Upload File | $this->upload->initialize([...]) |
$this->request->getFile() + custom helper |
| Pagination | Library CI3 + konfigurasi verbose | Terpusat di BaseController, template Bootstrap |
| CLI Tool | Tidak ada | php spark — generate, migrate, serve, cron |
| Error Handling | CI3 error page sederhana | Exception-based, environment-aware (dev/production) |
| Testing | Tidak ada framework testing resmi | PHPUnit terintegrasi via spark |
| Performance | Baseline CI3 | ~40% lebih cepat (benchmark resmi) |
| Security | EOL — tidak ada patch | Aktif diupdate + OWASP practices |
Fitur Baru di V2.0
ID Enkripsi di URL
Semua ID di URL dienkripsi via
EncryptHelper.
Tidak ada angka mentah seperti /edit/5 — cegah IDOR attack.
Auto WebP Convert
Setiap foto yang diupload otomatis dikonversi ke format WebP via GD Library.
Ukuran file lebih kecil, load halaman lebih cepat.
WhatsApp Bot Integration
Notifikasi otomatis via WA Gateway. Bot dapat menjawab pesan masuk.
Konfigurasi per-user melalui menu WhatsApp Config.
Google Drive Backup
Backup database & file otomatis ke Google Drive via OAuth 2.0.
Jadwal otomatis (cron), retensi configurable, log per backup.
Offline-First Checksheet
Form checksheet bisa diisi saat offline. Data disimpan lokal dan
otomatis di-sync saat koneksi pulih via
checksheet_offline.js.
Export PDF via dompdf
Semua laporan, checksheet, dan PM record dapat diekspor ke PDF
langsung dari browser. dompdf di-bundle di
app/Libraries/.
Activity Log
Setiap aksi penting (login, create, update, delete) tercatat otomatis
di tabel
activity_log lengkap dengan timestamp dan user.
System Settings Terpusat
Konfigurasi sistem (OTP, timeout, notifikasi, backup, GDrive)
dikelola dari satu halaman tanpa perlu edit file kode.
Arsitektur Teknis
Filter (Middleware)
AuthFilter — cek session('logged_in')AdminFilter — cek session('level') == adminAdminFilter independen dari AuthFilter — semua route admin wajib didaftarkan ulang di group admin.
BaseController
paginate() — pagination terpusatuploadFoto() — WebP via GDuploadFile() — validasi + simpanrender() — shorthand view renderlogActivity() / flashSuccess() / flashError()
EncryptHelper
encrypt_id(int $id) → URL-safe stringdecrypt_id(string $enc) → int|falsedecode_id_or_404(string $enc) → int atau abortSemua ID di URL dienkripsi. MasterData & Maintenance pakai ID plain (admin-only).
Model Convention
$returnType = 'array' — semua modelinsert() bukan create()allowedFields wajib sesuai kolom fisik DBWHERE IS NULL: ->where('col IS NULL', null, false)
View Template Engine
Setiap view diawali
Konten dibungkus
Tidak ada
Array syntax:
$this->extend('layouts/main')Konten dibungkus
section('content') / endSection()Tidak ada
load->view() style CI3Array syntax:
$r['id'] bukan $r->id
Pagination
Template:
View:
3 cara:
Group name konsisten antara controller & view
bootstrap_pagination (terdaftar di Config/Pager.php)View:
$pager->links('group', 'bootstrap_pagination')3 cara:
paginate(), makeLinks(), store()Group name konsisten antara controller & view
Modul Sistem
Dashboard
Statistik, grafik, aktivitas terbaru
Report Harian
Laporan harian maintenance per user
Surat Lembur
SPL + approval + export PDF
Kas
Kas masuk/keluar, saldo real-time
Inventaris MID
Daftar dan tracking aset MID
Check Sheet
Genset, MDP, SDP, Trafo, Roof Fan, Penerangan
Maintenance PM
Annual PM Trafo, Genset; Oil PM Trafo
Master Data
Genset, MDP, SDP, Trafo, Roof Fan, Motor
User Management
CRUD user, level, status aktif, WA ID
WhatsApp Config
Konfigurasi gateway, device, API key
System Settings
OTP, notif, backup, GDrive, session
Backup Manager
Lokal + GDrive, otomatis & manual
Activity Log
Audit trail semua aksi penting
Tech Stack
CodeIgniter 4.7
Framework PHP backend
PHP 8.2
JIT, enums, fibers, readonly
MariaDB
DB relasional utama
Bootstrap 5.3
CSS framework + grid system
Bootstrap Icons
Icon library utama UI
Font Awesome 6
Icon pelengkap
dompdf
Generate PDF server-side
jQuery 3.7
DOM + AJAX offline handler
Plus Jakarta Sans
Typeface utama UI
DM Mono
Typeface monospaced
GD Library
WebP convert & resize
Google OAuth 2.0
GDrive backup auth
WA Gateway API
Notifikasi & bot responder
cPanel / NataNet
Shared hosting environment