diff --git a/app/Http/Controllers/Admin/AdminPeminjamanController.php b/app/Http/Controllers/Admin/AdminPeminjamanController.php index 6863c02..ce0188e 100644 --- a/app/Http/Controllers/Admin/AdminPeminjamanController.php +++ b/app/Http/Controllers/Admin/AdminPeminjamanController.php @@ -145,7 +145,7 @@ public function store(Request $request) public function export(Request $request) { $request->validate([ - 'bulan_laporan' => 'nullable|date', + 'bulan_laporan' => 'required|date|before_or_equal:today', ]); $query = Loan::with(['user', 'book'])->orderBy('borrowed_at', 'asc'); diff --git a/app/Http/Controllers/Admin/AdminRekomendasiController.php b/app/Http/Controllers/Admin/AdminRekomendasiController.php index 0ac417e..34f974f 100644 --- a/app/Http/Controllers/Admin/AdminRekomendasiController.php +++ b/app/Http/Controllers/Admin/AdminRekomendasiController.php @@ -58,8 +58,8 @@ public function edit($id) public function store(Request $request) { $validated = $request->validate([ - 'judul' => 'required|string|max:255', - 'kategori' => 'required|string|max:100', + 'judul' => 'required|string|min:3|max:50', + 'kategori' => 'required|string|min:3|max:50', 'youtube_link' => 'required|url', 'deskripsi' => 'required|string', ]); @@ -75,8 +75,8 @@ public function update(Request $request, $id) $rekomendasi = Recommendation::findOrFail($id); $validated = $request->validate([ - 'judul' => 'required|string|max:255', - 'kategori' => 'required|string|max:100', + 'judul' => 'required|string|min:3|max:50', + 'kategori' => 'required|string|min:3|max:50', 'youtube_link' => 'required|url', 'deskripsi' => 'required|string', ]); diff --git a/app/Http/Controllers/Admin/BookController.php b/app/Http/Controllers/Admin/BookController.php index 0c2ac71..e2f0cc6 100644 --- a/app/Http/Controllers/Admin/BookController.php +++ b/app/Http/Controllers/Admin/BookController.php @@ -80,15 +80,15 @@ public function edit($id) public function store(Request $request) { $validated = $request->validate([ - 'judul' => 'required|string|min:3|max:255', - 'penulis' => 'required|string|min:3|max:100', + 'judul' => 'required|string|min:3|max:50', + 'penulis' => 'required|string|min:3|max:50|regex:/^[a-zA-Z\s.,\']+$/', 'category_id' => 'required|exists:categories,id', - 'tahun' => 'required|integer', - 'kode_buku' => 'nullable|string|max:10', + 'tahun' => 'required|integer|min:1900|max:2026', + 'kode_buku' => 'required|numeric|max_digits:10', 'stok' => 'required|integer|min:0|max:99', 'tipe_akses' => 'required|array', - 'cover' => 'nullable|image|mimes:jpeg,png,jpg|max:2048', - 'file_pdf' => 'nullable|mimes:pdf|max:10240', + 'cover' => 'required|image|mimes:jpeg,png,jpg|max:2048', + 'file_pdf' => 'required|mimes:pdf|max:10240', ]); if ($request->hasFile('cover')) { @@ -111,11 +111,11 @@ public function update(Request $request, $id) $buku = Book::findOrFail($id); $validated = $request->validate([ - 'judul' => 'required|string|min:3|max:255', - 'penulis' => 'required|string|min:3|max:100', + 'judul' => 'required|string|min:3|max:50', + 'penulis' => 'required|string|min:3|max:50|regex:/^[a-zA-Z\s.,\']+$/', 'category_id' => 'required|exists:categories,id', - 'tahun' => 'required|integer', - 'kode_buku' => 'nullable|string|max:10', + 'tahun' => 'required|integer|min:1900|max:2026', + 'kode_buku' => 'nullable|numeric|max_digits:10', 'stok' => 'required|integer|min:0|max:99', 'tipe_akses' => 'required|array', 'cover' => 'nullable|image|mimes:jpeg,png,jpg|max:2048', diff --git a/app/Http/Controllers/Admin/MasterIndukController.php b/app/Http/Controllers/Admin/MasterIndukController.php index 365b069..0fc25a0 100644 --- a/app/Http/Controllers/Admin/MasterIndukController.php +++ b/app/Http/Controllers/Admin/MasterIndukController.php @@ -12,9 +12,9 @@ class MasterIndukController extends Controller public function store(Request $request) { $request->validate([ - 'nomor_induk' => 'required|unique:master_induks,nomor_induk', + 'nomor_induk' => 'required|string|max:15|unique:master_induks,nomor_induk', 'role' => 'required|in:siswa,guru', - 'nama_pemilik' => 'required|string', + 'nama_pemilik' => 'required|string|min:3|max:50|regex:/^[a-zA-Z\s.,\']+$/', ]); MasterInduk::create(array_merge($request->all(), ['user_id' => auth()->id()])); diff --git a/app/Http/Controllers/Admin/PengumumanController.php b/app/Http/Controllers/Admin/PengumumanController.php index f931e3b..ff24540 100644 --- a/app/Http/Controllers/Admin/PengumumanController.php +++ b/app/Http/Controllers/Admin/PengumumanController.php @@ -46,7 +46,7 @@ public function edit($id) public function store(Request $request) { $validated = $request->validate([ - 'title' => 'required|string|max:255', + 'title' => 'required|string|min:3|max:50', 'content' => 'required|string', 'type' => 'required|in:info,warning,success,danger', 'icon' => 'nullable|string|max:50', @@ -68,7 +68,7 @@ public function update(Request $request, $id) $pengumuman = Announcement::findOrFail($id); $validated = $request->validate([ - 'title' => 'required|string|max:255', + 'title' => 'required|string|min:3|max:50', 'content' => 'required|string', 'type' => 'required|in:info,warning,success,danger', 'icon' => 'nullable|string|max:50', diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 6d7f814..8564d2c 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -54,10 +54,10 @@ public function edit($id) public function store(Request $request) { $validated = $request->validate([ - 'nama_lengkap' => 'required|string|max:255', + 'nama_lengkap' => 'required|string|min:3|max:50|regex:/^[a-zA-Z\s.,\']+$/', 'email' => 'required|email|unique:users,email', - 'nomor_induk' => 'required|string|max:50|unique:users,nomor_induk', - 'phone' => 'nullable|string|max:20', + 'nomor_induk' => 'required|string|max:15|unique:users,nomor_induk', + 'phone' => 'nullable|string|min:13|max:16|regex:/^\+?[0-9]+$/', 'role' => 'required|in:siswa,guru,penjaga perpus', 'kelas' => 'nullable|string|max:50', 'golongan' => 'nullable|string|max:50', @@ -88,10 +88,10 @@ public function update(Request $request, $id) $pengguna = User::findOrFail($id); $validated = $request->validate([ - 'nama_lengkap' => 'required|string|max:255', + 'nama_lengkap' => 'required|string|min:3|max:50|regex:/^[a-zA-Z\s.,\']+$/', 'email' => 'required|email|unique:users,email,' . $id, - 'nomor_induk' => 'nullable|string|max:50', - 'phone' => 'nullable|string|max:20', + 'nomor_induk' => 'nullable|string|max:15', + 'phone' => 'nullable|string|min:13|max:16|regex:/^\+?[0-9]+$/', 'role' => 'required|in:siswa,guru,penjaga perpus', 'kelas' => 'nullable|string|max:50', 'golongan' => 'nullable|string|max:50', diff --git a/app/Http/Requests/ProfileUpdateRequest.php b/app/Http/Requests/ProfileUpdateRequest.php index 00b4838..b6bda61 100644 --- a/app/Http/Requests/ProfileUpdateRequest.php +++ b/app/Http/Requests/ProfileUpdateRequest.php @@ -16,7 +16,7 @@ class ProfileUpdateRequest extends FormRequest public function rules(): array { return [ - 'name' => ['required', 'string', 'max:255'], + 'name' => ['required', 'string', 'min:3', 'max:50'], 'email' => [ 'required', 'string', @@ -25,7 +25,7 @@ public function rules(): array 'max:255', Rule::unique(User::class)->ignore($this->user()->id), ], - 'phone' => ['required', 'string', 'max:20'], + 'phone' => ['required', 'numeric', 'digits_between:13,15'], ]; } } diff --git a/lang/id/validation.php b/lang/id/validation.php new file mode 100644 index 0000000..bdda36d --- /dev/null +++ b/lang/id/validation.php @@ -0,0 +1,178 @@ + ':attribute harus diterima.', + 'accepted_if' => ':attribute harus diterima ketika :other adalah :value.', + 'active_url' => ':attribute bukan URL yang valid.', + 'after' => ':attribute harus berisi tanggal setelah :date.', + 'after_or_equal' => ':attribute harus berisi tanggal setelah atau sama dengan :date.', + 'alpha' => ':attribute hanya boleh berisi huruf.', + 'alpha_dash' => ':attribute hanya boleh berisi huruf, angka, strip, dan garis bawah.', + 'alpha_num' => ':attribute hanya boleh berisi huruf dan angka.', + 'array' => ':attribute harus berisi sebuah array.', + 'ascii' => ':attribute hanya boleh berisi karakter alfanumerik dan simbol satu bait.', + 'before' => ':attribute harus berisi tanggal sebelum :date.', + 'before_or_equal' => ':attribute harus berisi tanggal sebelum atau sama dengan :date.', + 'between' => [ + 'array' => ':attribute harus memiliki antara :min dan :max anggota.', + 'file' => ':attribute harus berukuran antara :min dan :max kilobita.', + 'numeric' => ':attribute harus bernilai antara :min dan :max.', + 'string' => ':attribute harus berisi antara :min dan :max karakter.', + ], + 'boolean' => ':attribute harus bernilai true atau false.', + 'can' => ':attribute berisi nilai yang tidak sah.', + 'confirmed' => 'Konfirmasi :attribute tidak cocok.', + 'contains' => ':attribute tidak memiliki nilai yang dibutuhkan.', + 'current_password' => 'Kata sandi salah.', + 'date' => ':attribute bukan tanggal yang valid.', + 'date_equals' => ':attribute harus berisi tanggal yang sama dengan :date.', + 'date_format' => ':attribute tidak cocok dengan format :format.', + 'decimal' => ':attribute harus memiliki :decimal tempat desimal.', + 'declined' => ':attribute harus ditolak.', + 'declined_if' => ':attribute harus ditolak ketika :other adalah :value.', + 'different' => ':attribute dan :other harus berbeda.', + 'digits' => ':attribute harus terdiri dari :digits angka.', + 'digits_between' => ':attribute harus terdiri dari antara :min dan :max angka.', + 'dimensions' => ':attribute tidak memiliki dimensi gambar yang valid.', + 'distinct' => ':attribute memiliki nilai yang duplikat.', + 'doesnt_end_with' => ':attribute tidak boleh diakhiri dengan salah satu dari: :values.', + 'doesnt_start_with' => ':attribute tidak boleh diawali dengan salah satu dari: :values.', + 'email' => ':attribute harus berupa alamat surel yang valid.', + 'ends_with' => ':attribute harus diakhiri dengan salah satu dari: :values.', + 'enum' => ':attribute yang dipilih tidak valid.', + 'exists' => ':attribute yang dipilih tidak valid.', + 'extensions' => ':attribute harus memiliki salah satu ekstensi berikut: :values.', + 'file' => ':attribute harus berupa sebuah berkas.', + 'filled' => ':attribute harus memiliki nilai.', + 'gt' => [ + 'array' => ':attribute harus memiliki lebih dari :value anggota.', + 'file' => ':attribute harus berukuran lebih dari :value kilobita.', + 'numeric' => ':attribute harus bernilai lebih dari :value.', + 'string' => ':attribute harus berisi lebih dari :value karakter.', + ], + 'gte' => [ + 'array' => ':attribute harus memiliki :value anggota atau lebih.', + 'file' => ':attribute harus berukuran lebih dari atau sama dengan :value kilobita.', + 'numeric' => ':attribute harus bernilai lebih dari atau sama dengan :value.', + 'string' => ':attribute harus berisi lebih dari atau sama dengan :value karakter.', + ], + 'hex_color' => ':attribute harus berupa warna heksadesimal yang valid.', + 'image' => ':attribute harus berupa gambar.', + 'in' => ':attribute yang dipilih tidak valid.', + 'in_array' => ':attribute tidak ada di dalam :other.', + 'integer' => ':attribute harus berupa bilangan bulat.', + 'ip' => ':attribute harus berupa alamat IP yang valid.', + 'ipv4' => ':attribute harus berupa alamat IPv4 yang valid.', + 'ipv6' => ':attribute harus berupa alamat IPv6 yang valid.', + 'json' => ':attribute harus berupa string JSON yang valid.', + 'list' => ':attribute harus berupa daftar.', + 'lowercase' => ':attribute harus berupa huruf kecil.', + 'lt' => [ + 'array' => ':attribute harus memiliki kurang dari :value anggota.', + 'file' => ':attribute harus berukuran kurang dari :value kilobita.', + 'numeric' => ':attribute harus bernilai kurang dari :value.', + 'string' => ':attribute harus berisi kurang dari :value karakter.', + ], + 'lte' => [ + 'array' => ':attribute tidak boleh memiliki lebih dari :value anggota.', + 'file' => ':attribute harus berukuran kurang dari atau sama dengan :value kilobita.', + 'numeric' => ':attribute harus bernilai kurang dari atau sama dengan :value.', + 'string' => ':attribute harus berisi kurang dari atau sama dengan :value karakter.', + ], + 'mac_address' => ':attribute harus berupa alamat MAC yang valid.', + 'max' => [ + 'array' => ':attribute maksimal terdiri dari :max anggota.', + 'file' => ':attribute maksimal berukuran :max kilobita.', + 'numeric' => ':attribute maksimal bernilai :max.', + 'string' => ':attribute maksimal berisi :max karakter.', + ], + 'max_digits' => ':attribute tidak boleh memiliki lebih dari :max digit.', + 'mimes' => ':attribute harus berupa berkas berjenis: :values.', + 'mimetypes' => ':attribute harus berupa berkas berjenis: :values.', + 'min' => [ + 'array' => ':attribute minimal terdiri dari :min anggota.', + 'file' => ':attribute minimal berukuran :min kilobita.', + 'numeric' => ':attribute minimal bernilai :min.', + 'string' => ':attribute minimal berisi :min karakter.', + ], + 'min_digits' => ':attribute harus memiliki setidaknya :min digit.', + 'missing' => ':attribute harus tidak ada.', + 'missing_if' => ':attribute harus tidak ada ketika :other adalah :value.', + 'missing_unless' => ':attribute harus tidak ada kecuali :other adalah :value.', + 'missing_with' => ':attribute harus tidak ada ketika :values ada.', + 'missing_with_all' => ':attribute harus tidak ada ketika :values ada.', + 'multiple_of' => ':attribute harus merupakan kelipatan dari :value.', + 'not_in' => ':attribute yang dipilih tidak valid.', + 'not_regex' => 'Format :attribute tidak valid.', + 'numeric' => ':attribute harus berupa angka.', + 'password' => [ + 'letters' => ':attribute harus berisi setidaknya satu huruf.', + 'mixed' => ':attribute harus berisi setidaknya satu huruf besar dan satu huruf kecil.', + 'numbers' => ':attribute harus berisi setidaknya satu angka.', + 'symbols' => ':attribute harus berisi setidaknya satu simbol.', + 'uncompromised' => ':attribute yang diberikan telah muncul dalam kebocoran data. Silakan pilih :attribute yang berbeda.', + ], + 'present' => ':attribute harus ada.', + 'present_if' => ':attribute harus ada ketika :other adalah :value.', + 'present_unless' => ':attribute harus ada kecuali :other adalah :value.', + 'present_with' => ':attribute harus ada ketika :values ada.', + 'present_with_all' => ':attribute harus ada ketika :values ada.', + 'prohibited' => ':attribute dilarang.', + 'prohibited_if' => ':attribute dilarang ketika :other adalah :value.', + 'prohibited_unless' => ':attribute dilarang kecuali :other adalah :value.', + 'prohibits' => ':attribute melarang :other dari ada.', + 'regex' => 'Format :attribute tidak valid.', + 'required' => ':attribute wajib diisi.', + 'required_array_keys' => ':attribute harus memiliki entri untuk: :values.', + 'required_if' => ':attribute wajib diisi ketika :other adalah :value.', + 'required_if_accepted' => ':attribute wajib diisi ketika :other diterima.', + 'required_if_declined' => ':attribute wajib diisi ketika :other ditolak.', + 'required_unless' => ':attribute wajib diisi kecuali :other memiliki nilai :values.', + 'required_with' => ':attribute wajib diisi ketika :values ada.', + 'required_with_all' => ':attribute wajib diisi ketika :values ada.', + 'required_without' => ':attribute wajib diisi ketika :values tidak ada.', + 'required_without_all' => ':attribute wajib diisi ketika tidak ada :values yang ada.', + 'same' => ':attribute dan :other harus sama.', + 'size' => [ + 'array' => ':attribute harus mengandung :size anggota.', + 'file' => ':attribute harus berukuran :size kilobita.', + 'numeric' => ':attribute harus berukuran :size.', + 'string' => ':attribute harus berukuran :size karakter.', + ], + 'starts_with' => ':attribute harus diawali dengan salah satu dari: :values.', + 'string' => ':attribute harus berupa string.', + 'timezone' => ':attribute harus berisi zona waktu yang valid.', + 'unique' => ':attribute sudah ada sebelumnya.', + 'uploaded' => ':attribute gagal diunggah.', + 'uppercase' => ':attribute harus berupa huruf besar.', + 'url' => ':attribute harus berupa URL yang valid.', + 'ulid' => ':attribute harus berupa ULID yang valid.', + 'uuid' => ':attribute harus berupa UUID yang valid.', + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + 'attributes' => [ + 'judul' => 'Judul Buku', + 'penulis' => 'Penulis', + 'category_id' => 'Kategori', + 'tahun' => 'Tahun Terbit', + 'kode_buku' => 'Kode Buku', + 'stok' => 'Stok', + 'tipe_akses' => 'Tipe Akses', + 'cover' => 'Cover Buku', + 'file_pdf' => 'File PDF', + 'nama_lengkap' => 'Nama Lengkap', + 'nama_pemilik' => 'Nama Pemilik', + 'nomor_induk' => 'Nomor Induk', + 'phone' => 'Nomor Telepon', + 'title' => 'Judul', + 'content' => 'Konten', + 'type' => 'Tipe', + 'icon' => 'Ikon', + 'kategori' => 'Kategori', + ], +]; diff --git a/resources/views/admin/buku/create.blade.php b/resources/views/admin/buku/create.blade.php index c6706e8..df9c64f 100644 --- a/resources/views/admin/buku/create.blade.php +++ b/resources/views/admin/buku/create.blade.php @@ -18,52 +18,59 @@