diff --git a/app/Http/Controllers/Admin/AduanController.php b/app/Http/Controllers/Admin/AduanController.php index fc93fab..bbfd81b 100644 --- a/app/Http/Controllers/Admin/AduanController.php +++ b/app/Http/Controllers/Admin/AduanController.php @@ -29,7 +29,11 @@ public function show($id) public function tanggapi(Request $request, $id) { $request->validate([ - 'tanggapan_admin' => 'required' + 'tanggapan_admin' => 'required|string|min:5|max:1000' + ], [ + 'tanggapan_admin.required' => 'Tanggapan admin wajib diisi.', + 'tanggapan_admin.min' => 'Tanggapan minimal 5 karakter.', + 'tanggapan_admin.max' => 'Tanggapan maksimal 1000 karakter.', ]); $aduan = AduanTps::findOrFail($id); diff --git a/app/Http/Controllers/Admin/ProfilController.php b/app/Http/Controllers/Admin/ProfilController.php index 13a23c1..2a254e5 100644 --- a/app/Http/Controllers/Admin/ProfilController.php +++ b/app/Http/Controllers/Admin/ProfilController.php @@ -20,49 +20,46 @@ public function update(Request $request) { $admin = Auth::user(); - $request->validate([ - 'name' => 'required|string|max:255', - 'username' => 'required|string|max:100', - 'foto' => 'nullable|image|mimes:jpg,jpeg,png|max:2048', - 'password' => 'nullable|min:6|confirmed', - ]); + $request->validate( + [ + 'name' => 'required|string|max:255', + 'username' => 'required|string|max:100|unique:users,username,' . $admin->id_users . ',id_users', + 'foto' => 'nullable|image|mimes:jpg,jpeg,png|max:2048', + 'password' => 'nullable|min:6|confirmed', + ], + [ + 'name.required' => 'Nama wajib diisi', + 'username.required' => 'Username wajib diisi', + 'username.unique' => 'Username sudah digunakan', + 'foto.image' => 'File harus berupa gambar', + 'foto.mimes' => 'Format foto harus JPG atau PNG', + 'foto.max' => 'Ukuran foto maksimal 2 MB', + 'password.min' => 'Password minimal 6 karakter', + 'password.confirmed' => 'Konfirmasi password tidak cocok', + ] + ); - // ====================== - // UPDATE DATA DASAR - // ====================== - $admin->name = $request->name; + // update data dasar + $admin->name = $request->name; $admin->username = $request->username; - // ====================== - // PROSES FOTO - // ====================== + // upload foto if ($request->hasFile('foto')) { - $path = public_path('assets/admin/foto-admin'); - - // buat folder kalau belum ada - if (!File::exists($path)) { - File::makeDirectory($path, 0755, true); - } - // hapus foto lama - if ($admin->foto && File::exists($path.'/'.$admin->foto)) { - File::delete($path.'/'.$admin->foto); + if ($admin->foto && file_exists(public_path('assets/admin/foto-admin/' . $admin->foto))) { + unlink(public_path('assets/admin/foto-admin/' . $admin->foto)); } $file = $request->file('foto'); - $namaFoto = time().'_'.uniqid().'.'.$file->getClientOriginalExtension(); + $namaFoto = time() . '_' . uniqid() . '.' . $file->getClientOriginalExtension(); - // SIMPAN FOTO (INI KUNCI) - $file->move($path, $namaFoto); + $file->move(public_path('assets/admin/foto-admin'), $namaFoto); - // simpan ke DB $admin->foto = $namaFoto; } - // ====================== - // PASSWORD - // ====================== + // update password jika diisi if ($request->filled('password')) { $admin->password = Hash::make($request->password); } diff --git a/app/Http/Controllers/AduanController.php b/app/Http/Controllers/AduanController.php index 67b8e2d..91b5f3f 100644 --- a/app/Http/Controllers/AduanController.php +++ b/app/Http/Controllers/AduanController.php @@ -8,16 +8,20 @@ class AduanController extends Controller { - + /** + * Menampilkan halaman form aduan TPS + */ public function index(Request $request) { $title = 'Aduan TPS'; $tps = null; + if ($request->filled('tps_id')) { $tps = LokasiTps::with('kategori') ->where('id_tps', $request->tps_id) ->first(); } + $listTps = LokasiTps::orderBy('nama_tps')->get(); return view('user.aduan-tps', compact( @@ -27,24 +31,42 @@ public function index(Request $request) )); } + /** + * Menyimpan data aduan TPS + */ public function store(Request $request) { $request->validate([ - 'lokasi_tps_id' => 'required|exists:lokasi_tps,id_tps', - 'nama_pelapor' => 'required|string|max:100', - 'alamat_pelapor'=> 'required|string', - 'no_pelapor' => 'required|string|max:20', - 'isi_aduan' => 'required|string', - 'bukti_foto' => 'required|image|mimes:jpg,jpeg,png|max:4096', + 'lokasi_tps_id' => 'required|exists:lokasi_tps,id_tps', + 'nama_pelapor' => 'required|string|max:100', + 'alamat_pelapor' => 'required|string', + 'no_pelapor' => 'required|digits_between:1,13|regex:/^[0-9]+$/', + 'isi_aduan' => 'required|string', + 'bukti_foto' => 'required|image|mimes:jpg,jpeg,png|max:4096', ], [ - 'lokasi_tps_id.required' => 'TPS wajib dipilih', - 'bukti_foto.required' => 'Foto bukti wajib diunggah', - 'bukti_foto.image' => 'File harus berupa gambar', + 'lokasi_tps_id.required' => 'TPS wajib dipilih', + 'lokasi_tps_id.exists' => 'TPS tidak valid', + + 'nama_pelapor.required' => 'Nama pelapor wajib diisi', + 'alamat_pelapor.required' => 'Alamat pelapor wajib diisi', + + 'no_pelapor.required' => 'Nomor HP wajib diisi', + 'no_pelapor.digits_between'=> 'Nomor HP maksimal 13 angka', + 'no_pelapor.regex' => 'Nomor HP hanya boleh berisi angka', + + 'isi_aduan.required' => 'Isi aduan wajib diisi', + + 'bukti_foto.required' => 'Foto bukti wajib diunggah', + 'bukti_foto.image' => 'File harus berupa gambar', + 'bukti_foto.mimes' => 'Format gambar harus jpg, jpeg, atau png', + 'bukti_foto.max' => 'Ukuran gambar maksimal 4 MB', ]); + // Upload foto bukti $fotoPath = $request->file('bukti_foto') ->store('aduan', 'public'); + // Simpan ke database AduanTps::create([ 'lokasi_tps_id' => $request->lokasi_tps_id, 'nama_pelapor' => $request->nama_pelapor, diff --git a/resources/views/admin/aduan/edit.blade.php b/resources/views/admin/aduan/edit.blade.php index ee5d1ed..24bab07 100644 --- a/resources/views/admin/aduan/edit.blade.php +++ b/resources/views/admin/aduan/edit.blade.php @@ -1,94 +1,83 @@ @extends('admin.template') @section('content') -
-
-
-
-
+
+
+
+
+
-

Tanggapi Aduan TPS

-

- Form tanggapan admin terhadap aduan masyarakat -

+

Tanggapi Aduan TPS

+

+ Form tanggapan admin terhadap aduan masyarakat +

-
- @csrf + + @csrf - {{-- TPS --}} -
- - - - {{ $aduan->lokasiTps->alamat_tps ?? '' }} - -
- - {{-- Nama Pelapor --}} -
- - -
- - {{-- Alamat Pelapor --}} -
- - -
- - {{-- Isi Aduan --}} -
- - -
- - {{-- Bukti Foto --}} - @if ($aduan->bukti_foto) + {{-- TPS --}}
-
- Bukti Aduan + + + + {{ $aduan->lokasiTps->alamat_tps ?? '' }} +
- @endif - {{-- Tanggapan Admin --}} -
- - -
+ {{-- Nama Pelapor --}} +
+ + +
- {{-- Tombol --}} - - - Kembali - + {{-- Alamat Pelapor --}} +
+ + +
-
+ {{-- Isi Aduan --}} +
+ + +
+ {{-- Bukti Foto --}} + @if ($aduan->bukti_foto) +
+
+ Bukti Aduan +
+ @endif + + {{-- Tanggapan Admin --}} +
+ + + + @error('tanggapan_admin') + {{ $message }} + @enderror +
+ + + {{-- Tombol --}} + + + Kembali + + + + +
-
@endsection diff --git a/resources/views/admin/profil.blade.php b/resources/views/admin/profil.blade.php index 35dae48..ccd9af3 100644 --- a/resources/views/admin/profil.blade.php +++ b/resources/views/admin/profil.blade.php @@ -9,6 +9,7 @@

Profil Admin

+ {{-- SUCCESS --}} @if (session('success'))
{{ session('success') }} @@ -20,7 +21,7 @@
- + {{-- KIRI : FOTO --}}
- + + + @error('foto') +
+ {{ $message }} +
+ @enderror + JPG / PNG, maksimal 2MB @@ -42,40 +52,66 @@ class="mb-3 rounded-circle"
- + {{-- KANAN : FORM --}}
+ {{-- NAMA --}}
- + + + @error('name') +
+ {{ $message }} +
+ @enderror
+ {{-- USERNAME --}}
- + + + @error('username') +
+ {{ $message }} +
+ @enderror
+ {{-- ROLE --}}
+ value="{{ $admin->role }}" + disabled>

+ {{-- PASSWORD --}}
+ + @error('password') +
+ {{ $message }} +
+ @enderror
+ {{-- KONFIRMASI PASSWORD --}}
+ {{-- BUTTON --}}
-
- -
-
+ + {{-- KOLOM KANAN --}} +
+ + @if (session('success')) +
+ {{ session('success') }} +
+ @endif + +
+ @csrf + + {{-- HIDDEN TPS --}} + + +
+ {{-- NAMA --}} +
+ + + @error('nama_pelapor') + {{ $message }} + @enderror +
+ + {{-- NO TELP --}} +
+ + + @error('no_pelapor') + {{ $message }} + @enderror +
+
+ + {{-- ALAMAT --}} +
+ + + @error('alamat_pelapor') + {{ $message }} + @enderror +
+ + {{-- ISI ADUAN --}} +
+ + + @error('isi_aduan') + {{ $message }} + @enderror +
+ + {{-- FOTO --}} +
+ + + @error('bukti_foto') + {{ $message }} + @enderror +
+ +
+ +
+
+
+
- +
+ - {{-- SCRIPT TPS --}} - + document.getElementById('ganti-tps').onclick = () => { + inputLokasi.value = ''; + fotoWrapper.classList.add('d-none'); + infoTps.innerHTML = + '

Silakan pilih TPS yang akan diadukan

'; + infoTps.appendChild(selectTps); + selectTps.value = ''; + }; + }); +}); + @endsection