foto tampilan user
This commit is contained in:
parent
81a0553379
commit
824c727592
|
|
@ -5,6 +5,7 @@
|
|||
use App\Http\Controllers\Controller;
|
||||
use App\Models\AduanTps;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class AduanController extends Controller
|
||||
{
|
||||
|
|
@ -27,12 +28,18 @@ public function index(Request $request)
|
|||
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([
|
||||
|
|
@ -44,6 +51,7 @@ public function tanggapi(Request $request, $id)
|
|||
]);
|
||||
|
||||
$aduan = AduanTps::findOrFail($id);
|
||||
|
||||
$aduan->tanggapan_admin = $request->tanggapan_admin;
|
||||
$aduan->tanggal_tanggapan = now();
|
||||
$aduan->save();
|
||||
|
|
@ -53,18 +61,18 @@ public function tanggapi(Request $request, $id)
|
|||
}
|
||||
|
||||
/**
|
||||
* Hapus tanggapan admin
|
||||
* Hapus aduan
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
$aduan = AduanTps::findOrFail($id);
|
||||
|
||||
// Hapus file bukti foto jika ada
|
||||
if ($aduan->bukti_foto && file_exists(public_path('assets/user/img/aduan/' . $aduan->bukti_foto))) {
|
||||
unlink(public_path('assets/user/img/aduan/' . $aduan->bukti_foto));
|
||||
// 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 aduan dari database
|
||||
// Hapus data dari database
|
||||
$aduan->delete();
|
||||
|
||||
return redirect()->route('admin.aduan.index')
|
||||
|
|
|
|||
|
|
@ -62,17 +62,12 @@ public function store(Request $request)
|
|||
'bukti_foto.max' => 'Ukuran gambar maksimal 2 MB',
|
||||
]);
|
||||
|
||||
// Upload foto bukti ke folder publik langsung
|
||||
$fotoPath = null;
|
||||
|
||||
if ($request->hasFile('bukti_foto')) {
|
||||
$file = $request->file('bukti_foto');
|
||||
$filename = strtolower(str_replace(' ', '_', pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME)))
|
||||
. '_' . time() . '.' . $file->getClientOriginalExtension();
|
||||
$file->move(public_path('assets/user/img/aduan'), $filename);
|
||||
$fotoPath = $filename;
|
||||
$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,
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ class="forms-sample">
|
|||
<label>TPS yang Diadukan</label>
|
||||
<input type="text" class="form-control" value="{{ $aduan->lokasiTps->nama_tps ?? '-' }}"
|
||||
readonly>
|
||||
|
||||
<small class="text-muted">
|
||||
{{ $aduan->lokasiTps->alamat_tps ?? '' }}
|
||||
</small>
|
||||
|
|
@ -50,27 +51,32 @@ class="forms-sample">
|
|||
@if ($aduan->bukti_foto)
|
||||
<div class="form-group">
|
||||
<label>Bukti Foto</label><br>
|
||||
<img src="{{ asset('assets/user/img/aduan/' . $aduan->bukti_foto) }}" alt="Bukti Aduan"
|
||||
|
||||
<img src="{{ asset('storage/' . $aduan->bukti_foto) }}" alt="Bukti Aduan"
|
||||
class="border rounded img-fluid" style="max-height:260px;">
|
||||
|
||||
</div>
|
||||
@endif
|
||||
|
||||
{{-- Tanggapan Admin --}}
|
||||
<div class="form-group">
|
||||
|
||||
<label>Tanggapan Admin</label>
|
||||
|
||||
<textarea name="tanggapan_admin" class="form-control @error('tanggapan_admin') is-invalid @enderror" rows="4"
|
||||
placeholder="Masukkan tanggapan admin...">{{ old('tanggapan_admin', $aduan->tanggapan_admin) }}</textarea>
|
||||
|
||||
@error('tanggapan_admin')
|
||||
<small class="text-danger">{{ $message }}</small>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{-- Tombol --}}
|
||||
<button type="submit" class="mr-2 btn btn-primary">
|
||||
Simpan Tanggapan
|
||||
</button>
|
||||
|
||||
<a href="{{ route('admin.aduan.index') }}" class="btn btn-light">
|
||||
Kembali
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -11,19 +11,20 @@
|
|||
|
||||
<!-- Header -->
|
||||
<div class="mb-3 d-flex justify-content-between align-items-center">
|
||||
|
||||
<div>
|
||||
<h4 class="mb-0 card-title">Data Aduan TPS</h4>
|
||||
<p class="mb-0 card-description">
|
||||
Daftar aduan masyarakat terhadap TPS
|
||||
</p>
|
||||
</div>
|
||||
<div class="mb-3 d-flex align-items-center">
|
||||
|
||||
<!-- SEARCH -->
|
||||
<div class="d-flex align-items-center">
|
||||
|
||||
<form action="{{ route('admin.aduan.index') }}" method="GET"
|
||||
style="width:300px;margin-right:20px;">
|
||||
<input type="text" name="search" value="{{ request('search') }}"
|
||||
class="form-control" placeholder="Cari Aduan...">
|
||||
class="form-control" placeholder="Cari nama TPS...">
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
|
@ -41,9 +42,12 @@ class="form-control" placeholder="Cari Aduan...">
|
|||
<th class="text-center">Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
|
||||
@forelse ($aduan as $item)
|
||||
<tr>
|
||||
|
||||
<td>
|
||||
<strong>
|
||||
{{ $item->lokasiTps->nama_tps ?? '-' }}
|
||||
|
|
@ -53,10 +57,15 @@ class="form-control" placeholder="Cari Aduan...">
|
|||
{{ $item->lokasiTps->alamat_tps ?? '' }}
|
||||
</small>
|
||||
</td>
|
||||
<td>{{ $item->nama_pelapor }}</td>
|
||||
|
||||
<td>
|
||||
{{ $item->nama_pelapor }}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{ \Carbon\Carbon::parse($item->tanggal_aduan)->format('d M Y') }}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
@if ($item->tanggapan_admin)
|
||||
<span class="badge badge-success">Ditanggapi</span>
|
||||
|
|
@ -64,7 +73,9 @@ class="form-control" placeholder="Cari Aduan...">
|
|||
<span class="badge badge-danger">Belum</span>
|
||||
@endif
|
||||
</td>
|
||||
|
||||
<td class="text-center">
|
||||
|
||||
<a href="{{ route('admin.aduan.show', $item->id_aduan) }}"
|
||||
class="btn btn-warning btn-sm" title="Tanggapi Aduan">
|
||||
<i class="bi bi-pencil-square"></i>
|
||||
|
|
@ -74,23 +85,31 @@ class="btn btn-warning btn-sm" title="Tanggapi Aduan">
|
|||
method="POST" class="d-inline form-hapus">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
|
||||
<button type="submit" class="btn btn-danger btn-sm"
|
||||
title="Hapus Aduan">
|
||||
<i class="bi bi-trash"></i>
|
||||
</button>
|
||||
|
||||
</form>
|
||||
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
@empty
|
||||
|
||||
<tr>
|
||||
<td colspan="6" class="text-center text-muted">
|
||||
<td colspan="5" class="text-center text-muted">
|
||||
Data aduan belum tersedia
|
||||
</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<!-- PAGINATION -->
|
||||
<div class="mt-3">
|
||||
{{ $aduan->appends(request()->query())->links() }}
|
||||
|
|
@ -102,10 +121,13 @@ class="btn btn-warning btn-sm" title="Tanggapi Aduan">
|
|||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{{-- SweetAlert Hapus --}}
|
||||
<script>
|
||||
document.querySelectorAll('.form-hapus').forEach(form => {
|
||||
|
||||
form.addEventListener('submit', function(e) {
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
Swal.fire({
|
||||
|
|
@ -117,15 +139,21 @@ class="btn btn-warning btn-sm" title="Tanggapi Aduan">
|
|||
cancelButtonColor: '#6c757d',
|
||||
confirmButtonText: 'Ya, Hapus',
|
||||
cancelButtonText: 'Batal'
|
||||
|
||||
}).then((result) => {
|
||||
|
||||
if (result.isConfirmed) {
|
||||
form.submit();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
{{-- SweetAlert Success --}}
|
||||
@if (session('success'))
|
||||
<script>
|
||||
|
|
@ -138,4 +166,5 @@ class="btn btn-warning btn-sm" title="Tanggapi Aduan">
|
|||
});
|
||||
</script>
|
||||
@endif
|
||||
|
||||
@endsection
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@
|
|||
<div class="card">
|
||||
<div class="card-body">
|
||||
|
||||
```
|
||||
<div class="mb-3 d-flex justify-content-between align-items-center">
|
||||
|
||||
<div>
|
||||
|
|
@ -123,8 +122,6 @@ class="btn btn-warning btn-sm me-1">
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ class="{{ $kat->id_kategori_tps == $kategori->id_kategori_tps ? 'active' : '' }}
|
|||
|
||||
{{-- Foto --}}
|
||||
@if($kategori->foto_kategori)
|
||||
<img src="{{ asset('assets/admin/images/kategori-tps/' . $kategori->foto_kategori) }}"
|
||||
<img src="{{ asset('storage/' . $kategori->foto_kategori) }}"
|
||||
alt="{{ $kategori->nama_kategori }}" class="mb-3 img-fluid services-img">
|
||||
@else
|
||||
<img src="{{ asset('assets/user/img/services.jpg') }}"
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
<option value="{{ $item->id_tps }}"
|
||||
data-nama="{{ $item->nama_tps }}"
|
||||
data-alamat="{{ $item->alamat_tps }}"
|
||||
data-foto="{{ $item->foto_tps ? asset('assets/admin/images/tps/'.$item->foto_tps) : asset('assets/user/img/no-image.png') }}">
|
||||
data-foto="{{ $item->foto_tps ? asset('storage/' . $item->foto_tps) : asset('assets/user/img/no-image.png') }}">
|
||||
{{ $item->nama_tps }}
|
||||
</option>
|
||||
@endforeach
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ function toDMS($decimal, $type = 'lat') {
|
|||
<div class="mb-4 border-0 shadow-sm card">
|
||||
<div class="row g-0">
|
||||
<div class="col-lg-5">
|
||||
<img src="{{ $tps->foto_tps ? asset('assets/admin/images/tps/'.$tps->foto_tps) : asset('assets/user/img/about-portrait.jpg') }}"
|
||||
<img src="{{ $tps->foto_tps ? asset('storage/' . $tps->foto_tps) : asset('assets/user/img/about-portrait.jpg') }}"
|
||||
class="img-fluid h-100 w-100 rounded-start"
|
||||
style="object-fit:cover">
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -184,16 +184,19 @@
|
|||
|
||||
<div class="service-item">
|
||||
<div class="img">
|
||||
@if ($item->foto_kategori && file_exists(public_path('assets/admin/images/kategori-tps/' . $item->foto_kategori)))
|
||||
<img src="{{ asset('assets/admin/images/kategori-tps/' . $item->foto_kategori) }}"
|
||||
class="img-fluid" alt="{{ $item->nama_kategori }}">
|
||||
|
||||
@if ($item->foto_kategori)
|
||||
<img src="{{ asset('storage/' . $item->foto_kategori) }}" class="img-fluid"
|
||||
alt="{{ $item->nama_kategori }}">
|
||||
@else
|
||||
<img src="{{ asset('assets/user/img/services-1.jpg') }}" class="img-fluid"
|
||||
alt="Default">
|
||||
@endif
|
||||
|
||||
</div>
|
||||
|
||||
<div class="details position-relative">
|
||||
|
||||
<div class="icon">
|
||||
@if ($item->nama_kategori == 'TPS')
|
||||
<i class="bi bi-trash"></i>
|
||||
|
|
@ -214,6 +217,7 @@ class="stretched-link">
|
|||
<p>
|
||||
{{ explode('.', $item->deskripsi)[0] }}.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue