HALAMAN PROFILE B,M SELESAI Y

This commit is contained in:
nylaaptr 2026-04-07 00:11:36 +07:00
parent e66a4987b5
commit fe3b516c80
14 changed files with 355 additions and 285 deletions

View File

@ -3,6 +3,8 @@
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\User; use App\Models\User;
use Illuminate\Support\Facades\Auth; // 🔥 TAMBAH
use Illuminate\Support\Facades\Storage; // 🔥 TAMBAH
class UserController extends Controller class UserController extends Controller
{ {
@ -20,7 +22,7 @@ public function index(Request $request)
$users = $query->paginate(10)->withQueryString(); $users = $query->paginate(10)->withQueryString();
return view('data_user', compact('users')); // sesuaikan dengan blade kamu return view('data_user', compact('users'));
} }
public function create() public function create()
@ -33,4 +35,27 @@ public function destroy($id)
User::where('id_user', $id)->delete(); User::where('id_user', $id)->delete();
return redirect()->back()->with('success', 'User berhasil dihapus.'); return redirect()->back()->with('success', 'User berhasil dihapus.');
} }
// 🔥🔥🔥 TAMBAHAN UNTUK UPLOAD PP
public function uploadPP(Request $request)
{
$request->validate([
'foto' => 'required|image|mimes:jpg,jpeg,png|max:2048'
]);
// 🔥 WAJIB pakai ini
$user = Auth::user();
if ($request->hasFile('foto')) {
$file = $request->file('foto');
$namaFile = time().'_'.$file->getClientOriginalName();
$file->move(public_path('uploads/profile'), $namaFile);
$user->profile_photo = $namaFile;
}
$user->save();
return back()->with('success', 'Berhasil upload PP');
}
} }

View File

@ -1197,14 +1197,17 @@ class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
</nav> </nav>
<div class="user-actions"> <div class="user-actions">
{{-- Notifikasi hanya muncul kalau sudah login --}}
{{-- Notifikasi hanya kalau login --}}
@auth @auth
<a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;"> <a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;">
<i class="fas fa-bell"></i> <i class="fas fa-bell"></i>
@php @php
$jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id()) $jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id())
->where('status_baca', 0)->count(); ->where('status_baca', 0)->count();
@endphp @endphp
@if($jumlahBelumBaca > 0) @if($jumlahBelumBaca > 0)
<span style="position:absolute; top:-5px; right:-5px; <span style="position:absolute; top:-5px; right:-5px;
background:#ef4444; color:white; border-radius:50%; background:#ef4444; color:white; border-radius:50%;
@ -1217,29 +1220,19 @@ class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
</a> </a>
@endauth @endauth
{{-- Conditional: Guest vs Authenticated --}} {{-- Guest --}}
@guest @guest
<a href="{{ route('login') }}" class="nav-item login-link"> <a href="{{ route('login') }}" class="nav-item login-link">
<i class="fas fa-sign-in-alt me-1"></i> Login <i class="fas fa-sign-in-alt me-1"></i> Login
</a> </a>
@else @else
<div class="profile-dropdown"> {{-- HANYA ICON PROFILE --}}
<div class="profile-icon" onclick="toggleDropdown()"> <a href="{{ route('halaman-profil') }}" class="profile-icon">
<i class="fas fa-user"></i> <img src="{{ Auth::user()->profile_photo
</div> ? asset('storage/profile_photos/' . Auth::user()->profile_photo)
<div class="dropdown-menu" id="dropdownMenu"> : asset('default-avatar.png') }}"
<a href="{{ route('halaman-profil') }}"> alt="Profile" class="profile-img">
<i class="fas fa-user-circle"></i> Lihat Profil </a>
</a>
<hr>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">
<i class="fas fa-sign-out-alt"></i> Logout
</button>
</form>
</div>
</div>
@endguest @endguest
</div> </div>
</div> </div>

View File

