From 57809ff2b14f6ed82868b5fae4aba3d4c9d653bb Mon Sep 17 00:00:00 2001 From: rahmagustin Date: Sun, 18 Jan 2026 15:00:26 +0700 Subject: [PATCH] perbaikan input dms tps --- app/Http/Controllers/Admin/CobaController.php | 0 .../Controllers/Admin/LoginController.php | 2 +- app/Http/Controllers/Admin/TpsController.php | 83 ++++++++++++++++--- app/Models/LokasiTps.php | 3 + resources/views/admin/login.blade.php | 3 +- resources/views/admin/tps/create.blade.php | 24 ++++-- 6 files changed, 95 insertions(+), 20 deletions(-) delete mode 100644 app/Http/Controllers/Admin/CobaController.php diff --git a/app/Http/Controllers/Admin/CobaController.php b/app/Http/Controllers/Admin/CobaController.php deleted file mode 100644 index e69de29..0000000 diff --git a/app/Http/Controllers/Admin/LoginController.php b/app/Http/Controllers/Admin/LoginController.php index 971d116..05489bb 100644 --- a/app/Http/Controllers/Admin/LoginController.php +++ b/app/Http/Controllers/Admin/LoginController.php @@ -41,6 +41,6 @@ public function logout(Request $request) $request->session()->invalidate(); $request->session()->regenerateToken(); - return redirect()->route('admin.login'); + return redirect()->route('user.index'); } } diff --git a/app/Http/Controllers/Admin/TpsController.php b/app/Http/Controllers/Admin/TpsController.php index e19c2c4..3ebb93d 100644 --- a/app/Http/Controllers/Admin/TpsController.php +++ b/app/Http/Controllers/Admin/TpsController.php @@ -30,10 +30,48 @@ public function create() return view('admin.tps.create', compact('title', 'kategori')); } + private function convertToDecimal($coordinate) + { + // decimal langsung + if (is_numeric($coordinate)) { + return (float) $coordinate; + } + + $coordinate = html_entity_decode($coordinate); + $coordinate = strtoupper(trim($coordinate)); + + // ganti simbol jadi seragam + $coordinate = str_replace( + ['°', "'", '"'], + [' ', ' ', ' '], + $coordinate + ); + + // ambil arah + preg_match('/([NSEW])/', $coordinate, $dirMatch); + if (!$dirMatch) return null; + + $direction = $dirMatch[1]; + + // ambil angka + preg_match_all('/\d+(\.\d+)?/', $coordinate, $numbers); + if (count($numbers[0]) < 3) return null; + + [$deg, $min, $sec] = array_map('floatval', $numbers[0]); + + $decimal = $deg + ($min / 60) + ($sec / 3600); + + if (in_array($direction, ['S', 'W'])) { + $decimal *= -1; + } + + return $decimal; + } + public function store(Request $request) { $request->validate([ - 'kategori_tps_id' => 'required|exists:kategori_tps,id', + 'kategori_tps_id' => 'required|exists:kategori_tps,id_kategori_tps', 'nama_tps' => 'required|string|max:255', 'alamat_tps' => 'required|string|max:255', 'status_tps' => 'required', @@ -44,13 +82,19 @@ public function store(Request $request) 'foto_tps' => 'nullable|image|mimes:jpg,jpeg,png|max:2048', ]); - // Upload foto - if ($request->hasFile('foto_tps')) { - $foto = $request->file('foto_tps')->store('foto-tps', 'public'); - } else { - $foto = null; + // 🔥 KONVERSI KOORDINAT + $latitude = $this->convertToDecimal($request->latitude); + $longitude = $this->convertToDecimal($request->longitude); + + if ($latitude === null || $longitude === null) { + return back()->withErrors(['Koordinat tidak valid'])->withInput(); } + // Upload foto + $foto = $request->hasFile('foto_tps') + ? $request->file('foto_tps')->store('foto-tps', 'public') + : null; + LokasiTps::create([ 'kategori_tps_id' => $request->kategori_tps_id, 'nama_tps' => $request->nama_tps, @@ -58,8 +102,8 @@ public function store(Request $request) 'status_tps' => $request->status_tps, 'tahun_pembuatan' => $request->tahun_pembuatan, 'kapasitas_tps' => $request->kapasitas_tps, - 'latitude' => $request->latitude, - 'longitude' => $request->longitude, + 'latitude' => $latitude, + 'longitude' => $longitude, 'foto_tps' => $foto, ]); @@ -67,6 +111,7 @@ public function store(Request $request) ->with('success', 'Data TPS berhasil ditambahkan'); } + public function edit($id) { $title = 'Edit TPS'; @@ -80,6 +125,7 @@ public function update(Request $request, $id) { $tps = LokasiTps::findOrFail($id); + // VALIDASI $request->validate([ 'kategori_tps_id' => 'required|exists:kategori_tps,id', 'nama_tps' => 'required|string|max:255', @@ -92,16 +138,31 @@ public function update(Request $request, $id) 'foto_tps' => 'nullable|image|mimes:jpg,jpeg,png|max:2048', ]); - // Jika upload foto baru + // 🔥 KONVERSI KOORDINAT (DMS / DECIMAL) + $latitude = $this->convertToDecimal($request->latitude); + $longitude = $this->convertToDecimal($request->longitude); + + // Jika koordinat tidak valid + if ($latitude === null || $longitude === null) { + return back() + ->withErrors(['Koordinat tidak valid. Gunakan format Decimal atau DMS.']) + ->withInput(); + } + + // 📸 UPLOAD FOTO JIKA ADA if ($request->hasFile('foto_tps')) { + + // Hapus foto lama if ($tps->foto_tps) { Storage::disk('public')->delete($tps->foto_tps); } + $foto = $request->file('foto_tps')->store('foto-tps', 'public'); } else { $foto = $tps->foto_tps; } + // 💾 UPDATE DATA $tps->update([ 'kategori_tps_id' => $request->kategori_tps_id, 'nama_tps' => $request->nama_tps, @@ -109,8 +170,8 @@ public function update(Request $request, $id) 'status_tps' => $request->status_tps, 'tahun_pembuatan' => $request->tahun_pembuatan, 'kapasitas_tps' => $request->kapasitas_tps, - 'latitude' => $request->latitude, - 'longitude' => $request->longitude, + 'latitude' => $latitude, + 'longitude' => $longitude, 'foto_tps' => $foto, ]); diff --git a/app/Models/LokasiTps.php b/app/Models/LokasiTps.php index deda36c..920220e 100644 --- a/app/Models/LokasiTps.php +++ b/app/Models/LokasiTps.php @@ -11,6 +11,9 @@ class LokasiTps extends Model protected $table = 'lokasi_tps'; protected $primaryKey = 'id_tps'; + protected $keyType = 'int'; + public $incrementing = true; + public $timestamps = false; protected $fillable = [ 'kategori_tps_id', diff --git a/resources/views/admin/login.blade.php b/resources/views/admin/login.blade.php index d63fec6..7bcbb1f 100644 --- a/resources/views/admin/login.blade.php +++ b/resources/views/admin/login.blade.php @@ -27,8 +27,9 @@
+

Halo Admin!

Silakan masuk untuk melanjutkan.
diff --git a/resources/views/admin/tps/create.blade.php b/resources/views/admin/tps/create.blade.php index 8235aea..73042b8 100644 --- a/resources/views/admin/tps/create.blade.php +++ b/resources/views/admin/tps/create.blade.php @@ -9,6 +9,17 @@

Tambah Data TPS

Form tambah data TPS

+ @if ($errors->any()) +
+
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+ @endif + + @csrf @@ -30,7 +41,7 @@ - +
-
- +
-
- +