perbaikan path dan button

This commit is contained in:
rahmagustin 2026-02-20 05:16:22 +07:00
parent fbbe3713cf
commit 6e5dc6d352
19 changed files with 97 additions and 380 deletions

View File

@ -51,6 +51,13 @@ public function tanggapi(Request $request, $id)
public function destroy($id) public function destroy($id)
{ {
$aduan = AduanTps::findOrFail($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 data aduan dari database
$aduan->delete(); $aduan->delete();
return redirect()->route('admin.aduan.index') return redirect()->route('admin.aduan.index')

View File

@ -5,7 +5,6 @@
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\KategoriTps; use App\Models\KategoriTps;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class KategoriTpsController extends Controller class KategoriTpsController extends Controller
{ {
@ -42,8 +41,15 @@ public function store(Request $request)
] ]
); );
$data['foto_kategori'] = $request->file('foto_kategori') // Upload foto ke public/assets/admin/images/kategori-tps
->store('kategori', 'public'); if ($request->hasFile('foto_kategori')) {
$file = $request->file('foto_kategori');
$filename = strtolower(str_replace(' ', '_', $request->nama_kategori))
. '_' . time()
. '.' . $file->getClientOriginalExtension();
$file->move(public_path('assets/admin/images/kategori-tps'), $filename);
$data['foto_kategori'] = $filename;
}
KategoriTps::create($data); KategoriTps::create($data);
@ -81,12 +87,17 @@ public function update(Request $request, $id)
); );
if ($request->hasFile('foto_kategori')) { if ($request->hasFile('foto_kategori')) {
if ($kategori->foto_kategori) { // Hapus foto lama jika ada
Storage::disk('public')->delete($kategori->foto_kategori); if ($kategori->foto_kategori && file_exists(public_path('assets/admin/images/kategori-tps/' . $kategori->foto_kategori))) {
unlink(public_path('assets/admin/images/kategori-tps/' . $kategori->foto_kategori));
} }
$data['foto_kategori'] = $request->file('foto_kategori') $file = $request->file('foto_kategori');
->store('kategori', 'public'); $filename = strtolower(str_replace(' ', '_', $request->nama_kategori))
. '_' . time()
. '.' . $file->getClientOriginalExtension();
$file->move(public_path('assets/admin/images/kategori-tps'), $filename);
$data['foto_kategori'] = $filename;
} }
$kategori->update($data); $kategori->update($data);
@ -100,8 +111,8 @@ public function destroy($id)
{ {
$kategori = KategoriTps::findOrFail($id); $kategori = KategoriTps::findOrFail($id);
if ($kategori->foto_kategori) { if ($kategori->foto_kategori && file_exists(public_path('assets/admin/images/kategori-tps/' . $kategori->foto_kategori))) {
Storage::disk('public')->delete($kategori->foto_kategori); unlink(public_path('assets/admin/images/kategori-tps/' . $kategori->foto_kategori));
} }
$kategori->delete(); $kategori->delete();

View File

@ -188,15 +188,21 @@ public function update(Request $request, $id)
} }
public function destroy($id) public function destroy($id)
{ {
$tps = LokasiTps::findOrFail($id); $tps = LokasiTps::findOrFail($id);
if ($tps->foto_tps && file_exists(public_path($tps->foto_tps))) { // Path lengkap foto TPS
unlink(public_path($tps->foto_tps)); // hapus foto lama $fotoPath = $tps->foto_tps ? public_path('assets/admin/images/tps/' . $tps->foto_tps) : null;
// Hapus file jika ada
if ($fotoPath && file_exists($fotoPath)) {
unlink($fotoPath);
} }
// Hapus data dari database
$tps->delete(); $tps->delete();
return redirect()->route('admin.tps.index')->with('success', 'Data TPS berhasil dihapus.'); return redirect()->route('admin.tps.index')
} ->with('success', 'Data TPS berhasil dihapus.');
}
} }

View File