@ -841,25 +841,29 @@ class="nav-item {{ request()->routeIs('halaman-katalog') ? 'active' : '' }}">
class="nav-item {{ request()->routeIs('halaman-chatbot') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('halaman-chatbot') ? 'active' : '' }}">
ChatBot ChatBot
</a> </a>
<a href="{{ route('riwayat-pemesanan') }}" @auth
class="nav-item {{ request()->routeIs('riwayat-pemesanan') ? 'active' : '' }}"> <a href="{{ route('riwayat-pemesanan') }}" class="nav-item {{ request()->routeIs('riwayat-pemesanan') ? 'active' : '' }}">
Riwayat Pemesanan Riwayat Pemesanan
</a> </a>
@endauth
<a href="{{ route('halaman-kontak') }}" <a href="{{ route('halaman-kontak') }}"
class="nav-item {{ request()->routeIs('halaman-kontak') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
Kontak Kontak
</a> </a>
</nav> </nav>
<div class="user-actions"> <div class="user-actions">
{{-- Notifikasi hanya muncul kalau sudah login --}}
{{-- Notifikasi hanya kalau login --}}
@auth @auth
<a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;"> <a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;">
<i class="fas fa-bell"></i> <i class="fas fa-bell"></i>
@php @php
$jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id()) $jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id())
->where('status_baca', 0)->count(); ->where('status_baca', 0)->count();
@endphp @endphp
@if($jumlahBelumBaca > 0) @if($jumlahBelumBaca > 0)
<span style="position:absolute; top:-5px; right:-5px; <span style="position:absolute; top:-5px; right:-5px;
background:#ef4444; color:white; border-radius:50%; background:#ef4444; color:white; border-radius:50%;
@ -872,29 +876,19 @@ class="nav-item {{ request()->routeIs('halaman-kontak') ? 'active' : '' }}">
</a> </a>
@endauth @endauth
{{-- Conditional: Guest vs Authenticated --}} {{-- Guest --}}
@guest @guest
<a href="{{ route('login') }}" class="nav-item login-link"> <a href="{{ route('login') }}" class="nav-item login-link">
<i class="fas fa-sign-in-alt me-1"></i> Login <i class="fas fa-sign-in-alt me-1"></i> Login
</a> </a>
@else @else
<div class="profile-dropdown"> {{-- HANYA ICON PROFILE --}}
<div class="profile-icon" onclick="toggleDropdown()"> <a href="{{ route('halaman-profil') }}" class="profile-icon">
<i class="fas fa-user"></i> <img src="{{ Auth::user()->profile_photo
</div> ? asset('storage/profile_photos/' . Auth::user()->profile_photo)
<div class="dropdown-menu" id="dropdownMenu"> : asset('default-avatar.png') }}"
<a href="{{ route('halaman-profil') }}"> alt="Profile" class="profile-img">
<i class="fas fa-user-circle"></i> Lihat Profil </a>
</a>
<hr>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">
<i class="fas fa-sign-out-alt"></i> Logout
</button>
</form>
</div>
</div>
@endguest @endguest
</div> </div>
</div> </div>

View File

@ -610,14 +610,17 @@ class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
</nav> </nav>
<div class="user-actions"> <div class="user-actions">
{{-- Notifikasi hanya muncul kalau sudah login --}}
{{-- Notifikasi hanya kalau login --}}
@auth @auth
<a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;"> <a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;">
<i class="fas fa-bell"></i> <i class="fas fa-bell"></i>
@php @php
$jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id()) $jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id())
->where('status_baca', 0)->count(); ->where('status_baca', 0)->count();
@endphp @endphp
@if($jumlahBelumBaca > 0) @if($jumlahBelumBaca > 0)
<span style="position:absolute; top:-5px; right:-5px; <span style="position:absolute; top:-5px; right:-5px;
background:#ef4444; color:white; border-radius:50%; background:#ef4444; color:white; border-radius:50%;
@ -630,29 +633,19 @@ class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
</a> </a>
@endauth @endauth
{{-- Conditional: Guest vs Authenticated --}} {{-- Guest --}}
@guest @guest
<a href="{{ route('login') }}" class="nav-item login-link"> <a href="{{ route('login') }}" class="nav-item login-link">
<i class="fas fa-sign-in-alt me-1"></i> Login <i class="fas fa-sign-in-alt me-1"></i> Login
</a> </a>
@else @else
<div class="profile-dropdown"> {{-- HANYA ICON PROFILE --}}
<div class="profile-icon" onclick="toggleDropdown()"> <a href="{{ route('halaman-profil') }}" class="profile-icon">
<i class="fas fa-user"></i> <img src="{{ Auth::user()->profile_photo
</div> ? asset('storage/profile_photos/' . Auth::user()->profile_photo)
<div class="dropdown-menu" id="dropdownMenu"> : asset('default-avatar.png') }}"
<a href="{{ route('halaman-profil') }}"> alt="Profile" class="profile-img">
<i class="fas fa-user-circle"></i> Lihat Profil </a>
</a>
<hr>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">
<i class="fas fa-sign-out-alt"></i> Logout
</button>
</form>
</div>
</div>
@endguest @endguest
</div> </div>
</div> </div>

View File

