82 lines
2.2 KiB
PHP
82 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\AduanTps;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class AduanController extends Controller
|
|
{
|
|
/**
|
|
* Tampilkan semua aduan
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
$search = $request->search;
|
|
|
|
$aduan = AduanTps::with('lokasiTps')
|
|
->when($search, function ($query) use ($search) {
|
|
$query->whereHas('lokasiTps', function ($q) use ($search) {
|
|
$q->where('nama_tps', 'like', '%' . $search . '%');
|
|
});
|
|
})
|
|
->orderBy('tanggal_aduan', 'desc')
|
|
->paginate(10);
|
|
|
|
return view('admin.aduan.index', compact('aduan'));
|
|
}
|
|
|
|
/**
|
|
* Detail aduan
|
|
*/
|
|
public function show($id)
|
|
{
|
|
$aduan = AduanTps::findOrFail($id);
|
|
return view('admin.aduan.edit', compact('aduan'));
|
|
}
|
|
|
|
/**
|
|
* Simpan tanggapan admin
|
|
*/
|
|
public function tanggapi(Request $request, $id)
|
|
{
|
|
$request->validate([
|
|
'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);
|
|
|
|
$aduan->tanggapan_admin = $request->tanggapan_admin;
|
|
$aduan->tanggal_tanggapan = now();
|
|
$aduan->save();
|
|
|
|
return redirect()->route('admin.aduan.index')
|
|
->with('success', 'Tanggapan berhasil disimpan');
|
|
}
|
|
|
|
/**
|
|
* Hapus aduan
|
|
*/
|
|
public function destroy($id)
|
|
{
|
|
$aduan = AduanTps::findOrFail($id);
|
|
|
|
// Hapus foto bukti dari storage
|
|
if ($aduan->bukti_foto && Storage::disk('public')->exists($aduan->bukti_foto)) {
|
|
Storage::disk('public')->delete($aduan->bukti_foto);
|
|
}
|
|
|
|
// Hapus data dari database
|
|
$aduan->delete();
|
|
|
|
return redirect()->route('admin.aduan.index')
|
|
->with('success', 'Aduan berhasil dihapus');
|
|
}
|
|
}
|