@ -62,9 +62,15 @@ public function store(Request $request)
'bukti_foto.max' => 'Ukuran gambar maksimal 2 MB', 'bukti_foto.max' => 'Ukuran gambar maksimal 2 MB',
]); ]);
// Upload foto bukti // Upload foto bukti ke folder publik langsung
$fotoPath = $request->file('bukti_foto') $fotoPath = null;
->store('aduan', 'public'); 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;
}
// Simpan ke database // Simpan ke database
AduanTps::create([ AduanTps::create([

View File

@ -11081,23 +11081,32 @@ .wizard > .actions fieldset:disabled a {
pointer-events: none; pointer-events: none;
} }
.btn-primary, .wizard > .actions a { .btn-primary,
.wizard > .actions a {
color: #fff; color: #fff;
background-color: #00A86B; background-color: #00A86B;
border-color: #00A86B; border-color: #00A86B;
transition: background 0.3s, border-color 0.3s; /* smooth transition */
} }
.btn-primary:hover, .wizard > .actions a:hover { .btn-primary:hover,
.wizard > .actions a:hover {
color: #fff; color: #fff;
background-color: #3f3e91; background: color-mix(in srgb, #00A86B, transparent 15%);
border-color: #3b3a88; border-color: #008753;
} }
.btn-primary:focus, .wizard > .actions a:focus, .btn-primary.focus, .wizard > .actions a.focus { .btn-primary:focus,
.wizard > .actions a:focus,
.btn-primary.focus,
.wizard > .actions a.focus {
color: #fff; color: #fff;
background-color: #3f3e91; /* Sama seperti hover, pakai color-mix agar lembut */
border-color: #3b3a88; background: color-mix(in srgb, #00A86B, transparent 15%);
box-shadow: 0 0 0 0.2rem rgba(102, 100, 184, 0.5); border-color: #008753; /* sedikit lebih gelap dari default */
box-shadow: 0 0 0 0.2rem rgba(0, 168, 107, 0.4); /* warna box-shadow sesuai accent */
outline: none; /* hilangkan outline default browser */
transition: background 0.3s, border-color 0.3s, box-shadow 0.3s;
} }
.btn-primary.disabled, .wizard > .actions a.disabled, .btn-primary:disabled, .wizard > .actions a:disabled { .btn-primary.disabled, .wizard > .actions a.disabled, .btn-primary:disabled, .wizard > .actions a:disabled {
@ -11106,18 +11115,27 @@ .btn-primary.disabled, .wizard > .actions a.disabled, .btn-primary:disabled, .wi
border-color: #00A86B; border-color: #00A86B;
} }
.btn-primary:not(:disabled):not(.disabled):active, .wizard > .actions a:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, .wizard > .actions a:not(:disabled):not(.disabled).active, .btn-primary:not(:disabled):not(.disabled):active,
.wizard > .actions a:not(:disabled):not(.disabled):active,
.btn-primary:not(:disabled):not(.disabled).active,
.wizard > .actions a:not(:disabled):not(.disabled).active,
.show > .btn-primary.dropdown-toggle, .show > .btn-primary.dropdown-toggle,
.wizard > .actions .show > a.dropdown-toggle { .wizard > .actions .show > a.dropdown-toggle {
color: #fff; color: #fff;
background-color: #3b3a88; /* Gunakan color-mix agar sesuai hover/focus */
border-color: #37367f; background: color-mix(in srgb, #00A86B, transparent 15%);
border-color: #008753; /* lebih gelap sedikit dari default */
} }
.btn-primary:not(:disabled):not(.disabled):active:focus, .wizard > .actions a:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, .wizard > .actions a:not(:disabled):not(.disabled).active:focus, .btn-primary:not(:disabled):not(.disabled):active:focus,
.wizard > .actions a:not(:disabled):not(.disabled):active:focus,
.btn-primary:not(:disabled):not(.disabled).active:focus,
.wizard > .actions a:not(:disabled):not(.disabled).active:focus,
.show > .btn-primary.dropdown-toggle:focus, .show > .btn-primary.dropdown-toggle:focus,
.wizard > .actions .show > a.dropdown-toggle:focus { .wizard > .actions .show > a.dropdown-toggle:focus {
box-shadow: 0 0 0 0.2rem rgba(102, 100, 184, 0.5); box-shadow: 0 0 0 0.2rem rgba(0, 168, 107, 0.4); /* box-shadow sesuai accent color */
outline: none; /* hilangkan outline default */
transition: background 0.3s, border-color 0.3s, box-shadow 0.3s;
} }
.btn-secondary, .wizard > .actions .disabled a { .btn-secondary, .wizard > .actions .disabled a {
@ -20949,337 +20967,6 @@ .btn-group .btn + .btn, .fc .fc-button-group .btn + .btn, .btn-group .fc button
border-left: 0; border-left: 0;
} }
/*social buttons*/
.btn-twitter {
background: #4747A1;
color: #ffffff;
}
.btn-twitter:hover, .btn-twitter:focus {
background: #37377e;
color: #ffffff;
}
.btn-twitter.btn-social-icon-text {
padding: 0 1.5rem 0 0;
background: #6161ba;
}
.btn-twitter.btn-social-icon-text i {
background: #4747A1;
padding: .75rem;
display: inline-block;
margin-right: 1.5rem;
border-radius: 15px 0 0 15px;
}
.btn-outline-twitter {
border: 1px solid #4747A1;
color: #4747A1;
}
.btn-outline-twitter:hover {
background: #4747A1;
color: #ffffff;
}
.btn-facebook {
background: #7DA0FA;
color: #ffffff;
}
.btn-facebook:hover, .btn-facebook:focus {
background: #4c7cf8;
color: #ffffff;
}
.btn-facebook.btn-social-icon-text {
padding: 0 1.5rem 0 0;
background: #aec4fc;
}
.btn-facebook.btn-social-icon-text i {
background: #7DA0FA;
padding: .75rem;
display: inline-block;
margin-right: 1.5rem;
border-radius: 15px 0 0 15px;
}
.btn-outline-facebook {
border: 1px solid #7DA0FA;
color: #7DA0FA;
}
.btn-outline-facebook:hover {
background: #7DA0FA;
color: #ffffff;
}
.btn-google {
background: #dc4a38;
color: #ffffff;
}
.btn-google:hover, .btn-google:focus {
background: #bf3322;
color: #ffffff;
}
.btn-google.btn-social-icon-text {
padding: 0 1.5rem 0 0;
background: #e47163;
}
.btn-google.btn-social-icon-text i {
background: #dc4a38;
padding: .75rem;
display: inline-block;
margin-right: 1.5rem;
border-radius: 15px 0 0 15px;
}
.btn-outline-google {
border: 1px solid #dc4a38;
color: #dc4a38;
}
.btn-outline-google:hover {
background: #dc4a38;
color: #ffffff;
}
.btn-linkedin {
background: #7978E9;
color: #ffffff;
}
.btn-linkedin:hover, .btn-linkedin:focus {
background: #4d4ce2;
color: #ffffff;
}
.btn-linkedin.btn-social-icon-text {
padding: 0 1.5rem 0 0;
background: #a5a4f0;
}
.btn-linkedin.btn-social-icon-text i {
background: #7978E9;
padding: .75rem;
display: inline-block;
margin-right: 1.5rem;
border-radius: 15px 0 0 15px;
}
.btn-outline-linkedin {
border: 1px solid #7978E9;
color: #7978E9;
}
.btn-outline-linkedin:hover {
background: #7978E9;
color: #ffffff;
}
.btn-pinterest {
background: #cc2127;
color: #ffffff;
}
.btn-pinterest:hover, .btn-pinterest:focus {
background: #a01a1f;
color: #ffffff;
}
.btn-pinterest.btn-social-icon-text {
padding: 0 1.5rem 0 0;
background: #e04046;
}
.btn-pinterest.btn-social-icon-text i {
background: #cc2127;
padding: .75rem;
display: inline-block;
margin-right: 1.5rem;
border-radius: 15px 0 0 15px;
}
.btn-outline-pinterest {
border: 1px solid #cc2127;
color: #cc2127;
}
.btn-outline-pinterest:hover {
background: #cc2127;
color: #ffffff;
}
.btn-youtube {
background: #e52d27;
color: #ffffff;
}
.btn-youtube:hover, .btn-youtube:focus {
background: #c21d17;
color: #ffffff;
}
.btn-youtube.btn-social-icon-text {
padding: 0 1.5rem 0 0;
background: #ea5955;
}
.btn-youtube.btn-social-icon-text i {
background: #e52d27;
padding: .75rem;
display: inline-block;
margin-right: 1.5rem;
border-radius: 15px 0 0 15px;
}
.btn-outline-youtube {
border: 1px solid #e52d27;
color: #e52d27;
}
.btn-outline-youtube:hover {
background: #e52d27;
color: #ffffff;
}
.btn-github {
background: #333333;
color: #ffffff;
}
.btn-github:hover, .btn-github:focus {
background: #1a1a1a;
color: #ffffff;
}
.btn-github.btn-social-icon-text {
padding: 0 1.5rem 0 0;
background: #4d4d4d;
}
.btn-github.btn-social-icon-text i {
background: #333333;
padding: .75rem;
display: inline-block;
margin-right: 1.5rem;
border-radius: 15px 0 0 15px;
}
.btn-outline-github {
border: 1px solid #333333;
color: #333333;
}
.btn-outline-github:hover {
background: #333333;
color: #ffffff;
}
.btn-behance {
background: #1769ff;
color: #ffffff;
}
.btn-behance:hover, .btn-behance:focus {
background: #0050e3;
color: #ffffff;
}
.btn-behance.btn-social-icon-text {
padding: 0 1.5rem 0 0;
background: #4a8aff;
}
.btn-behance.btn-social-icon-text i {
background: #1769ff;
padding: .75rem;
display: inline-block;
margin-right: 1.5rem;
border-radius: 15px 0 0 15px;
}
.btn-outline-behance {
border: 1px solid #1769ff;
color: #1769ff;
}
.btn-outline-behance:hover {
background: #1769ff;
color: #ffffff;
}
.btn-dribbble {
background: #ea4c89;
color: #ffffff;
}
.btn-dribbble:hover, .btn-dribbble:focus {
background: #e51e6b;
color: #ffffff;
}
.btn-dribbble.btn-social-icon-text {
padding: 0 1.5rem 0 0;
background: #ef7aa7;
}
.btn-dribbble.btn-social-icon-text i {
background: #ea4c89;
padding: .75rem;
display: inline-block;
margin-right: 1.5rem;
border-radius: 15px 0 0 15px;
}
.btn-outline-dribbble {
border: 1px solid #ea4c89;
color: #ea4c89;
}
.btn-outline-dribbble:hover {
background: #ea4c89;
color: #ffffff;
}
.btn-reddit {
background: #ff4500;
color: #ffffff;
}
.btn-reddit:hover, .btn-reddit:focus {
background: #cc3700;
color: #ffffff;
}
.btn-reddit.btn-social-icon-text {
padding: 0 1.5rem 0 0;
background: #ff6a33;
}
.btn-reddit.btn-social-icon-text i {
background: #ff4500;
padding: .75rem;
display: inline-block;
margin-right: 1.5rem;
border-radius: 15px 0 0 15px;
}
.btn-outline-reddit {
border: 1px solid #ff4500;
color: #ff4500;
}
.btn-outline-reddit:hover {
background: #ff4500;
color: #ffffff;
}
/* inverse buttons */ /* inverse buttons */
.btn-inverse-primary { .btn-inverse-primary {
background-color: rgba(75, 73, 172, 0.2); background-color: rgba(75, 73, 172, 0.2);

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

@ -48,7 +48,7 @@ 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('admin/images/aduan/' . $aduan->bukti_foto) }}" alt="Bukti Aduan" <img src="{{ asset('assets/user/img/aduan/' . $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

View File

@ -87,7 +87,7 @@ class="form-control file-upload-info"
{{-- PREVIEW FOTO LAMA --}} {{-- PREVIEW FOTO LAMA --}}
@if ($kategori->foto_kategori) @if ($kategori->foto_kategori)
<div class="mt-2"> <div class="mt-2">
<img src="{{ asset('admin/images/kategori/' . $kategori->foto_kategori) }}" <img src="{{ asset('assets/admin/images/kategori-tps/' . $kategori->foto_kategori) }}"
width="250" width="250"
class="img-thumbnail"> class="img-thumbnail">
</div> </div>

View File

@ -22,7 +22,7 @@
<div> <div>
<h4 class="mb-0 card-title">Data Kategori TPS</h4> <h4 class="mb-0 card-title">Data Kategori TPS</h4>
<p class="mb-0 card-description"> <p class="mb-0 card-description">
Daftar Kategori Tempat Pembangunan Sampah (TPS) Daftar Kategori Tempat Pembuangan Sampah (TPS)
</p> </p>
</div> </div>
<a href="{{ route('admin.kategori.create') }}" class="btn btn-primary"> <a href="{{ route('admin.kategori.create') }}" class="btn btn-primary">
@ -46,7 +46,8 @@
<td>{{ $item->nama_kategori }}</td> <td>{{ $item->nama_kategori }}</td>
<td> <td>
@if ($item->foto_kategori) @if ($item->foto_kategori)
<img src="{{ asset('assets/admin/images/kategori/' . $item->foto_kategori) }}" alt="Foto Kategori" <img src="{{ asset('assets/admin/images/kategori-tps/' . $item->foto_kategori) }}"
alt="Foto Kategori"
style="width:200px; height:auto; border-radius:2px;"> style="width:200px; height:auto; border-radius:2px;">
@else @else
<span class="text-muted">-</span> <span class="text-muted">-</span>
@ -62,8 +63,8 @@
class="btn btn-warning btn-sm me-1" title="Edit"> class="btn btn-warning btn-sm me-1" title="Edit">
<i class="bi bi-pencil-square"></i> <i class="bi bi-pencil-square"></i>
</a> </a>
<form action="{{ route('admin.tps.destroy', $item->id_kategori_tps) }}" method="POST" <form action="{{ route('admin.kategori.destroy', $item->id_kategori_tps) }}"
class="form-hapus" style="display:inline;"> method="POST" class="form-hapus" style="display:inline;">
@csrf @csrf
@method('DELETE') @method('DELETE')
<button type="submit" class="btn btn-danger btn-sm"> <button type="submit" class="btn btn-danger btn-sm">
@ -98,8 +99,7 @@ class="form-hapus" style="display:inline;">
confirmButtonText: 'Ya, Hapus', confirmButtonText: 'Ya, Hapus',
cancelButtonText: 'Batal', cancelButtonText: 'Batal',
didOpen: () => { didOpen: () => {
document.querySelector('.swal2-popup').style.fontFamily = document.querySelector('.swal2-popup').style.fontFamily = 'Nunito, sans-serif';
'Nunito, sans-serif';
} }
}).then((result) => { }).then((result) => {
if (result.isConfirmed) { if (result.isConfirmed) {

View File

@ -47,7 +47,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/user/img/kategori/' . $kategori->foto_kategori) }}" <img src="{{ asset('assets/admin/images/kategori-tps/' . $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') }}"

View File

@ -45,7 +45,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/user/images/tps/'.$item->foto_tps) : asset('assets/user/img/no-image.png') }}"> data-foto="{{ $item->foto_tps ? asset('assets/admin/images/tps/'.$item->foto_tps) : asset('assets/user/img/no-image.png') }}">
{{ $item->nama_tps }} {{ $item->nama_tps }}
</option> </option>
@endforeach @endforeach

View File

@ -38,7 +38,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/user/img/tps/'.$tps->foto_tps) : asset('assets/user/img/about-portrait.jpg') }}" <img src="{{ $tps->foto_tps ? asset('assets/admin/images/tps/'.$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>

View File

@ -146,9 +146,9 @@
<div class="service-item"> <div class="service-item">
<div class="img"> <div class="img">
@if ($item->foto_kategori) @if ($item->foto_kategori && file_exists(public_path('assets/admin/images/kategori-tps/' . $item->foto_kategori)))
<img src="{{ asset('assets/user/img/kategori/' . $item->foto_kategori) }}" class="img-fluid" <img src="{{ asset('assets/admin/images/kategori-tps/' . $item->foto_kategori) }}"
alt="{{ $item->nama_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">