feat(profile): create update profile function
This commit is contained in:
parent
4a003d1381
commit
f02a867398
|
@ -3,8 +3,11 @@
|
||||||
namespace App\Http\Controllers\Auth;
|
namespace App\Http\Controllers\Auth;
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\User;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use Illuminate\Support\Facades\Hash;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
|
||||||
class ProfileController extends Controller
|
class ProfileController extends Controller
|
||||||
{
|
{
|
||||||
|
@ -13,4 +16,87 @@ public function index()
|
||||||
$user = Auth::user();
|
$user = Auth::user();
|
||||||
return view('auth.profile', compact('user'));
|
return view('auth.profile', compact('user'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function updateData(request $request)
|
||||||
|
{
|
||||||
|
$customMessage = [
|
||||||
|
'username.required' => 'Username wajib diisi',
|
||||||
|
'username.max' => 'Username maksimal 12 karakter',
|
||||||
|
'username.string' => 'Username harus berupa string',
|
||||||
|
'username.unique' => 'Username sudah terdaftar',
|
||||||
|
|
||||||
|
'name.required' => 'Nama wajib diisi',
|
||||||
|
'name.max' => 'Nama maksimal 255 karakter',
|
||||||
|
'name.string' => 'Nama harus berupa string',
|
||||||
|
'name.unique' => 'Nama sudah terdaftar',
|
||||||
|
|
||||||
|
'email.required' => 'Email wajib diisi',
|
||||||
|
'email.email' => 'Email tidak valid',
|
||||||
|
'email.unique' => 'Email sudah terdaftar',
|
||||||
|
'email.max' => 'Email maksimal 255 karakter',
|
||||||
|
'email.string' => 'Email harus berupa string',
|
||||||
|
];
|
||||||
|
|
||||||
|
$validator = Validator::make($request->all(), [
|
||||||
|
'username' => 'required|string|max:12|unique:users,username,' . Auth::user()->id,
|
||||||
|
'name' => 'required|string|max:255|unique:users,name,' . Auth::user()->id,
|
||||||
|
'email' => 'required|string|email|max:255|unique:users,email,' . Auth::user()->id,
|
||||||
|
], $customMessage);
|
||||||
|
|
||||||
|
if ($validator->fails()) {
|
||||||
|
toast($validator->messages()->all()[0], 'error')->position('top-right')->autoclose(3000);
|
||||||
|
return redirect()->back()->withInput();
|
||||||
|
}
|
||||||
|
|
||||||
|
$user = User::find(Auth::user()->id);
|
||||||
|
$user->username = $request->username;
|
||||||
|
$user->name = $request->name;
|
||||||
|
$user->email = $request->email;
|
||||||
|
|
||||||
|
try {
|
||||||
|
$user->save();
|
||||||
|
toast('Data berhasil diubah', 'success')->position('top-right')->autoclose(3000);
|
||||||
|
return redirect()->back();
|
||||||
|
} catch (\Throwable $th) {
|
||||||
|
toast('Terjadi kesalahan', 'error')->position('top-right')->autoclose(3000);
|
||||||
|
return redirect()->back();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updatePassword(request $request)
|
||||||
|
{
|
||||||
|
// dd($request->all());
|
||||||
|
$customMessage = [
|
||||||
|
'new_password.required' => 'Password wajib diisi',
|
||||||
|
'new_password.confirmed' => 'Konfirmasi password tidak cocok',
|
||||||
|
'new_password.min' => 'Password minimal 8 karakter',
|
||||||
|
];
|
||||||
|
|
||||||
|
$user = User::find(Auth::user()->id);
|
||||||
|
if (Hash::check($request->old_password, $user->password)) {
|
||||||
|
|
||||||
|
$validator = Validator::make($request->all(), [
|
||||||
|
'new_password' => 'required|string|min:8|confirmed',
|
||||||
|
], $customMessage);
|
||||||
|
|
||||||
|
if ($validator->fails()) {
|
||||||
|
toast($validator->messages()->all()[0], 'error')->position('top-right')->autoclose(3000);
|
||||||
|
return redirect()->back()->withInput();
|
||||||
|
}
|
||||||
|
|
||||||
|
$user->password = Hash::make($request->new_password);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$user->save();
|
||||||
|
toast('Password berhasil diubah', 'success')->position('top-right')->autoclose(3000);
|
||||||
|
return redirect()->back();
|
||||||
|
} catch (\Throwable $th) {
|
||||||
|
toast('Terjadi kesalahan', 'error')->position('top-right')->autoclose(3000);
|
||||||
|
return redirect()->back();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
toast('Password lama tidak cocok', 'error')->position('top-right')->autoclose(3000);
|
||||||
|
return redirect()->back();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,60 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers;
|
|
||||||
|
|
||||||
use App\Http\Requests\ProfileUpdateRequest;
|
|
||||||
use Illuminate\Http\RedirectResponse;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Support\Facades\Auth;
|
|
||||||
use Illuminate\Support\Facades\Redirect;
|
|
||||||
use Illuminate\View\View;
|
|
||||||
|
|
||||||
class ProfileController extends Controller
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Display the user's profile form.
|
|
||||||
*/
|
|
||||||
public function edit(Request $request): View
|
|
||||||
{
|
|
||||||
return view('profile.edit', [
|
|
||||||
'user' => $request->user(),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update the user's profile information.
|
|
||||||
*/
|
|
||||||
public function update(ProfileUpdateRequest $request): RedirectResponse
|
|
||||||
{
|
|
||||||
$request->user()->fill($request->validated());
|
|
||||||
|
|
||||||
if ($request->user()->isDirty('email')) {
|
|
||||||
$request->user()->email_verified_at = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$request->user()->save();
|
|
||||||
|
|
||||||
return Redirect::route('profile.edit')->with('status', 'profile-updated');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete the user's account.
|
|
||||||
*/
|
|
||||||
public function destroy(Request $request): RedirectResponse
|
|
||||||
{
|
|
||||||
$request->validateWithBag('userDeletion', [
|
|
||||||
'password' => ['required', 'current_password'],
|
|
||||||
]);
|
|
||||||
|
|
||||||
$user = $request->user();
|
|
||||||
|
|
||||||
Auth::logout();
|
|
||||||
|
|
||||||
$user->delete();
|
|
||||||
|
|
||||||
$request->session()->invalidate();
|
|
||||||
$request->session()->regenerateToken();
|
|
||||||
|
|
||||||
return Redirect::to('/');
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -57,8 +57,8 @@ class="rounded-circle avatar-xl img-thumbnail user-profile-image"
|
||||||
<div class="card-body p-4">
|
<div class="card-body p-4">
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
<div class="tab-pane active" id="personalDetails" role="tabpanel">
|
<div class="tab-pane active" id="personalDetails" role="tabpanel">
|
||||||
<form action="" class="needs-validation" novalidate id="personalDetailsForm"
|
<form action="{{ route('profile.update_data') }}" class="needs-validation" novalidate
|
||||||
method="POST">
|
id="personalDetailsForm" method="POST">
|
||||||
@csrf
|
@csrf
|
||||||
@method('PUT')
|
@method('PUT')
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
@ -67,7 +67,7 @@ class="rounded-circle avatar-xl img-thumbnail user-profile-image"
|
||||||
<label for="username" class="form-label">Username</label>
|
<label for="username" class="form-label">Username</label>
|
||||||
<input type="text" class="form-control" id="username"
|
<input type="text" class="form-control" id="username"
|
||||||
placeholder="Masukan username anda" name="username"
|
placeholder="Masukan username anda" name="username"
|
||||||
value="{{ $user->username }}" required>
|
value="{{ old('username', $user->username) }}" required>
|
||||||
<div class="invalid-feedback">
|
<div class="invalid-feedback">
|
||||||
Harap masukan username anda
|
Harap masukan username anda
|
||||||
</div>
|
</div>
|
||||||
|
@ -79,7 +79,7 @@ class="rounded-circle avatar-xl img-thumbnail user-profile-image"
|
||||||
<label for="fullname" class="form-label">Nama Lengkap</label>
|
<label for="fullname" class="form-label">Nama Lengkap</label>
|
||||||
<input type="text" class="form-control" id="name"
|
<input type="text" class="form-control" id="name"
|
||||||
placeholder="Masukan nama lengkap anda" name="name"
|
placeholder="Masukan nama lengkap anda" name="name"
|
||||||
value="{{ $user->name }}" required>
|
value="{{ old('name', $user->name) }}" required>
|
||||||
<div class="invalid-feedback">
|
<div class="invalid-feedback">
|
||||||
Harap masukan nama lengkap anda
|
Harap masukan nama lengkap anda
|
||||||
</div>
|
</div>
|
||||||
|
@ -91,7 +91,10 @@ class="rounded-circle avatar-xl img-thumbnail user-profile-image"
|
||||||
<label for="emailInput" class="form-label">Alamat Email</label>
|
<label for="emailInput" class="form-label">Alamat Email</label>
|
||||||
<input type="email" class="form-control" id="email"
|
<input type="email" class="form-control" id="email"
|
||||||
placeholder="Masukan alamat email anda" name="email"
|
placeholder="Masukan alamat email anda" name="email"
|
||||||
value="{{ $user->email }}" required>
|
value="{{ old('email', $user->email) }}" required>
|
||||||
|
<div class="invalid-feedback">
|
||||||
|
Harap masukan alamat email anda
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!--end col-->
|
<!--end col-->
|
||||||
|
@ -108,15 +111,15 @@ class="rounded-circle avatar-xl img-thumbnail user-profile-image"
|
||||||
</div>
|
</div>
|
||||||
<!--end tab-pane-->
|
<!--end tab-pane-->
|
||||||
<div class="tab-pane" id="changePassword" role="tabpanel">
|
<div class="tab-pane" id="changePassword" role="tabpanel">
|
||||||
<form action="" class="needs-validation" novalidate id="changePasswordForm"
|
<form action="{{ route('profile.update_password') }}" class="needs-validation"
|
||||||
method="POST">
|
novalidate id="changePasswordForm" method="POST">
|
||||||
@csrf
|
@csrf
|
||||||
@method('PUT')
|
@method('PUT')
|
||||||
<div class="row g-2">
|
<div class="row g-2">
|
||||||
<div class="col-lg-4">
|
<div class="col-lg-4">
|
||||||
<div>
|
<div>
|
||||||
<label for="oldpasswordInput" class="form-label">Password
|
<label for="oldpasswordInput" class="form-label">Password
|
||||||
Lama*</label>
|
Lama</label>
|
||||||
<input type="password" class="form-control" id="oldpasswordInput"
|
<input type="password" class="form-control" id="oldpasswordInput"
|
||||||
placeholder="Masukan password lama anda" name="old_password"
|
placeholder="Masukan password lama anda" name="old_password"
|
||||||
required>
|
required>
|
||||||
|
@ -129,7 +132,7 @@ class="rounded-circle avatar-xl img-thumbnail user-profile-image"
|
||||||
<div class="col-lg-4">
|
<div class="col-lg-4">
|
||||||
<div>
|
<div>
|
||||||
<label for="newpasswordInput" class="form-label">Password
|
<label for="newpasswordInput" class="form-label">Password
|
||||||
Baru*</label>
|
Baru</label>
|
||||||
<input type="password" class="form-control" id="newpasswordInput"
|
<input type="password" class="form-control" id="newpasswordInput"
|
||||||
placeholder="Masukan password baru anda" name="new_password"
|
placeholder="Masukan password baru anda" name="new_password"
|
||||||
required>
|
required>
|
||||||
|
@ -142,22 +145,22 @@ class="rounded-circle avatar-xl img-thumbnail user-profile-image"
|
||||||
<div class="col-lg-4">
|
<div class="col-lg-4">
|
||||||
<div>
|
<div>
|
||||||
<label for="confirmpasswordInput" class="form-label">Konfirmasi
|
<label for="confirmpasswordInput" class="form-label">Konfirmasi
|
||||||
Password*</label>
|
Password</label>
|
||||||
<input type="password" class="form-control" id="confirmpasswordInput"
|
<input type="password" class="form-control" id="confirmpasswordInput"
|
||||||
placeholder="Masukan konfirmasi password baru anda"
|
placeholder="Masukan konfirmasi password baru anda"
|
||||||
name="confirm_password" required>
|
name="new_password_confirmation" required>
|
||||||
<div class="invalid-feedback">
|
<div class="invalid-feedback">
|
||||||
Harap masukan konfirmasi password baru anda
|
Harap masukan konfirmasi password baru anda
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!--end col-->
|
<!--end col-->
|
||||||
<div class="col-lg-12">
|
{{-- <div class="col-lg-12">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<a href="javascript:void(0);"
|
<a href="javascript:void(0);"
|
||||||
class="link-primary text-decoration-underline">Lupa Password ?</a>
|
class="link-primary text-decoration-underline">Lupa Password ?</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> --}}
|
||||||
<!--end col-->
|
<!--end col-->
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div class="text-end">
|
<div class="text-end">
|
||||||
|
|
|
@ -604,7 +604,7 @@ class="form-check-input">
|
||||||
@stack('other-js')
|
@stack('other-js')
|
||||||
|
|
||||||
<!-- App js -->
|
<!-- App js -->
|
||||||
<script src="assets/js/app.js"></script>
|
<script src="assets/js/customApp.js"></script>
|
||||||
<script src="assets/libs/jquery/jquery.min.js"></script>
|
<script src="assets/libs/jquery/jquery.min.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
|
|
@ -184,6 +184,7 @@ class="d-none d-xl-block ms-1 fs-12 text-muted user-name-sub-text">{{ Auth::user
|
||||||
<a class="dropdown-item" href="{{ route('profile.index') }}"><i
|
<a class="dropdown-item" href="{{ route('profile.index') }}"><i
|
||||||
class="mdi mdi-account-circle text-muted fs-16 align-middle me-1"></i> <span
|
class="mdi mdi-account-circle text-muted fs-16 align-middle me-1"></i> <span
|
||||||
class="align-middle">Profile</span></a>
|
class="align-middle">Profile</span></a>
|
||||||
|
<div class="dropdown-divider"></div>
|
||||||
<form action="{{ route('auth.logout') }}" class="d-inline" method="POST">
|
<form action="{{ route('auth.logout') }}" class="d-inline" method="POST">
|
||||||
@csrf
|
@csrf
|
||||||
<button type="submit" class="dropdown-item">
|
<button type="submit" class="dropdown-item">
|
||||||
|
|
|
@ -63,7 +63,8 @@
|
||||||
|
|
||||||
Route::prefix('profile')->controller(ProfileController::class)->name('profile.')->group(function () {
|
Route::prefix('profile')->controller(ProfileController::class)->name('profile.')->group(function () {
|
||||||
Route::get('/', 'index')->name('index');
|
Route::get('/', 'index')->name('index');
|
||||||
Route::put('/', 'update')->name('update');
|
Route::put('/', 'updateData')->name('update_data');
|
||||||
|
Route::put('/password', 'updatePassword')->name('update_password');
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::prefix('location')->controller(LocationController::class)->name('location.')->group(function () {
|
Route::prefix('location')->controller(LocationController::class)->name('location.')->group(function () {
|
||||||
|
|
Loading…
Reference in New Issue