Update User Profile

This commit is contained in:
Ananda Zakia S 2023-12-27 23:48:57 +07:00
parent d279d7cebd
commit 326bbfd7ac
8 changed files with 159 additions and 75 deletions

View File

@ -1,6 +1,7 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Models\User; use App\Models\User;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@ -28,11 +29,9 @@ public function update_profile(Request $request)
]); ]);
if ($validator->fails()) { if ($validator->fails()) {
return response()->json([ return redirect('user-profile')
'error' => true, ->withErrors($validator)
'message' => Str::ucfirst($validator->errors()->first()), ->withInput();
'data' => null
]);
} }
$user = User::findOrFail(Auth::user()->id); $user = User::findOrFail(Auth::user()->id);
@ -46,41 +45,51 @@ public function update_profile(Request $request)
public function updatePassword(Request $request) public function updatePassword(Request $request)
{ {
$user = Auth::user(); $validator = Validator::make($request->all(), [
$request->validate([ 'password' => 'required|min:5|max:255',
'password' => 'required|confirmed|min:5', 'new_password' => 'required|min:5|max:255',
], [
'required' => ':attribute harus diisi.',
'min' => 'panjang :attribute minimal :min karakter.',
]); ]);
$user->password = bcrypt($request->input('new_password')); if ($validator->fails()) {
return redirect('user-profile')
->withErrors($validator)
->withInput();
}
$user = User::findOrFail(Auth::user()->id);
$user->update([
'password' => $request->new_password,
]);
return redirect('user-profile')->with('success', 'Password Berhasil Diperbarui!');
}
public function index()
{
$user = Auth::user();
return view('user-profile', compact('user'));
}
public function updateProfilePicture(Request $request)
{
$request->validate([
'profile_picture' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
]);
// Process the uploaded file and update the user's profile picture
$user = Auth::user();
// Store the uploaded file and update the user's profile picture
if ($request->hasFile('profile_picture')) {
$imagePath = $request->file('profile_picture')->store('profile_pictures', 'public');
$user->profile_picture = $imagePath;
$user->save(); $user->save();
return redirect()->back()->with('success', 'Password updated successfully.');
// $status = Password::reset(
// $request->only('email', 'password', 'password_confirmation', 'token'),
// function ($user, $password) {
// $user->forceFill([
// 'password' => bcrypt($password),
// 'remember_token' => Str::random(60),
// ])->save();
// // Hapus token "remember me" setelah reset password
// $user->tokens()->delete();
// }
// );
// return $status == Password::PASSWORD_RESET
// ? redirect('/login')->with(['status' => __($status)])
// : back()->withErrors(['email' => [__($status)]]);
// $user = Auth::user();
// $request->validate([
// 'new_password' => 'required|string|min:8|confirmed',
// ]);
// $user->password = bcrypt($request->input('new_password'));
// $user->save();
// return redirect()->back()->with('success', 'Password updated successfully.');
} }
// Redirect back or return a response
return redirect()->route('user-profile')->with('success', 'Profile picture updated successfully.');
}
} }

View File

@ -19,6 +19,7 @@ public function up(): void
$table->timestamp('email_verified_at')->nullable(); $table->timestamp('email_verified_at')->nullable();
$table->string('password'); $table->string('password');
$table->string('role'); $table->string('role');
$table->string('profile_picture')->nullable();
$table->rememberToken(); $table->rememberToken();
$table->timestamps(); $table->timestamps();
}); });

View File

@ -15,7 +15,7 @@ public function up(): void
$table->id(); $table->id();
$table->string('nama'); $table->string('nama');
$table->string('prioritas'); $table->string('prioritas');
$table->string('bobot'); $table->string('bobot')->nullable();
$table->timestamps(); $table->timestamps();
}); });
} }

View File

@ -3,6 +3,9 @@
namespace Database\Seeders; namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents; // use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use App\Models\Criteria;
use App\Models\User;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder class DatabaseSeeder extends Seeder
@ -12,11 +15,24 @@ class DatabaseSeeder extends Seeder
*/ */
public function run(): void public function run(): void
{ {
// \App\Models\User::factory(10)->create(); User::create([
'name' => 'Ananda Zakia Syahfitri',
'username' => 'zakia',
'email' => 'anandazakia7@gmail.com',
'password' => bcrypt('12345')
]);
User::factory(2)->create();
Criteria::create([
'nama' => 'Minat',
'prioritas' => '1',
]);
Criteria::create([
'nama' => 'Bakat',
'prioritas' => '2',
]);
// \App\Models\User::factory()->create([
// 'name' => 'Test User',
// 'email' => 'test@example.com',
// ]);
} }
} }