@ -695,14 +695,17 @@ class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
</nav> </nav>
<div class="user-actions"> <div class="user-actions">
{{-- Notifikasi hanya muncul kalau sudah login --}}
{{-- Notifikasi hanya kalau login --}}
@auth @auth
<a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;"> <a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;">
<i class="fas fa-bell"></i> <i class="fas fa-bell"></i>
@php @php
$jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id()) $jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id())
->where('status_baca', 0)->count(); ->where('status_baca', 0)->count();
@endphp @endphp
@if($jumlahBelumBaca > 0) @if($jumlahBelumBaca > 0)
<span style="position:absolute; top:-5px; right:-5px; <span style="position:absolute; top:-5px; right:-5px;
background:#ef4444; color:white; border-radius:50%; background:#ef4444; color:white; border-radius:50%;
@ -715,29 +718,19 @@ class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
</a> </a>
@endauth @endauth
{{-- Conditional: Guest vs Authenticated --}} {{-- Guest --}}
@guest @guest
<a href="{{ route('login') }}" class="nav-item login-link"> <a href="{{ route('login') }}" class="nav-item login-link">
<i class="fas fa-sign-in-alt me-1"></i> Login <i class="fas fa-sign-in-alt me-1"></i> Login
</a> </a>
@else @else
<div class="profile-dropdown"> {{-- HANYA ICON PROFILE --}}
<div class="profile-icon" onclick="toggleDropdown()"> <a href="{{ route('halaman-profil') }}" class="profile-icon">
<i class="fas fa-user"></i> <img src="{{ Auth::user()->profile_photo
</div> ? asset('storage/profile_photos/' . Auth::user()->profile_photo)
<div class="dropdown-menu" id="dropdownMenu"> : asset('default-avatar.png') }}"
<a href="{{ route('halaman-profil') }}"> alt="Profile" class="profile-img">
<i class="fas fa-user-circle"></i> Lihat Profil </a>
</a>
<hr>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">
<i class="fas fa-sign-out-alt"></i> Logout
</button>
</form>
</div>
</div>
@endguest @endguest
</div> </div>
</div> </div>

View File

@ -888,14 +888,17 @@ class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
</nav> </nav>
<div class="user-actions"> <div class="user-actions">
{{-- Notifikasi hanya muncul kalau sudah login --}}
{{-- Notifikasi hanya kalau login --}}
@auth @auth
<a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;"> <a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;">
<i class="fas fa-bell"></i> <i class="fas fa-bell"></i>
@php @php
$jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id()) $jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id())
->where('status_baca', 0)->count(); ->where('status_baca', 0)->count();
@endphp @endphp
@if($jumlahBelumBaca > 0) @if($jumlahBelumBaca > 0)
<span style="position:absolute; top:-5px; right:-5px; <span style="position:absolute; top:-5px; right:-5px;
background:#ef4444; color:white; border-radius:50%; background:#ef4444; color:white; border-radius:50%;
@ -908,29 +911,19 @@ class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
</a> </a>
@endauth @endauth
{{-- Conditional: Guest vs Authenticated --}} {{-- Guest --}}
@guest @guest
<a href="{{ route('login') }}" class="nav-item login-link"> <a href="{{ route('login') }}" class="nav-item login-link">
<i class="fas fa-sign-in-alt me-1"></i> Login <i class="fas fa-sign-in-alt me-1"></i> Login
</a> </a>
@else @else
<div class="profile-dropdown"> {{-- HANYA ICON PROFILE --}}
<div class="profile-icon" onclick="toggleDropdown()"> <a href="{{ route('halaman-profil') }}" class="profile-icon">
<i class="fas fa-user"></i> <img src="{{ Auth::user()->profile_photo
</div> ? asset('storage/profile_photos/' . Auth::user()->profile_photo)
<div class="dropdown-menu" id="dropdownMenu"> : asset('default-avatar.png') }}"
<a href="{{ route('halaman-profil') }}"> alt="Profile" class="profile-img">
<i class="fas fa-user-circle"></i> Lihat Profil </a>
</a>
<hr>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">
<i class="fas fa-sign-out-alt"></i> Logout
</button>
</form>
</div>
</div>
@endguest @endguest
</div> </div>
</div> </div>

View File

@ -46,25 +46,29 @@ class="nav-item {{ request()->routeIs('halaman-katalog') ? 'active' : '' }}">
class="nav-item {{ request()->routeIs('halaman-chatbot') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('halaman-chatbot') ? 'active' : '' }}">
ChatBot ChatBot
</a> </a>
<a href="{{ route('riwayat-pemesanan') }}" @auth
class="nav-item {{ request()->routeIs('riwayat-pemesanan') ? 'active' : '' }}"> <a href="{{ route('riwayat-pemesanan') }}" class="nav-item {{ request()->routeIs('riwayat-pemesanan') ? 'active' : '' }}">
Riwayat Pemesanan Riwayat Pemesanan
</a> </a>
@endauth
<a href="{{ route('halaman-kontak') }}" <a href="{{ route('halaman-kontak') }}"
class="nav-item {{ request()->routeIs('halaman-kontak') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
Kontak Kontak
</a> </a>
</nav> </nav>
<div class="user-actions"> <div class="user-actions">
{{-- Notifikasi hanya muncul kalau sudah login --}}
{{-- Notifikasi hanya kalau login --}}
@auth @auth
<a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;"> <a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;">
<i class="fas fa-bell"></i> <i class="fas fa-bell"></i>
@php @php
$jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id()) $jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id())
->where('status_baca', 0)->count(); ->where('status_baca', 0)->count();
@endphp @endphp
@if($jumlahBelumBaca > 0) @if($jumlahBelumBaca > 0)
<span style="position:absolute; top:-5px; right:-5px; <span style="position:absolute; top:-5px; right:-5px;
background:#ef4444; color:white; border-radius:50%; background:#ef4444; color:white; border-radius:50%;
@ -77,29 +81,19 @@ class="nav-item {{ request()->routeIs('halaman-kontak') ? 'active' : '' }}">
</a> </a>
@endauth @endauth
{{-- Conditional: Guest vs Authenticated --}} {{-- Guest --}}
@guest @guest
<a href="{{ route('login') }}" class="nav-item login-link"> <a href="{{ route('login') }}" class="nav-item login-link">
<i class="fas fa-sign-in-alt me-1"></i> Login <i class="fas fa-sign-in-alt me-1"></i> Login
</a> </a>
@else @else
<div class="profile-dropdown"> {{-- HANYA ICON PROFILE --}}
<div class="profile-icon" onclick="toggleDropdown()"> <a href="{{ route('halaman-profil') }}" class="profile-icon">
<i class="fas fa-user"></i> <img src="{{ Auth::user()->profile_photo
</div> ? asset('storage/profile_photos/' . Auth::user()->profile_photo)
<div class="dropdown-menu" id="dropdownMenu"> : asset('default-avatar.png') }}"
<a href="{{ route('halaman-profil') }}"> alt="Profile" class="profile-img">
<i class="fas fa-user-circle"></i> Lihat Profil </a>
</a>
<hr>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">
<i class="fas fa-sign-out-alt"></i> Logout
</button>
</form>
</div>
</div>
@endguest @endguest
</div> </div>
</div> </div>

View File

@ -515,15 +515,17 @@ class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
</nav> </nav>
<div class="user-actions"> <div class="user-actions">
{{-- Notifikasi hanya muncul kalau sudah login --}} {{-- Notifikasi hanya kalau login --}}
@auth @auth
<a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;"> <a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;">
<i class="fas fa-bell"></i> <i class="fas fa-bell"></i>
@php @php
$jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id()) $jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id())
->where('status_baca', 0)->count(); ->where('status_baca', 0)->count();
@endphp @endphp
@if($jumlahBelumBaca > 0) @if($jumlahBelumBaca > 0)
<span style="position:absolute; top:-5px; right:-5px; <span style="position:absolute; top:-5px; right:-5px;
background:#ef4444; color:white; border-radius:50%; background:#ef4444; color:white; border-radius:50%;
@ -536,29 +538,19 @@ class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
</a> </a>
@endauth @endauth
{{-- Conditional: Guest vs Authenticated --}} {{-- Guest --}}
@guest @guest
<a href="{{ route('login') }}" class="nav-item login-link"> <a href="{{ route('login') }}" class="nav-item login-link">
<i class="fas fa-sign-in-alt me-1"></i> Login <i class="fas fa-sign-in-alt me-1"></i> Login
</a> </a>
@else @else
<div class="profile-dropdown"> {{-- HANYA ICON PROFILE --}}
<div class="profile-icon" onclick="toggleDropdown()"> <a href="{{ route('halaman-profil') }}" class="profile-icon">
<i class="fas fa-user"></i> <img src="{{ Auth::user()->profile_photo
</div> ? asset('storage/profile_photos/' . Auth::user()->profile_photo)
<div class="dropdown-menu" id="dropdownMenu"> : asset('default-avatar.png') }}"
<a href="{{ route('halaman-profil') }}"> alt="Profile" class="profile-img">
<i class="fas fa-user-circle"></i> Lihat Profil </a>
</a>
<hr>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">
<i class="fas fa-sign-out-alt"></i> Logout
</button>
</form>
</div>
</div>
@endguest @endguest
</div> </div>
</div> </div>

View File

