Implement settings page: profile update and password change
This commit is contained in:
@@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Http\Requests\UpdatePasswordRequest;
|
||||||
|
use App\Http\Requests\ProfilePostRequest;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use Illuminate\Support\Facades\Hash;
|
||||||
|
|
||||||
|
class SettingController extends Controller
|
||||||
|
{
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$user = Auth::user();
|
||||||
|
|
||||||
|
return view('dashboard.setting', compact('user'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updateProfile(ProfilePostRequest $request)
|
||||||
|
{
|
||||||
|
Auth::user()->update($request->validated());
|
||||||
|
|
||||||
|
return back()->with('success', 'مشخصات پروفایل با موفقیت بروزرسانی شد.');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updatePassword(UpdatePasswordRequest $request)
|
||||||
|
{
|
||||||
|
Auth::user()->update([
|
||||||
|
'password' => Hash::make($request->new_password),
|
||||||
|
]);
|
||||||
|
|
||||||
|
return back()->with('success', 'رمز عبور با موفقیت تغییر کرد.');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
|
class ProfilePostRequest extends FormRequest
|
||||||
|
{
|
||||||
|
public function authorize(): bool
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'first_name' => [
|
||||||
|
'required',
|
||||||
|
'string',
|
||||||
|
'min:3',
|
||||||
|
'max:150',
|
||||||
|
'persian_alpha',
|
||||||
|
|
||||||
|
],
|
||||||
|
'last_name' => [
|
||||||
|
'required',
|
||||||
|
'string',
|
||||||
|
'min:3',
|
||||||
|
'max:150',
|
||||||
|
'persian_alpha',
|
||||||
|
],
|
||||||
|
'email'=> [
|
||||||
|
'required',
|
||||||
|
'email',
|
||||||
|
Rule::unique('users', 'email')->ignore($this->user()->id)],
|
||||||
|
'mobile'=> [
|
||||||
|
'required',
|
||||||
|
'string',
|
||||||
|
'digits:11',
|
||||||
|
Rule::unique('users', 'mobile')->ignore($this->user()->id)],
|
||||||
|
'user_province' => [
|
||||||
|
'nullable'
|
||||||
|
],
|
||||||
|
'user_city' => [
|
||||||
|
'nullable'
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function attributes(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
//
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
use Illuminate\Support\Facades\Hash;
|
||||||
|
|
||||||
|
class UpdatePasswordRequest extends FormRequest
|
||||||
|
{
|
||||||
|
public function authorize(): bool
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'current_password' => ['required'],
|
||||||
|
'new_password' => ['required', 'string', 'min:8', 'confirmed'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function withValidator($validator)
|
||||||
|
{
|
||||||
|
$validator->after(function ($validator) {
|
||||||
|
if (!Hash::check($this->current_password, $this->user()->password)) {
|
||||||
|
$validator->errors()->add('current_password', 'رمز عبور فعلی صحیح نیست.');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public function attributes(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
//
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,7 +13,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<ul class="user-profile-sidebar-list">
|
<ul class="user-profile-sidebar-list">
|
||||||
<li><a class="active" href="{{route('profile')}}"><i class="far fa-user"></i> نمایه من</a></li>
|
<li><a class="active" href="{{route('profile')}}"><i class="far fa-user"></i> نمایه من</a></li>
|
||||||
<li><a href="{{route('dashboard')}}"><i class="far fa-gauge-high"></i> داشبورد</a></li>
|
|
||||||
<li><a href="profile-booking.html"><i class="far fa-shopping-bag"></i> رزرو من</a></li>
|
<li><a href="profile-booking.html"><i class="far fa-shopping-bag"></i> رزرو من</a></li>
|
||||||
<li><a href="profile-booking-history.html"><i class="far fa-clipboard-list"></i> تاریخچه رزرو</a></li>
|
<li><a href="profile-booking-history.html"><i class="far fa-clipboard-list"></i> تاریخچه رزرو</a></li>
|
||||||
<li><a href="profile-listing.html"><i class="far fa-globe"></i> فهرست من</a></li>
|
<li><a href="profile-listing.html"><i class="far fa-globe"></i> فهرست من</a></li>
|
||||||
@@ -29,7 +28,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="profile-wishlist.html"><i class="far fa-heart"></i> علاقه مندی های من</a></li>
|
<li><a href="profile-wishlist.html"><i class="far fa-heart"></i> علاقه مندی های من</a></li>
|
||||||
<li><a href="profile-setting.html"><i class="far fa-cog"></i> تنظیمات</a></li>
|
<li><a href="{{route('setting')}}"><i class="far fa-cog"></i> تنظیمات</a></li>
|
||||||
<li><a href="{{route('logout')}}"><i class="far fa-sign-out"></i> خروج</a></li>
|
<li><a href="{{route('logout')}}"><i class="far fa-sign-out"></i> خروج</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1,123 @@
|
|||||||
|
@extends('dashboard.layouts.app')
|
||||||
|
|
||||||
|
@section('title' , 'تنظیمات')
|
||||||
|
|
||||||
|
@section('account-content')
|
||||||
|
<div class="user-profile-wrapper">
|
||||||
|
|
||||||
|
@if (session('success'))
|
||||||
|
<div class="col-lg-12 mb-3">
|
||||||
|
<div class="alert alert-success">{{ session('success') }}</div>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
<div class="col-lg-12 mb-4">
|
||||||
|
<div class="user-profile-card">
|
||||||
|
<h4 class="user-profile-card-title">بروزرسانی مشخصات پروفایل</h4>
|
||||||
|
<div class="user-profile-form">
|
||||||
|
<form action="{{ route('setting.profile.update') }}" method="POST">
|
||||||
|
@csrf
|
||||||
|
@method('PUT')
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>نام </label>
|
||||||
|
<input type="text" name="first_name" class="form-control"
|
||||||
|
value="{{ old('first_name', $user->first_name) }}" placeholder="نام شما">
|
||||||
|
@error('first_name')
|
||||||
|
<span class="text-danger">
|
||||||
|
{{ $message }}
|
||||||
|
</span>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>نام خانوادگی</label>
|
||||||
|
<input type="text" name="last_name" class="form-control"
|
||||||
|
value="{{ old('last_name', $user->last_name) }}" placeholder="نام خانوادگی">
|
||||||
|
@error('last_name') <span class="text-danger">{{ $message }}</span> @enderror
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>ایمیل</label>
|
||||||
|
<input type="text" name="email" class="form-control"
|
||||||
|
value="{{ old('email', $user->email) }}" placeholder="ایمیل">
|
||||||
|
@error('email')
|
||||||
|
<span class="text-danger">{{ $message }}</span>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>موبایل</label>
|
||||||
|
<input type="text" name="mobile" class="form-control"
|
||||||
|
value="{{ old('mobile', $user->mobile) }}" placeholder="موبایل">
|
||||||
|
@error('mobile')
|
||||||
|
<span class="text-danger">{{ $message }}</span>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>استان</label>
|
||||||
|
<input type="text" name="user_province" class="form-control"
|
||||||
|
value="{{ old('user_province', $user->user_province) }}" placeholder="استان">
|
||||||
|
@error('user_province')
|
||||||
|
<span class="text-danger">{{ $message }}</span>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>شهر</label>
|
||||||
|
<input type="text" name="user_city" class="form-control"
|
||||||
|
value="{{ old('user_city', $user->user_city) }}" placeholder="شهر">
|
||||||
|
@error('user_city')
|
||||||
|
<span class="text-danger">{{ $message }}</span>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="theme-btn mt-4">آپدیت مشخصات پروفایل <i class="far fa-user"></i>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-12">
|
||||||
|
<div class="user-profile-card">
|
||||||
|
<h4 class="user-profile-card-title">عوض کردن رمز عبور</h4>
|
||||||
|
<div class="col-lg-12">
|
||||||
|
<div class="user-profile-form">
|
||||||
|
<form action="{{ route('setting.password.update') }}" method="POST">
|
||||||
|
@csrf
|
||||||
|
@method('PUT')
|
||||||
|
<div class="form-group">
|
||||||
|
<label>رمز عبور فعلی</label>
|
||||||
|
<input type="password" name="current_password" class="form-control"
|
||||||
|
placeholder="رمز عبور فعلی">
|
||||||
|
@error('current_password') <span class="text-danger">{{ $message }}</span> @enderror
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>رمز عبور جدید</label>
|
||||||
|
<input type="password" name="new_password" class="form-control"
|
||||||
|
placeholder="رمز عبور جدید">
|
||||||
|
@error('new_password') <span class="text-danger">{{ $message }}</span> @enderror
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>تکرار رمز عبور جدید</label>
|
||||||
|
<input type="password" name="new_password_confirmation" class="form-control"
|
||||||
|
placeholder="تکرار رمز عبور جدید">
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="theme-btn mt-4">عوض کردن رمز عبور <i class="far fa-key"></i>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
||||||
@@ -1,8 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Http\Controllers\DashboardController;
|
|
||||||
use App\Http\Controllers\ProfileController;
|
use App\Http\Controllers\ProfileController;
|
||||||
|
use App\Http\Controllers\SettingController;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
Route::get('profile' , [ProfileController::class , 'index'])->name('profile');
|
Route::get('profile' , [ProfileController::class , 'index'])->name('profile');
|
||||||
Route::get('dashboard' , [DashboardController::class , 'index'])->name('dashboard');
|
Route::get('setting' , [SettingController::class , 'index'])->name('setting');
|
||||||
|
|
||||||
|
Route::middleware('auth')->group(function () {
|
||||||
|
Route::get('/setting', [SettingController::class, 'index'])->name('setting');
|
||||||
|
Route::put('/setting/profile', [SettingController::class, 'updateProfile'])->name('setting.profile.update');
|
||||||
|
Route::put('/setting/password', [SettingController::class, 'updatePassword'])->name('setting.password.update');
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user