BIN
public/vendors/images/user.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -43,7 +43,11 @@
<div class="dropdown"> <div class="dropdown">
<a class="dropdown-toggle" href="#" role="button" data-toggle="dropdown"> <a class="dropdown-toggle" href="#" role="button" data-toggle="dropdown">
<span class="user-icon"> <span class="user-icon">
{{ strtoupper(substr(Auth::user()->username, 0, 2)) }} @if (Auth::user()->profile_picture)
<img src="{{ asset('storage/' . Auth::user()->profile_picture) }}">
@else
<img src="{{ asset('vendors/images/user.png') }}">
@endif
</span> </span>
<span class="user-name"> Hi, {{ Auth::user()->username }}</span> <span class="user-name"> Hi, {{ Auth::user()->username }}</span>
</a> </a>

View File

@ -38,21 +38,36 @@
<a href="modal" data-toggle="modal" data-target="#modal" class="edit-avatar"> <a href="modal" data-toggle="modal" data-target="#modal" class="edit-avatar">
<i class="fa fa-pencil"></i> <i class="fa fa-pencil"></i>
</a> </a>
<img src="vendors/images/photo1.jpg" alt="" class="avatar-photo" /> @if (Auth::user()->profile_picture)
<img src="{{ asset('storage/' . Auth::user()->profile_picture) }}">
@else
<img src="{{ asset('vendors/images/user.png') }}">
@endif
<div class="modal fade" id="modal" tabindex="-1" role="dialog" <div class="modal fade" id="modal" tabindex="-1" role="dialog"
aria-labelledby="modalLabel" aria-hidden="true"> aria-labelledby="modalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document"> <div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-body pd-5"> <div class="modal-body pd-5">
<div class="img-container"> <form action="{{ '/update-profile-picture' }}" method="post"
<img id="image" src="vendors/images/photo2.jpg" alt="Picture" /> enctype="multipart/form-data">
@csrf
<div class="img-container text-center">
@if (Auth::user()->profile_picture)
<img
src="{{ asset('storage/' . Auth::user()->profile_picture) }}" class="img-fluid mx-auto mt-2" style="max-width: 100%; max-height: 200px;">
@else
<img src="{{ asset('vendors/images/user.png') }}" class="img-fluid mx-auto mt-2" style="max-width: 100%; max-height: 200px;">
@endif
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<input type="submit" value="Update" class="btn btn-primary" /> <input type="file" class="form-control-file" id="profile_picture" name="profile_picture" accept="image/*">
<button type="button" class="btn btn-default" data-dismiss="modal"> </div>
Close <div class="modal-footer">
</button> <button type="submit" class="btn btn-primary">Update</button>
</form>
<button type="button" class="btn btn-secondary"
data-dismiss="modal">Close</button>
</div> </div>
</div> </div>
</div> </div>
@ -82,35 +97,57 @@
<!-- Profile --> <!-- Profile -->
<div class="tab-pane fade show active" id="profile" role="tabpanel"> <div class="tab-pane fade show active" id="profile" role="tabpanel">
<div class="profile-setting"> <div class="profile-setting">
<form method="POST" action="{{ route('user-profile') }}" class="needs-validation" novalidate=""> <form method="POST" action="{{ route('user-profile') }}"
class="needs-validation" novalidate="">
@csrf @csrf
<h4 class=" text-center text-blue h5 mt-3 mb-0">Edit Your Personal Data</h4> <h4 class=" text-center text-blue h5 mt-3 mb-0">Edit Your Personal Data
</h4>
<ul class="profile-edit-list row"> <ul class="profile-edit-list row">
<li class="col-md-4"> <li class="col-md-4">
<div class="form-group"> <div class="form-group">
<label for="name">Name</label> <label for="name">Name</label>
<input id="name" type="text" class="form-control" name="name" value="{{ Auth::user()->name }}"> <input id="name" type="text" class="form-control"
<div class="invalid-feedback">Please fill in your name </div> name="name" value="{{ Auth::user()->name }}">
<div class="invalid-feedback">Please fill in your name
</div> </div>
</div>
@if ($errors->has('name'))
<div class="alert alert-danger">
{{ $errors->first('name') }}
</div>
@endif
</li> </li>
<li class="col-md-4"> <li class="col-md-4">
<div class="form-group"> <div class="form-group">
<label for="name">Username</label> <label for="name">Username</label>
<input id="name" type="text" class="form-control" name="username" value="{{ Auth::user()->username }}"> <input id="name" type="text" class="form-control"
<div class="invalid-feedback">Please fill in your username </div> name="username" value="{{ Auth::user()->username }}">
<div class="invalid-feedback">Please fill in your username
</div> </div>
</div>
@if ($errors->has('username'))
<div class="alert alert-danger">
{{ $errors->first('username') }}</div>
@endif
</li> </li>
<li class="col-md-4"> <li class="col-md-4">
<div class="form-group"> <div class="form-group">
<label for="name">Email</label> <label for="name">Email</label>
<input id="name" type="text" class="form-control" name="email" value="{{ Auth::user()->email }}"> <input id="name" type="text" class="form-control"
<div class="invalid-feedback">Please fill in your email </div> name="email" value="{{ Auth::user()->email }}">
<div class="invalid-feedback">Please fill in your email
</div> </div>
</div>
@if ($errors->has('email'))
<div class="alert alert-danger">
{{ $errors->first('email') }}</div>
@endif
</li> </li>
</ul> </ul>
<div class="col-sm-12"> <div class="col-sm-12">
<div class="input-group mb-3 mx-auto"> <div class="input-group mb-3 mx-auto">
<button class="btn btn-primary btn-lg btn-block" type="submit">Save Changes</button> <button class="btn btn-primary btn-lg btn-block"
type="submit">Save Changes</button>
</div> </div>
</div> </div>
</form> </form>
@ -122,26 +159,40 @@
<div class="profile-setting"> <div class="profile-setting">
<form method="POST" action="{{ route('update-password') }}"> <form method="POST" action="{{ route('update-password') }}">
@csrf @csrf
<h4 class=" text-center text-blue h5 mt-3 mb-0">Edit Your Personal Password</h4> <h4 class=" text-center text-blue h5 mt-3 mb-0">Edit Your Personal
Password</h4>
<ul class="profile-edit-list row"> <ul class="profile-edit-list row">
<li class="col-md-6"> <li class="col-md-6">
<div class="form-group"> <div class="form-group">
<label for="password">Current Password</label> <label for="password">Current Password</label>
<input id="password" type="text" class="form-control" name="password" value="{{ Auth::user()->password }}" readonly> <input id="password" type="text" class="form-control"
<div class="invalid-feedback">Please fill in your current password </div> name="password">
<div class="invalid-feedback">Please fill in your current
password </div>
</div> </div>
@if ($errors->has('password'))
<div class="alert alert-danger">
{{ $errors->first('password') }}</div>
@endif
</li> </li>
<li class="col-md-6"> <li class="col-md-6">
<div class="form-group"> <div class="form-group">
<label for="new_password">New Password</label> <label for="new_password">New Password</label>
<input id="new_password" type="text" class="form-control" name="new_password"> <input id="new_password" type="text"
<div class="invalid-feedback">Please fill in your new password </div> class="form-control" name="new_password">
<div class="invalid-feedback">Please fill in your new
password </div>
</div> </div>
@if ($errors->has('new_password'))
<div class="alert alert-danger">
{{ $errors->first('new_password') }}</div>
@endif
</li> </li>
</ul> </ul>
<div class="col-sm-12"> <div class="col-sm-12">
<div class="input-group mb-3 mx-auto"> <div class="input-group mb-3 mx-auto">
<button class="btn btn-primary btn-lg btn-block" type="submit">Save Changes</button> <button class="btn btn-primary btn-lg btn-block"
type="submit">Save Changes</button>
</div> </div>
</div> </div>
</form> </form>

View File

@ -90,6 +90,9 @@
})->name('user-profile'); })->name('user-profile');
Route::post('/user-profile', [UserController::class, 'update_profile']); Route::post('/user-profile', [UserController::class, 'update_profile']);
Route::post('/update-profile-picture', [UserController::class, 'updateProfilePicture'])
->name('update-profile-picture');
Route::post('/update-password', [UserController::class, 'updatePassword'])->name('update-password'); Route::post('/update-password', [UserController::class, 'updatePassword'])->name('update-password');
Route::resource('kriteria', CriteriaController::class); Route::resource('kriteria', CriteriaController::class);