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)
{
$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();
return redirect()->route('admin.aduan.index')

View File

@ -5,7 +5,6 @@
use App\Http\Controllers\Controller;
use App\Models\KategoriTps;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class KategoriTpsController extends Controller
{
@ -42,8 +41,15 @@ public function store(Request $request)
]
);
$data['foto_kategori'] = $request->file('foto_kategori')
->store('kategori', 'public');
// Upload foto ke public/assets/admin/images/kategori-tps
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);
@ -81,12 +87,17 @@ public function update(Request $request, $id)
);
if ($request->hasFile('foto_kategori')) {
if ($kategori->foto_kategori) {
Storage::disk('public')->delete($kategori->foto_kategori);
// Hapus foto lama jika ada
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')
->store('kategori', 'public');
$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;
}
$kategori->update($data);
@ -100,8 +111,8 @@ public function destroy($id)
{
$kategori = KategoriTps::findOrFail($id);
if ($kategori->foto_kategori) {
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));
}
$kategori->delete();

View File

@ -191,12 +191,18 @@ public function destroy($id)
{
$tps = LokasiTps::findOrFail($id);
if ($tps->foto_tps && file_exists(public_path($tps->foto_tps))) {
unlink(public_path($tps->foto_tps)); // hapus foto lama
// Path lengkap foto TPS
$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();
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',
]);
// Upload foto bukti
$fotoPath = $request->file('bukti_foto')
->store('aduan', 'public');
// 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;
}
// Simpan ke database
AduanTps::create([

View File

@ -11081,23 +11081,32 @@ .wizard > .actions fieldset:disabled a {
pointer-events: none;
}
.btn-primary, .wizard > .actions a {
.btn-primary,
.wizard > .actions a {
color: #fff;
background-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;
background-color: #3f3e91;
border-color: #3b3a88;
background: color-mix(in srgb, #00A86B, transparent 15%);
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;
background-color: #3f3e91;
border-color: #3b3a88;
box-shadow: 0 0 0 0.2rem rgba(102, 100, 184, 0.5);
/* Sama seperti hover, pakai color-mix agar lembut */
background: color-mix(in srgb, #00A86B, transparent 15%);
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 {
@ -11106,18 +11115,27 @@ .btn-primary.disabled, .wizard > .actions a.disabled, .btn-primary:disabled, .wi
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,
.wizard > .actions .show > a.dropdown-toggle {
color: #fff;
background-color: #3b3a88;
border-color: #37367f;
/* Gunakan color-mix agar sesuai hover/focus */
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,
.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 {
@ -20949,337 +20967,6 @@ .btn-group .btn + .btn, .fc .fc-button-group .btn + .btn, .btn-group .fc button
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 */
.btn-inverse-primary {
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)
<div class="form-group">
<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;">
</div>
@endif

View File

@ -87,7 +87,7 @@ class="form-control file-upload-info"
{{-- PREVIEW FOTO LAMA --}}
@if ($kategori->foto_kategori)
<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"
class="img-thumbnail">
</div>

View File

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

View File

@ -47,7 +47,7 @@ class="{{ $kat->id_kategori_tps == $kategori->id_kategori_tps ? 'active' : '' }}
{{-- Foto --}}
@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">
@else
<img src="{{ asset('assets/user/img/services.jpg') }}"

View File

@ -45,7 +45,7 @@
<option value="{{ $item->id_tps }}"
data-nama="{{ $item->nama_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 }}
</option>
@endforeach

View File

@ -38,7 +38,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/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"
style="object-fit:cover">
</div>

View File

@ -146,9 +146,9 @@
<div class="service-item">
<div class="img">
@if ($item->foto_kategori)
<img src="{{ asset('assets/user/img/kategori/' . $item->foto_kategori) }}" class="img-fluid"
alt="{{ $item->nama_kategori }}">
@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 }}">
@else
<img src="{{ asset('assets/user/img/services-1.jpg') }}" class="img-fluid"
alt="Default">