@ -690,14 +690,17 @@ class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
</nav> </nav>
<div class="user-actions"> <div class="user-actions">
{{-- Notifikasi hanya muncul kalau sudah login --}}
{{-- Notifikasi hanya kalau login --}}
@auth @auth
<a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;"> <a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;">
<i class="fas fa-bell"></i> <i class="fas fa-bell"></i>
@php @php
$jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id()) $jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id())
->where('status_baca', 0)->count(); ->where('status_baca', 0)->count();
@endphp @endphp
@if($jumlahBelumBaca > 0) @if($jumlahBelumBaca > 0)
<span style="position:absolute; top:-5px; right:-5px; <span style="position:absolute; top:-5px; right:-5px;
background:#ef4444; color:white; border-radius:50%; background:#ef4444; color:white; border-radius:50%;
@ -710,29 +713,19 @@ class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
</a> </a>
@endauth @endauth
{{-- Conditional: Guest vs Authenticated --}} {{-- Guest --}}
@guest @guest
<a href="{{ route('login') }}" class="nav-item login-link"> <a href="{{ route('login') }}" class="nav-item login-link">
<i class="fas fa-sign-in-alt me-1"></i> Login <i class="fas fa-sign-in-alt me-1"></i> Login
</a> </a>
@else @else
<div class="profile-dropdown"> {{-- HANYA ICON PROFILE --}}
<div class="profile-icon" onclick="toggleDropdown()"> <a href="{{ route('halaman-profil') }}" class="profile-icon">
<i class="fas fa-user"></i> <img src="{{ Auth::user()->profile_photo
</div> ? asset('storage/profile_photos/' . Auth::user()->profile_photo)
<div class="dropdown-menu" id="dropdownMenu"> : asset('default-avatar.png') }}"
<a href="{{ route('halaman-profil') }}"> alt="Profile" class="profile-img">
<i class="fas fa-user-circle"></i> Lihat Profil </a>
</a>
<hr>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">
<i class="fas fa-sign-out-alt"></i> Logout
</button>
</form>
</div>
</div>
@endguest @endguest
</div> </div>
</div> </div>

View File

