Pengaturan global untuk menonaktifkan batas ukuran file upload#1610
Merged
Conversation
|
🔄 AI PR Review sedang antri di server...
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
issue # #1609
🎯 Deskripsi
Pull request ini mengimplementasikan fitur pengaturan global untuk menonaktifkan batas ukuran file upload pada semua form di aplikasi OpenDK, sesuai permintaan di issue terkait.
Sebelumnya, batas ukuran file upload tersebar secara hardcode di berbagai lokasi (controller, rule validasi, dan komponen Livewire), sehingga pengguna tidak dapat mengupload file berukuran besar meski secara teknis server mendukungnya. PR ini menambahkan satu pengaturan bertipe boolean toggle di halaman Pengaturan → Aplikasi yang memungkinkan Admin menonaktifkan semua pembatasan ukuran file secara serentak tanpa perlu mengubah kode.
Ketika toggle dinonaktifkan (
Tidak Aktif), validasi ukuran file di seluruh lapisan aplikasi (service, rule, controller, dan Livewire) akan dilewati secara otomatis. Ketika diaktifkan kembali (Aktif), semua batas ukuran bawaan berlaku normal seperti semula.🛠️ Perubahan yang Dilakukan
1.
database/migrations/2026_06_26_160000_add_upload_limit_setting.php(BARU)Menambahkan migration untuk menyisipkan baris pengaturan baru ke tabel
das_setting:Pengaturan ini langsung tampil di halaman Pengaturan → Aplikasi tanpa memerlukan perubahan view, karena view sudah menangani type
booleansecara generik (ditampilkan sebagai dropdownAktif / Tidak Aktif).2.
app/Services/FileUploadService.phpFitur — Tambah method
isLimitEnabled()dan updatevalidateFileSize():isLimitEnabled()yang membaca nilai keyupload_limitdari tabeldas_setting. Mengembalikantruejika limit berlaku,falsejika dinonaktifkan. Defaulttruejika setting belum ada (backward compatible).validateFileSize()agar langsungreturntanpa melakukan pengecekan ukuran ketikaisLimitEnabled()bernilaifalse.3.
app/Rules/SecureFileUpload.phpFitur — Skip pengecekan ukuran file jika limit dinonaktifkan:
4.
app/Http/Controllers/FrontEnd/SistemKomplainController.phpFitur — Rule
max:1024kondisional untuk lampiran 1–4:5.
app/Http/Controllers/Api/SuratController.phpFitur — Rule
max:2048kondisional untuk file PDF surat:6.
app/Http/Livewire/Widget/WidgetController.phpFitur — Rule
max:1024kondisional untuk foto widget:public function rules() { + $maxRule = \App\Services\FileUploadService::isLimitEnabled() ? '|max:1024' : ''; return [ ... - 'foto' => 'nullable|mimes:jpg,png,jpeg,gif|max:1024', + 'foto' => 'nullable|mimes:jpg,png,jpeg,gif' . $maxRule, ]; }7.
app/Http/Livewire/Informasi/MediaTerkaitController.phpFitur — Rule
max:1024kondisional untuk logo media terkait:public function rules() { + $maxRule = \App\Services\FileUploadService::isLimitEnabled() ? '|max:1024' : ''; return [ ... - 'logo' => $this->editMode ? 'nullable|mimes:jpg,png,jpeg|max:1024' : 'required|mimes:jpg,png,jpeg|max:1024', + 'logo' => ($this->editMode ? 'nullable' : 'required') . '|mimes:jpg,png,jpeg' . $maxRule, ]; }8.
app/Http/Livewire/Kerjasama/PendaftaranKerjasama.phpFitur — Rule kondisional untuk file permohonan kerjasama:
Selain membuat rule kondisional, PR ini juga memperbaiki bug typo yang ada pada rule sebelumnya (
required:mimes:pdf→required|mimes:pdf):public function rules() { + $maxRule = \App\Services\FileUploadService::isLimitEnabled() ? '|max:1024' : ''; return [ ... - 'permohonan' => 'required:mimes:pdf|max:1024', + 'permohonan' => 'required|mimes:pdf' . $maxRule, ]; }9.
app/Http/Requests/*.php(10 File)Fitur — Skip rule
max:pada Form Requests jika limit dinonaktifkan:Menambahkan pengecekan kondisional
isLimitEnabled()pada 10 fileFormRequestyang memiliki validasi ukuran file secara hardcode (max:1024ataumax:2048). Jika toggle dimatikan, segmen rulemax:tidak akan ditambahkan ke validation rules. File yang diperbarui meliputi:DokumenRequest.phpMediaSosialRequest.phpPengurusRequest.phpPotensiRequest.phpProfilRequest.phpProsedurRequest.phpRegulasiRequest.phpSinergiProgramRequest.phpSlideRequest.phpUserRequest.phpContoh implementasi:
10.
tests/Unit/FileUploadServiceTest.phpTest — Tambah 4 test case baru:
menolak file yang terlalu besar ketika limit aktif— memastikan validasi ukuran tetap berjalan ketikaupload_limit = 1.mengizinkan file besar ketika limit dinonaktifkan— memastikan file besar (5MB) diterima ketikaupload_limit = 0.isLimitEnabled mengembalikan true ketika setting aktif.isLimitEnabled mengembalikan false ketika setting dinonaktifkan.isLimitEnabled default aktif ketika setting belum ada— backward compatibility.✅ Test Cases yang Diimplementasikan
upload_limittersimpan dengan benar di tabeldas_settingsetelah migration dijalankan.Aktif.Tidak Aktif, file berukuran lebih dari 1MB berhasil diupload di form komplain.Aktif, file berukuran lebih dari 1MB di-reject dengan pesan validasi ukuran.Tidak Aktif, file berukuran lebih dari 1MB berhasil diupload di form widget, arsip pengurus, dan profil.FileUploadServiceTest: 9 passed (14 assertions).📸 Cara Menjalankan Uji Coba Manual
Aktif.61cc5a27-69f5-4e80-ae1c-30f57f761e92.webm