edit profile
This commit is contained in:
parent
01bf741a46
commit
2a0f07848a
|
|
@ -0,0 +1,31 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Hash;
|
||||||
|
use Illuminate\Validation\Rules\Password;
|
||||||
|
|
||||||
|
class ProfileController extends Controller
|
||||||
|
{
|
||||||
|
public function edit()
|
||||||
|
{
|
||||||
|
// Ambil data user yang sedang login
|
||||||
|
$user = auth()->user();
|
||||||
|
return view('profile.edit', compact('user'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updatePassword(Request $request)
|
||||||
|
{
|
||||||
|
$request->validate([
|
||||||
|
'current_password' => ['required', 'current_password'], // Cek password lama benar/tidak
|
||||||
|
'password' => ['required', 'confirmed', Password::defaults()], // Password baru
|
||||||
|
]);
|
||||||
|
|
||||||
|
$request->user()->update([
|
||||||
|
'password' => Hash::make($request->password),
|
||||||
|
]);
|
||||||
|
|
||||||
|
return back()->with('success', 'Password berhasil diperbarui!');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Hash;
|
||||||
|
|
||||||
class UsersController extends Controller
|
class UsersController extends Controller
|
||||||
{
|
{
|
||||||
|
|
@ -41,7 +42,7 @@ public function store(Request $request)
|
||||||
'nama' => $request->nama,
|
'nama' => $request->nama,
|
||||||
'no_hp' => $request->no_hp,
|
'no_hp' => $request->no_hp,
|
||||||
'email' => $request->email,
|
'email' => $request->email,
|
||||||
'password' => bcrypt($request->password),
|
'password' => Hash::make('12345678'),
|
||||||
'role' => $request->role
|
'role' => $request->role
|
||||||
|
|
||||||
]);
|
]);
|
||||||
|
|
|
||||||
|
|
@ -12,11 +12,11 @@ class DatabaseSeeder extends Seeder
|
||||||
*/
|
*/
|
||||||
public function run(): void
|
public function run(): void
|
||||||
{
|
{
|
||||||
// \App\Models\User::factory(10)->create();
|
\App\Models\User::create([
|
||||||
|
'name' => 'Administrator PosSehat',
|
||||||
// \App\Models\User::factory()->create([
|
'email' => 'admin@gmail.com',
|
||||||
// 'name' => 'Test User',
|
'password' => \Illuminate\Support\Facades\Hash::make('admin123'), // Password khusus admin
|
||||||
// 'email' => 'test@example.com',
|
'role' => 'admin',
|
||||||
// ]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</form><!-- End General Form Elements -->
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -150,6 +150,12 @@
|
||||||
transform: translateY(-5px);
|
transform: translateY(-5px);
|
||||||
transition: all 0.3s ease-in-out;
|
transition: all 0.3s ease-in-out;
|
||||||
}
|
}
|
||||||
|
.navbar {
|
||||||
|
z-index: 9999 !important; /* Memastikan navbar selalu di depan */
|
||||||
|
}
|
||||||
|
.dropdown-menu {
|
||||||
|
z-index: 10000 !important; /* Memastikan menu dropdown lebih depan lagi */
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|
@ -172,6 +178,7 @@
|
||||||
{{-- JS --}}
|
{{-- JS --}}
|
||||||
<script src="{{ asset('assets/js/main.js') }}"></script>
|
<script src="{{ asset('assets/js/main.js') }}"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
|
<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||||
|
|
||||||
@stack('scripts')
|
@stack('scripts')
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,46 @@
|
||||||
<nav class="navbar navbar-expand-lg navbar-light bg-white py-3 shadow-sm fixed-top">
|
<nav class="navbar navbar-expand-lg navbar-light bg-white py-2 shadow-sm fixed-top">
|
||||||
<div class="container-fluid px-4">
|
<div class="container-fluid px-4">
|
||||||
<a class="navbar-brand" href="/">PosSehat</a>
|
<a class="navbar-brand fw-bold" href="/" style="color: #ff5757;">PosSehat</a>
|
||||||
|
|
||||||
<div class="ms-auto">
|
<div class="ms-auto d-flex align-items-center">
|
||||||
<form action="/logout" method="POST">
|
<ul class="navbar-nav">
|
||||||
|
<li class="nav-item dropdown pe-3">
|
||||||
|
|
||||||
|
<a class="nav-link nav-profile d-flex align-items-center pe-0" href="#" data-bs-toggle="dropdown">
|
||||||
|
<img src="https://ui-avatars.com/api/?name={{ urlencode(auth()->user()->name) }}&background=9c3a5b&color=fff" alt="Profile" class="rounded-circle" width="35">
|
||||||
|
<span class="d-none d-md-block dropdown-toggle ps-2">{{ auth()->user()->name }}</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow profile">
|
||||||
|
<li class="dropdown-header text-start">
|
||||||
|
<h6>{{ auth()->user()->name }}</h6>
|
||||||
|
<span class="badge bg-info text-capitalize">{{ auth()->user()->role }}</span>
|
||||||
|
</li>
|
||||||
|
<li><hr class="dropdown-divider"></li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a class="dropdown-item d-flex align-items-center" href="{{ route('profile.edit') }}">
|
||||||
|
<i class="bi bi-person"></i>
|
||||||
|
<span>Profil Saya</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li><hr class="dropdown-divider"></li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a class="dropdown-item d-flex align-items-center text-danger" href="#"
|
||||||
|
onclick="event.preventDefault(); document.getElementById('logout-form').submit();">
|
||||||
|
<i class="bi bi-box-arrow-right"></i>
|
||||||
|
<span>Keluar</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<form id="logout-form" action="/logout" method="POST" class="d-none">
|
||||||
@csrf
|
@csrf
|
||||||
<button class="btn btn-primary rounded-pill px-4">
|
|
||||||
Keluar
|
|
||||||
</button>
|
|
||||||
</form>
|
</form>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
@extends('layouts.dashboard')
|
||||||
|
|
||||||
|
@section('title', 'Profil Petugas')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="pagetitle">
|
||||||
|
<h1>Pengaturan Profil</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<section class="section profile">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xl-4">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body profile-card pt-4 d-flex flex-column align-items-center">
|
||||||
|
<img src="https://ui-avatars.com/api/?name={{ urlencode(auth()->user()->name) }}&background=9c3a5b&color=fff" alt="Profile" class="rounded-circle mb-3" width="100">
|
||||||
|
<h3 style="text-">{{ $user->nama }}</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xl-8">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body pt-3">
|
||||||
|
<h5 class="card-title">Ubah Password</h5>
|
||||||
|
|
||||||
|
@if(session('success'))
|
||||||
|
<div class="alert alert-success">{{ session('success') }}</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
<form action="{{ route('profile.password.update') }}" method="POST">
|
||||||
|
@csrf
|
||||||
|
@method('PUT')
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label for="current_password" class="col-md-4 col-lg-3 col-form-label">Password Saat Ini</label>
|
||||||
|
<div class="col-md-8 col-lg-9">
|
||||||
|
<input name="current_password" type="password" class="form-control @error('current_password') is-invalid @enderror" id="current_password">
|
||||||
|
@error('current_password') <div class="invalid-feedback">{{ $message }}</div> @enderror
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label for="newPassword" class="col-md-4 col-lg-3 col-form-label">Password Baru</label>
|
||||||
|
<div class="col-md-8 col-lg-9">
|
||||||
|
<input name="password" type="password" class="form-control @error('password') is-invalid @enderror" id="newPassword">
|
||||||
|
@error('password') <div class="invalid-feedback">{{ $message }}</div> @enderror
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label for="renewPassword" class="col-md-4 col-lg-3 col-form-label">Konfirmasi Password Baru</label>
|
||||||
|
<div class="col-md-8 col-lg-9">
|
||||||
|
<input name="password_confirmation" type="password" class="form-control" id="renewPassword">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="text-center">
|
||||||
|
<button type="submit" class="btn btn-primary" style="background-color: #9c3a5b; border: none;">Simpan Perubahan</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
@endsection
|
||||||
|
|
@ -16,19 +16,25 @@
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title">Tambah Data Petugas</h5>
|
<h5 class="card-title">Tambah Data Petugas</h5>
|
||||||
|
|
||||||
<!-- General Form Elements -->
|
|
||||||
<form action="{{ route('users.store') }}" method="POST">
|
<form action="{{ route('users.store') }}" method="POST">
|
||||||
@csrf
|
@csrf
|
||||||
|
|
||||||
|
<div class="alert alert-info border-light shadow-sm" role="alert">
|
||||||
|
<i class="bi bi-info-circle me-1"></i>
|
||||||
|
Password petugas baru akan otomatis diatur menjadi: <strong>12345678</strong>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<label for="nama" class="col-sm-2 col-form-label">Nama</label>
|
<label for="nama" class="col-sm-2 col-form-label">Nama</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<input type="text" class="form-control" name="nama" required>
|
<input type="text" class="form-control" name="nama" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<label for="no_hp" class="col-sm-2 col-form-label">No HP</label>
|
<label for="no_hp" class="col-sm-2 col-form-label">No HP</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<input type="text" class="form-control" name="no_hp" id="no_hp" required>
|
<input type="text" class="form-control" name="no_hp" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -40,14 +46,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<label for="password" class="col-sm-2 col-form-label">Password</label>
|
<label for="role" class="col-sm-2 col-form-label">Role</label>
|
||||||
<div class="col-sm-10">
|
|
||||||
<input type="password" class="form-control" name="password" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row mb-3">
|
|
||||||
<label for="no_hp" class="col-sm-2 col-form-label">Role</label>
|
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<select name="role" class="form-control" required>
|
<select name="role" class="form-control" required>
|
||||||
<option value="">-- Pilih Role --</option>
|
<option value="">-- Pilih Role --</option>
|
||||||
|
|
@ -58,12 +57,13 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10 offset-sm-2">
|
||||||
<button type="submit" class="btn btn-primary">Submit Form</button>
|
<button type="submit" class="btn btn-primary" style="background-color: #9c3a5b; border: none;">Simpan Petugas</button>
|
||||||
|
<a href="{{ route('users.index') }}" class="btn btn-secondary">Batal</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
</form><!-- End General Form Elements -->
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Routing\Controller;
|
|
||||||
use Illuminate\Support\Facades\Route;
|
|
||||||
use App\Http\Controllers\AnakController;
|
use App\Http\Controllers\AnakController;
|
||||||
use App\Http\Controllers\AuthController;
|
use App\Http\Controllers\AuthController;
|
||||||
use App\Http\Controllers\DashboardController;
|
use App\Http\Controllers\DashboardController;
|
||||||
|
|
@ -9,7 +7,10 @@
|
||||||
use App\Http\Controllers\IbuHamilController;
|
use App\Http\Controllers\IbuHamilController;
|
||||||
use App\Http\Controllers\PengukuranBalitaController;
|
use App\Http\Controllers\PengukuranBalitaController;
|
||||||
use App\Http\Controllers\PengukuranIbuHamilController;
|
use App\Http\Controllers\PengukuranIbuHamilController;
|
||||||
|
use App\Http\Controllers\ProfileController;
|
||||||
use App\Http\Controllers\UsersController;
|
use App\Http\Controllers\UsersController;
|
||||||
|
use Illuminate\Routing\Controller;
|
||||||
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
@ -55,6 +56,11 @@
|
||||||
Route::resource('users', UsersController::class);
|
Route::resource('users', UsersController::class);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Route::middleware('auth')->group(function () {
|
||||||
|
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
|
||||||
|
Route::put('/profile/password', [ProfileController::class, 'updatePassword'])->name('profile.password.update');
|
||||||
|
});
|
||||||
|
|
||||||
Route::middleware(['auth'])->group(function () {
|
Route::middleware(['auth'])->group(function () {
|
||||||
Route::resource('pengukuran_ibu_hamil', PengukuranIbuHamilController::class);
|
Route::resource('pengukuran_ibu_hamil', PengukuranIbuHamilController::class);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue