feat(profile): create update profile function
This commit is contained in:
parent
4a003d1381
commit
f02a867398
|
@ -3,8 +3,11 @@
|
|||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
class ProfileController extends Controller
|
||||
{
|
||||
|
@ -13,4 +16,87 @@ public function index()
|
|||
$user = Auth::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="tab-content">
|
||||
<div class="tab-pane active" id="personalDetails" role="tabpanel">
|
||||
<form action="" class="needs-validation" novalidate id="personalDetailsForm"
|
||||
method="POST">
|
||||
<form action="{{ route('profile.update_data') }}" class="needs-validation" novalidate
|
||||
id="personalDetailsForm" method="POST">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<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>
|
||||
<input type="text" class="form-control" id="username"
|
||||
placeholder="Masukan username anda" name="username"
|
||||
value="{{ $user->username }}" required>
|
||||
value="{{ old('username', $user->username) }}" required>
|
||||
<div class="invalid-feedback">
|
||||
Harap masukan username anda
|
||||
</div>
|
||||
|
@ -79,7 +79,7 @@ class="rounded-circle avatar-xl img-thumbnail user-profile-image"
|
|||
<label for="fullname" class="form-label">Nama Lengkap</label>
|
||||
<input type="text" class="form-control" id="name"
|
||||
placeholder="Masukan nama lengkap anda" name="name"
|
||||
value="{{ $user->name }}" required>
|
||||
value="{{ old('name', $user->name) }}" required>
|
||||
<div class="invalid-feedback">
|
||||
Harap masukan nama lengkap anda
|
||||
</div>
|
||||
|
@ -91,7 +91,10 @@ class="rounded-circle avatar-xl img-thumbnail user-profile-image"
|
|||
<label for="emailInput" class="form-label">Alamat Email</label>
|
||||
<input type="email" class="form-control" id="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>
|
||||
<!--end col-->
|
||||
|
@ -108,15 +111,15 @@ class="rounded-circle avatar-xl img-thumbnail user-profile-image"
|
|||
</div>
|
||||
<!--end tab-pane-->
|
||||
<div class="tab-pane" id="changePassword" role="tabpanel">
|
||||
<form action="" class="needs-validation" novalidate id="changePasswordForm"
|
||||
method="POST">
|
||||
<form action="{{ route('profile.update_password') }}" class="needs-validation"
|
||||
novalidate id="changePasswordForm" method="POST">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<div class="row g-2">
|
||||
<div class="col-lg-4">
|
||||
<div>
|
||||
<label for="oldpasswordInput" class="form-label">Password
|
||||
Lama*</label>
|
||||
Lama</label>
|
||||
<input type="password" class="form-control" id="oldpasswordInput"
|
||||
placeholder="Masukan password lama anda" name="old_password"
|
||||
required>
|
||||
|
@ -129,7 +132,7 @@ class="rounded-circle avatar-xl img-thumbnail user-profile-image"
|
|||
<div class="col-lg-4">
|
||||
<div>
|
||||
<label for="newpasswordInput" class="form-label">Password
|
||||
Baru*</label>
|
||||
Baru</label>
|
||||
<input type="password" class="form-control" id="newpasswordInput"
|
||||
placeholder="Masukan password baru anda" name="new_password"
|
||||
required>
|
||||
|
@ -142,22 +145,22 @@ class="rounded-circle avatar-xl img-thumbnail user-profile-image"
|
|||
<div class="col-lg-4">
|
||||
<div>
|
||||
<label for="confirmpasswordInput" class="form-label">Konfirmasi
|
||||
Password*</label>
|
||||
Password</label>
|
||||
<input type="password" class="form-control" id="confirmpasswordInput"
|
||||
placeholder="Masukan konfirmasi password baru anda"
|
||||
name="confirm_password" required>
|
||||
name="new_password_confirmation" required>
|
||||
<div class="invalid-feedback">
|
||||
Harap masukan konfirmasi password baru anda
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--end col-->
|
||||
<div class="col-lg-12">
|
||||
{{-- <div class="col-lg-12">
|
||||
<div class="mb-3">
|
||||
<a href="javascript:void(0);"
|
||||
class="link-primary text-decoration-underline">Lupa Password ?</a>
|
||||
</div>
|
||||
</div>
|
||||
</div> --}}
|
||||
<!--end col-->
|
||||
<div class="col-lg-12">
|
||||
<div class="text-end">
|
||||
|
|
|
@ -604,7 +604,7 @@ class="form-check-input">
|
|||
@stack('other-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>
|
||||
</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
|
||||
class="mdi mdi-account-circle text-muted fs-16 align-middle me-1"></i> <span
|
||||
class="align-middle">Profile</span></a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<form action="{{ route('auth.logout') }}" class="d-inline" method="POST">
|
||||
@csrf
|
||||
<button type="submit" class="dropdown-item">
|
||||
|
|
|
@ -63,7 +63,8 @@
|
|||
|
||||
Route::prefix('profile')->controller(ProfileController::class)->name('profile.')->group(function () {
|
||||
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 () {
|
||||
|
|
Loading…
Reference in New Issue