MIF_E31230302/resources/views/profile/edit.blade.php

168 lines
9.0 KiB
PHP

@extends('layouts.app')
@section('content')
<div class="container py-3">
<!-- Header Page -->
<div class="d-flex align-items-center justify-content-between mb-4">
<div>
<h3 class="fw-bold mb-1"><i class="fa-solid fa-id-card text-primary me-2"></i>Pengaturan Profil</h3>
<p class="text-muted mb-0">Kelola informasi akun dan kata sandi Anda.</p>
</div>
<a href="{{ route('dashboard') }}" class="btn btn-outline-secondary rounded-3">
<i class="fa-solid fa-arrow-left me-1"></i> Kembali ke Dashboard
</a>
</div>
<!-- Alert Notifikasi -->
@if (session('status') === 'profile-updated')
<div class="alert alert-success alert-dismissible fade show rounded-3 shadow-sm border-0 mb-4" role="alert">
<i class="fa-solid fa-circle-check me-2"></i> Data profil berhasil diperbarui dan disimpan ke database!
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
@elseif (session('status') === 'password-updated')
<div class="alert alert-success alert-dismissible fade show rounded-3 shadow-sm border-0 mb-4" role="alert">
<i class="fa-solid fa-key me-2"></i> Kata sandi berhasil diubah di database!
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
@endif
<div class="row g-4">
<!-- Form Update Data & Password -->
<div class="col-lg-7">
<!-- 1. Edit Informasi Akun -->
<div class="card border-0 shadow-sm rounded-4 mb-4">
<div class="card-header bg-white border-0 pt-4 px-4 pb-0">
<h5 class="fw-bold text-dark mb-1"><i class="fa-solid fa-user me-2 text-primary"></i>Informasi Akun</h5>
<small class="text-muted">Ubah nama dan email Anda di sini.</small>
</div>
<div class="card-body p-4">
<form method="post" action="{{ route('profile.update') }}">
@csrf
@method('patch')
<div class="mb-3">
<label for="name" class="form-label fw-semibold">Nama Lengkap</label>
<input type="text" class="form-control rounded-3 @error('name') is-invalid @enderror" id="name" name="name" value="{{ old('name', $user->name) }}" required autocomplete="name">
@error('name')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label for="email" class="form-label fw-semibold">Alamat Email</label>
<input type="email" class="form-control rounded-3 @error('email') is-invalid @enderror" id="email" name="email" value="{{ old('email', $user->email) }}" required autocomplete="username">
@error('email')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="d-flex justify-content-end">
<button type="submit" class="btn btn-primary fw-bold rounded-3 px-4">
<i class="fa-solid fa-floppy-disk me-1"></i> Simpan Profil
</button>
</div>
</form>
</div>
</div>
<!-- 2. Edit Password dengan Fitur Show/Hide Password -->
<div class="card border-0 shadow-sm rounded-4">
<div class="card-header bg-white border-0 pt-4 px-4 pb-0">
<h5 class="fw-bold text-dark mb-1"><i class="fa-solid fa-lock me-2 text-warning"></i>Ganti Kata Sandi</h5>
<small class="text-muted">Gunakan kata sandi yang aman demi keamanan akun.</small>
</div>
<div class="card-body p-4">
<form method="post" action="{{ route('profile.password.update') }}">
@csrf
@method('put')
<!-- Input Kata Sandi Saat Ini -->
<div class="mb-3">
<label for="current_password" class="form-label fw-semibold">Kata Sandi Saat Ini</label>
<div class="input-group">
<input type="password" class="form-control @error('current_password') is-invalid @enderror" id="current_password" name="current_password">
<button class="btn btn-outline-secondary" type="button" onclick="togglePasswordVisibility('current_password', this)">
<i class="fa-solid fa-eye"></i>
</button>
@error('current_password')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<!-- Input Kata Sandi Baru -->
<div class="mb-3">
<label for="password" class="form-label fw-semibold">Kata Sandi Baru</label>
<div class="input-group">
<input type="password" class="form-control @error('password') is-invalid @enderror" id="password" name="password">
<button class="btn btn-outline-secondary" type="button" onclick="togglePasswordVisibility('password', this)">
<i class="fa-solid fa-eye"></i>
</button>
@error('password')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<!-- Input Konfirmasi Kata Sandi Baru -->
<div class="mb-3">
<label for="password_confirmation" class="form-label fw-semibold">Konfirmasi Kata Sandi Baru</label>
<div class="input-group">
<input type="password" class="form-control" id="password_confirmation" name="password_confirmation">
<button class="btn btn-outline-secondary" type="button" onclick="togglePasswordVisibility('password_confirmation', this)">
<i class="fa-solid fa-eye"></i>
</button>
</div>
</div>
<div class="d-flex justify-content-end">
<button type="submit" class="btn btn-warning text-white fw-bold rounded-3 px-4">
<i class="fa-solid fa-key me-1"></i> Ubah Password
</button>
</div>
</form>
</div>
</div>
</div>
<!-- Kolom Kartu Identitas / Ringkasan Data -->
<div class="col-lg-5">
<div class="card border-0 shadow-sm rounded-4 text-center p-4 bg-white">
<div class="bg-primary-subtle text-primary rounded-circle d-flex align-items-center justify-content-center mx-auto mb-3" style="width: 80px; height: 80px; font-size: 2.2rem;">
<i class="fa-solid fa-user-graduate"></i>
</div>
<h5 class="fw-bold mb-1">{{ $user->name }}</h5>
<p class="text-muted small mb-3">{{ $user->email }}</p>
<div>
<span class="badge bg-primary px-3 py-2 rounded-pill text-uppercase fs-6">
<i class="fa-solid fa-shield-halved me-1"></i> {{ $user->role ?? 'Siswa' }}
</span>
</div>
<hr class="my-3 opacity-25">
<div class="text-start">
<small class="text-muted d-block mb-1"><i class="fa-regular fa-calendar-check me-1"></i> Terdaftar Pada:</small>
<span class="fw-semibold text-dark">{{ \Carbon\Carbon::parse($user->created_at)->translatedFormat('d F Y') }}</span>
</div>
</div>
</div>
</div>
</div>
<!-- Script Javascript untuk Sembunyikan & Tampilkan Password -->
<script>
function togglePasswordVisibility(inputId, button) {
const input = document.getElementById(inputId);
const icon = button.querySelector('i');
if (input.type === 'password') {
input.type = 'text';
icon.classList.remove('fa-eye');
icon.classList.add('fa-eye-slash');
} else {
input.type = 'password';
icon.classList.remove('fa-eye-slash');
icon.classList.add('fa-eye');
}
}
</script>
@endsection