@ -215,6 +215,75 @@
color: #64748b; color: #64748b;
font-size: 1.1rem; font-size: 1.1rem;
} }
/* PP */
.avatar-wrapper {
position: relative;
width: 80px;
height: 80px;
margin: auto;
}
.profile-avatar,
.profile-avatar-img {
width: 80px;
height: 80px;
border-radius: 50%;
}
.profile-avatar {
background: #7AB2D3;
color: white;
font-size: 2rem;
font-weight: bold;
display: flex;
align-items: center;
justify-content: center;
}
.profile-avatar-img {
object-fit: cover;
}
/* tombol + */
.edit-avatar {
position: absolute;
bottom: 0;
right: 0;
background: #1E3A5F;
color: white;
width: 24px;
height: 24px;
border-radius: 50%;
font-size: 12px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
.form-input {
width: 100%;
padding: 10px 12px;
border-radius: 10px;
border: 1px solid #ddd;
font-size: 0.9rem;
margin-top: 5px;
}
.form-input:focus {
outline: none;
border-color: #7AB2D3;
}
.btn-save {
background: #22c55e;
color: white;
}
.btn-save:hover {
background: #16a34a;
}
/* Personal Information Section */ /* Personal Information Section */
.personal-info { .personal-info {
@ -547,25 +616,29 @@ class="nav-item {{ request()->routeIs('halaman-katalog') ? 'active' : '' }}">
class="nav-item {{ request()->routeIs('halaman-chatbot') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('halaman-chatbot') ? 'active' : '' }}">
ChatBot ChatBot
</a> </a>
<a href="{{ route('riwayat-pemesanan') }}" @auth
class="nav-item {{ request()->routeIs('riwayat-pemesanan') ? 'active' : '' }}"> <a href="{{ route('riwayat-pemesanan') }}" class="nav-item {{ request()->routeIs('riwayat-pemesanan') ? 'active' : '' }}">
Riwayat Pemesanan Riwayat Pemesanan
</a> </a>
@endauth
<a href="{{ route('halaman-kontak') }}" <a href="{{ route('halaman-kontak') }}"
class="nav-item {{ request()->routeIs('halaman-kontak') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
Kontak Kontak
</a> </a>
</nav> </nav>
<div class="user-actions"> <div class="user-actions">
{{-- Notifikasi hanya muncul kalau sudah login --}}
{{-- Notifikasi hanya kalau login --}}
@auth @auth
<a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;"> <a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;">
<i class="fas fa-bell"></i> <i class="fas fa-bell"></i>
@php @php
$jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id()) $jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id())
->where('status_baca', 0)->count(); ->where('status_baca', 0)->count();
@endphp @endphp
@if($jumlahBelumBaca > 0) @if($jumlahBelumBaca > 0)
<span style="position:absolute; top:-5px; right:-5px; <span style="position:absolute; top:-5px; right:-5px;
background:#ef4444; color:white; border-radius:50%; background:#ef4444; color:white; border-radius:50%;
@ -578,29 +651,19 @@ class="nav-item {{ request()->routeIs('halaman-kontak') ? 'active' : '' }}">
</a> </a>
@endauth @endauth
{{-- Conditional: Guest vs Authenticated --}} {{-- Guest --}}
@guest @guest
<a href="{{ route('login') }}" class="nav-item login-link"> <a href="{{ route('login') }}" class="nav-item login-link">
<i class="fas fa-sign-in-alt me-1"></i> Login <i class="fas fa-sign-in-alt me-1"></i> Login
</a> </a>
@else @else
<div class="profile-dropdown"> {{-- HANYA ICON PROFILE --}}
<div class="profile-icon" onclick="toggleDropdown()"> <a href="{{ route('halaman-profil') }}" class="profile-icon">
<i class="fas fa-user"></i> <img src="{{ Auth::user()->profile_photo
</div> ? asset('storage/profile_photos/' . Auth::user()->profile_photo)
<div class="dropdown-menu" id="dropdownMenu"> : asset('default-avatar.png') }}"
<a href="{{ route('halaman-profil') }}"> alt="Profile" class="profile-img">
<i class="fas fa-user-circle"></i> Lihat Profil </a>
</a>
<hr>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">
<i class="fas fa-sign-out-alt"></i> Logout
</button>
</form>
</div>
</div>
@endguest @endguest
</div> </div>
</div> </div>
@ -609,58 +672,110 @@ class="nav-item {{ request()->routeIs('halaman-kontak') ? 'active' : '' }}">
<!-- Main Content --> <!-- Main Content -->
<div class="main-content"> <div class="main-content">
<div class="profile-container"> <div class="profile-container">
@php
$user = Auth::user();
$inisial = strtoupper(substr($user->name, 0, 1));
@endphp
<!-- Profile Header --> <!-- Profile Header -->
<div class="profile-header"> <div class="profile-header">
<div class="profile-avatar">N</div> @php
<h2 class="profile-name">Nayla Putri Wijaya</h2> $user = Auth::user();
<p class="profile-email">nayla.pw@gmail.com</p> $inisial = strtoupper(substr($user->name, 0, 1));
@endphp
<div class="avatar-wrapper">
@if($user->profile_photo)
<img src="{{ asset('storage/profile_photos/' . $user->profile_photo) }}"
class="profile-avatar-img">
@else
<div class="profile-avatar">{{ $inisial }}</div>
@endif
<!-- tombol upload -->
<label for="upload-photo" class="edit-avatar">
<i class="fas fa-plus"></i>
</label>
<form action="{{ route('upload.pp') }}" method="POST" enctype="multipart/form-data">
@csrf
<input type="file" id="upload-photo" name="photo" hidden onchange="this.form.submit()">
</form>
</div>
<h2 class="profile-name">{{ $user->name }}</h2>
<p class="profile-email">{{ $user->email }}</p>
</div> </div>
<!-- Personal Information --> <!-- Personal Information -->
<div class="personal-info"> <form action="{{ route('profile.update') }}" method="POST">
<h3 class="section-title">Informasi Pribadi</h3> @csrf
<div class="info-grid">
<div class="info-item"> <div class="personal-info">
<span class="info-label">Nama Lengkap</span> <h3 class="section-title">Informasi Pribadi</h3>
<span class="info-value">Nayla Putri Wijaya</span>
</div> <div class="info-grid">
<div class="info-item">
<span class="info-label">Nomor HP</span> <div class="info-item">
<span class="info-value">0813-4567-8901</span> <span class="info-label">Nama Lengkap</span>
</div> <input type="text" name="nama_user"
<div class="info-item"> value="{{ $user->nama_user }}" class="form-input">
<span class="info-label">Email</span> </div>
<span class="info-value">nayla.pw@gmail.com</span>
</div> <div class="info-item">
<div class="info-item"> <span class="info-label">Nomor HP</span>
<span class="info-label">Nomor KTP</span> <input type="text" name="no_hp"
<span class="info-value">3171012345678901</span> value="{{ $user->no_hp }}" class="form-input">
</div> </div>
<div class="info-item">
<span class="info-label">Alamat</span> <div class="info-item">
<span class="info-value">Jl. Melati No. 45, RT 05/RW 03, Kelurahan Menteng, Kecamatan Menteng, Jakarta Pusat</span> <span class="info-label">Email</span>
</div> <input type="email" name="email_user"
<div class="info-item"> value="{{ $user->email_user }}" class="form-input">
<span class="info-label">Pekerjaan</span> </div>
<span class="info-value">PNS - Marketing Staff</span>
<div class="info-item full">
<span class="info-label">Alamat</span>
<textarea name="alamat" class="form-input">{{ $user->alamat }}</textarea>
</div>
<div class="info-item">
<span class="info-label">Pekerjaan</span>
<input type="text" name="pekerjaan"
value="{{ $user->pekerjaan }}" class="form-input">
</div>
</div> </div>
</div> </div>
</div>
<!-- Security Settings -->
<!-- Security Settings --> <div class="security-section">
<div class="security-section"> <h4 class="security-title">Pengaturan Keamanan</h4>
<h4 class="security-title">Pengaturan Keamanan</h4>
<div class="security-actions"> <div class="security-actions">
<button class="security-btn btn-change-password"> <button type="button" class="security-btn btn-change-password">
<i class="fas fa-lock"></i> Ganti Password <i class="fas fa-lock"></i> Ganti Password
</button> </button>
<button class="security-btn btn-logout">
<i class="fas fa-sign-out-alt"></i> Logout <button type="submit" class="security-btn btn-save">
</button> <i class="fas fa-save"></i> Simpan Perubahan
</button>
<button type="button" class="security-btn btn-logout"
onclick="document.getElementById('logout-form').submit();">
<i class="fas fa-sign-out-alt"></i> Logout
</button>
</div>
</div> </div>
</div> </form>
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display:none;">
@csrf
</form>
</div> </div>
</div> </div>
<script> <script>
document.addEventListener("DOMContentLoaded", function () { document.addEventListener("DOMContentLoaded", function () {

View File

@ -723,25 +723,29 @@ class="nav-item {{ request()->routeIs('halaman-katalog') ? 'active' : '' }}">
class="nav-item {{ request()->routeIs('halaman-chatbot') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('halaman-chatbot') ? 'active' : '' }}">
ChatBot ChatBot
</a> </a>
<a href="{{ route('riwayat-pemesanan') }}" @auth
class="nav-item {{ request()->routeIs('riwayat-pemesanan') ? 'active' : '' }}"> <a href="{{ route('riwayat-pemesanan') }}" class="nav-item {{ request()->routeIs('riwayat-pemesanan') ? 'active' : '' }}">
Riwayat Pemesanan Riwayat Pemesanan
</a> </a>
@endauth
<a href="{{ route('halaman-kontak') }}" <a href="{{ route('halaman-kontak') }}"
class="nav-item {{ request()->routeIs('halaman-kontak') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
Kontak Kontak
</a> </a>
</nav> </nav>
<div class="user-actions"> <div class="user-actions">
{{-- Notifikasi hanya muncul kalau sudah login --}}
{{-- Notifikasi hanya kalau login --}}
@auth @auth
<a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;"> <a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;">
<i class="fas fa-bell"></i> <i class="fas fa-bell"></i>
@php @php
$jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id()) $jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id())
->where('status_baca', 0)->count(); ->where('status_baca', 0)->count();
@endphp @endphp
@if($jumlahBelumBaca > 0) @if($jumlahBelumBaca > 0)
<span style="position:absolute; top:-5px; right:-5px; <span style="position:absolute; top:-5px; right:-5px;
background:#ef4444; color:white; border-radius:50%; background:#ef4444; color:white; border-radius:50%;
@ -754,29 +758,19 @@ class="nav-item {{ request()->routeIs('halaman-kontak') ? 'active' : '' }}">
</a> </a>
@endauth @endauth
{{-- Conditional: Guest vs Authenticated --}} {{-- Guest --}}
@guest @guest
<a href="{{ route('login') }}" class="nav-item login-link"> <a href="{{ route('login') }}" class="nav-item login-link">
<i class="fas fa-sign-in-alt me-1"></i> Login <i class="fas fa-sign-in-alt me-1"></i> Login
</a> </a>
@else @else
<div class="profile-dropdown"> {{-- HANYA ICON PROFILE --}}
<div class="profile-icon" onclick="toggleDropdown()"> <a href="{{ route('halaman-profil') }}" class="profile-icon">
<i class="fas fa-user"></i> <img src="{{ Auth::user()->profile_photo
</div> ? asset('storage/profile_photos/' . Auth::user()->profile_photo)
<div class="dropdown-menu" id="dropdownMenu"> : asset('default-avatar.png') }}"
<a href="{{ route('halaman-profil') }}"> alt="Profile" class="profile-img">
<i class="fas fa-user-circle"></i> Lihat Profil </a>
</a>
<hr>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">
<i class="fas fa-sign-out-alt"></i> Logout
</button>
</form>
</div>
</div>
@endguest @endguest
</div> </div>
</div> </div>

