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