View File

@ -1482,14 +1482,17 @@ class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
</nav> </nav>
<div class="user-actions"> <div class="user-actions">
{{-- Notifikasi hanya muncul kalau sudah login --}}
{{-- Notifikasi hanya kalau login --}}
@auth @auth
<a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;"> <a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;">
<i class="fas fa-bell"></i> <i class="fas fa-bell"></i>
@php @php
$jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id()) $jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id())
->where('status_baca', 0)->count(); ->where('status_baca', 0)->count();
@endphp @endphp
@if($jumlahBelumBaca > 0) @if($jumlahBelumBaca > 0)
<span style="position:absolute; top:-5px; right:-5px; <span style="position:absolute; top:-5px; right:-5px;
background:#ef4444; color:white; border-radius:50%; background:#ef4444; color:white; border-radius:50%;
@ -1502,29 +1505,19 @@ class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
</a> </a>
@endauth @endauth
{{-- Conditional: Guest vs Authenticated --}} {{-- Guest --}}
@guest @guest
<a href="{{ route('login') }}" class="nav-item login-link"> <a href="{{ route('login') }}" class="nav-item login-link">
<i class="fas fa-sign-in-alt me-1"></i> Login <i class="fas fa-sign-in-alt me-1"></i> Login
</a> </a>
@else @else
<div class="profile-dropdown"> {{-- HANYA ICON PROFILE --}}
<div class="profile-icon" onclick="toggleDropdown()"> <a href="{{ route('halaman-profil') }}" class="profile-icon">
<i class="fas fa-user"></i> <img src="{{ Auth::user()->profile_photo
</div> ? asset('storage/profile_photos/' . Auth::user()->profile_photo)
<div class="dropdown-menu" id="dropdownMenu"> : asset('default-avatar.png') }}"
<a href="{{ route('halaman-profil') }}"> alt="Profile" class="profile-img">
<i class="fas fa-user-circle"></i> Lihat Profil </a>
</a>
<hr>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">
<i class="fas fa-sign-out-alt"></i> Logout
</button>
</form>
</div>
</div>
@endguest @endguest
</div> </div>
</div> </div>

View File

@ -1806,15 +1806,17 @@ class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
</nav> </nav>
<div class="user-actions"> <div class="user-actions">
{{-- Notifikasi hanya muncul kalau sudah login --}} {{-- Notifikasi hanya kalau login --}}
@auth @auth
<a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;"> <a href="{{ route('halaman-notifikasi') }}" class="notification-icon" style="position:relative;">
<i class="fas fa-bell"></i> <i class="fas fa-bell"></i>
@php @php
$jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id()) $jumlahBelumBaca = \App\Models\Notifikasi::where('id_user', Auth::id())
->where('status_baca', 0)->count(); ->where('status_baca', 0)->count();
@endphp @endphp
@if($jumlahBelumBaca > 0) @if($jumlahBelumBaca > 0)
<span style="position:absolute; top:-5px; right:-5px; <span style="position:absolute; top:-5px; right:-5px;
background:#ef4444; color:white; border-radius:50%; background:#ef4444; color:white; border-radius:50%;
@ -1827,29 +1829,19 @@ class="nav-item {{ request()->routeIs('kontak') ? 'active' : '' }}">
</a> </a>
@endauth @endauth
{{-- Conditional: Guest vs Authenticated --}} {{-- Guest --}}
@guest @guest
<a href="{{ route('login') }}" class="nav-item login-link"> <a href="{{ route('login') }}" class="nav-item login-link">
<i class="fas fa-sign-in-alt me-1"></i> Login <i class="fas fa-sign-in-alt me-1"></i> Login
</a> </a>
@else @else
<div class="profile-dropdown"> {{-- HANYA ICON PROFILE --}}
<div class="profile-icon" onclick="toggleDropdown()"> <a href="{{ route('halaman-profil') }}" class="profile-icon">
<i class="fas fa-user"></i> <img src="{{ Auth::user()->profile_photo
</div> ? asset('storage/profile_photos/' . Auth::user()->profile_photo)
<div class="dropdown-menu" id="dropdownMenu"> : asset('default-avatar.png') }}"
<a href="{{ route('halaman-profil') }}"> alt="Profile" class="profile-img">
<i class="fas fa-user-circle"></i> Lihat Profil </a>
</a>
<hr>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">
<i class="fas fa-sign-out-alt"></i> Logout
</button>
</form>
</div>
</div>
@endguest @endguest
</div> </div>
</div> </div>

View File

@ -4,6 +4,7 @@
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\ChatbotController; use App\Http\Controllers\ChatbotController;
use App\Http\Controllers\AuthController; use App\Http\Controllers\AuthController;
use App\Http\Controllers\UserController;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -142,9 +143,14 @@
return view('halaman-profil'); return view('halaman-profil');
})->name('halaman-profil'); })->name('halaman-profil');
// 🔥 TAMBAHAN INI
Route::post('/upload-pp', [UserController::class, 'uploadPP'])->name('upload.pp');
Route::post('/update-profile', [UserController::class, 'updateProfile'])->name('profile.update');
}); });
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| 👨‍💻 ADMIN ROUTES (Hanya Admin) | 👨‍💻 ADMIN ROUTES (Hanya Admin)