git add .
git commit "add profile image upload support"
This commit is contained in:
@@ -26,9 +26,9 @@ class RegisterController extends Controller
|
||||
{
|
||||
$inputs = $request->validated();
|
||||
|
||||
if ($request->hasFile('image')) {
|
||||
if ($request->hasFile('profile_image')) {
|
||||
|
||||
$image = $request->file('image');
|
||||
$image = $request->file('profile_image');
|
||||
|
||||
$imageName = time() . '.' . $image->getClientOriginalExtension();
|
||||
|
||||
@@ -37,7 +37,7 @@ class RegisterController extends Controller
|
||||
$imageName
|
||||
);
|
||||
|
||||
$inputs['image'] = $imageName;
|
||||
$inputs['profile_image'] = $imageName;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -7,4 +7,16 @@ use Illuminate\Http\Request;
|
||||
class FavoriteController extends Controller
|
||||
{
|
||||
//
|
||||
public function create()
|
||||
{
|
||||
|
||||
}
|
||||
public function store()
|
||||
{
|
||||
|
||||
}
|
||||
public function destroy()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,19 +3,54 @@
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Requests\ProfileUpdateRequest;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class ProfileController extends Controller
|
||||
{
|
||||
public function edite()
|
||||
{
|
||||
$withoutHero=true;
|
||||
$user=Auth::User();
|
||||
return view('users.profile.edit',compact('user'));
|
||||
return view('users.profile.edit',compact('user','withoutHero'));
|
||||
}
|
||||
|
||||
public function update(ProfileUpdateRequest $request)
|
||||
{
|
||||
$user=$request->user();
|
||||
$inputs=$request->validated();
|
||||
|
||||
if (!empty($inputs['new_password'])){
|
||||
$user->password=Hash::make($inputs['new_password']);
|
||||
}
|
||||
|
||||
unset(
|
||||
$inputs['current_password'],
|
||||
$inputs['new_password'],
|
||||
$inputs['new_password_confirmation'],
|
||||
|
||||
);
|
||||
|
||||
if ($request->hasFile('profile_image')) {
|
||||
|
||||
$image = $request->file('profile_image');
|
||||
|
||||
$imageName = time() . '.' . $image->getClientOriginalExtension();
|
||||
|
||||
$image->move(
|
||||
public_path('uploads/users'),
|
||||
$imageName
|
||||
);
|
||||
|
||||
$inputs['profile_image'] = $imageName;
|
||||
}
|
||||
$user->update($inputs);
|
||||
|
||||
return back()->with([
|
||||
'success','اطلاعات کاربر با موفقیت ویرایش شد.'
|
||||
]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Contracts\Validation\ValidationRule;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class ProfileUpdateRequest extends FormRequest
|
||||
{
|
||||
@@ -12,7 +13,7 @@ class ProfileUpdateRequest extends FormRequest
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -22,7 +23,110 @@ class ProfileUpdateRequest extends FormRequest
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
$user = auth()->user();
|
||||
|
||||
return [
|
||||
'first_name' => [
|
||||
'required',
|
||||
'persian_alpha',
|
||||
'string',
|
||||
'max:255'
|
||||
],
|
||||
|
||||
'last_name' => [
|
||||
'required',
|
||||
'persian_alpha',
|
||||
'string',
|
||||
'max:255'
|
||||
],
|
||||
|
||||
'national_code' => [
|
||||
'required',
|
||||
'ir_national_id',
|
||||
Rule::unique('users', 'national_code')
|
||||
->ignore($user->id),
|
||||
],
|
||||
|
||||
'gender' => [
|
||||
'required',
|
||||
'in:0,1'
|
||||
],
|
||||
|
||||
'marital_status' => [
|
||||
'required',
|
||||
'in:0,1,2'
|
||||
],
|
||||
|
||||
'spouse_name' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'persian_alpha',
|
||||
'max:255',
|
||||
'required_if:marital_status,1',
|
||||
],
|
||||
|
||||
'mobile' => [
|
||||
'required',
|
||||
'ir_mobile',
|
||||
Rule::unique('users','mobile')
|
||||
->ignore($user->id)
|
||||
],
|
||||
|
||||
'email' => [
|
||||
'required',
|
||||
'email',
|
||||
Rule::unique('users','email')
|
||||
->ignore($user->id)
|
||||
],
|
||||
|
||||
'username' => [
|
||||
'required',
|
||||
'string',
|
||||
'regex:/^[A-Za-z0-9]+$/',
|
||||
Rule::unique('users','username')->ignore($user->id)
|
||||
],
|
||||
'profile_image' => [
|
||||
'nullable',
|
||||
'image',
|
||||
'mimes:jpg,jpeg,png,webp',
|
||||
'max:800',
|
||||
],
|
||||
|
||||
'province_id' => [
|
||||
'nullable',
|
||||
'exists:provinces,id',
|
||||
],
|
||||
|
||||
'city_id' => [
|
||||
'nullable',
|
||||
Rule::exists('cities', 'id')
|
||||
->where(fn ($query) => $query->where('province_id', $this->province_id)),
|
||||
],
|
||||
|
||||
|
||||
'password' => [
|
||||
'required',
|
||||
'confirmed',
|
||||
'min:8'
|
||||
],
|
||||
'current_password' => [
|
||||
'required_with:new_password',
|
||||
'current_password:web',
|
||||
],
|
||||
|
||||
'new_password' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'min:8',
|
||||
'confirmed',
|
||||
],
|
||||
|
||||
'new_password_confirmation' => [
|
||||
'nullable',
|
||||
'string',
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ class RegisterPostRequest extends FormRequest
|
||||
'national_code' => [
|
||||
'required',
|
||||
'unique:users,national_code',
|
||||
// 'ir_national_id'
|
||||
'ir_national_id'
|
||||
],
|
||||
|
||||
'gender' => [
|
||||
@@ -75,7 +75,7 @@ class RegisterPostRequest extends FormRequest
|
||||
'unique:users,username',
|
||||
'regex:/^[A-Za-z0-9]+$/',
|
||||
],
|
||||
'image' => [
|
||||
'profile_image' => [
|
||||
'nullable',
|
||||
'image',
|
||||
'mimes:jpg,jpeg,png,webp',
|
||||
|
||||
@@ -346,7 +346,7 @@
|
||||
<div class="mb-4">
|
||||
|
||||
<label
|
||||
for="image"
|
||||
for="profile_image"
|
||||
class="block text-sm/6 font-medium text-gray-500 dark:text-gray-300"
|
||||
>
|
||||
تصویر پروفایل
|
||||
@@ -356,15 +356,15 @@
|
||||
|
||||
<input
|
||||
type="file"
|
||||
id="image"
|
||||
name="image"
|
||||
id="profile_image"
|
||||
name="profile_image"
|
||||
accept=".jpg,.jpeg,.png,.webp"
|
||||
class="block w-full p-3 text-base outline-none text-gray-800 dark:text-gray-100 dark:bg-gray-900 bg-slate-100 border border-transparent rounded-md"
|
||||
>
|
||||
|
||||
</div>
|
||||
|
||||
@error('image')
|
||||
@error('profile_image')
|
||||
<span class="text-red-500 text-sm">
|
||||
{{ $message }}
|
||||
</span>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
<!-- index.html 07:26:20 -->
|
||||
<head>
|
||||
<title>قالب رزرواسیون</title>
|
||||
<title>airline_agency</title>
|
||||
<meta charset="UTF-8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||
<link rel="stylesheet" href="{{asset('assets/css/font-awesome.css')}}"/>
|
||||
@@ -15,9 +15,9 @@
|
||||
|
||||
<body>
|
||||
@includeUnless(isset($withoutHeader),'layouts.header')
|
||||
@includeUnless(isset($withoutHeader),'layouts.hero')
|
||||
@includeUnless(isset($withoutHero),'layouts.hero')
|
||||
@yield('content')
|
||||
@includeUnless(isset($withoutHeader),'layouts.footer')
|
||||
@includeUnless(isset($withoutFooter),'layouts.footer')
|
||||
<script src="{{asset('assets/js/moment.js')}}"></script>
|
||||
<script src="{{asset('assets/js/bootstrap.js')}}"></script>
|
||||
<script src="{{asset('assets/js/owl-carousel.js')}}"></script>
|
||||
|
||||
@@ -1049,15 +1049,10 @@
|
||||
<ul class="dropdown-menu">
|
||||
|
||||
<li>
|
||||
<a href="#">
|
||||
<a href="{{route('users.profile.edit')}}">
|
||||
پروفایل
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
تغییر رمز عبور
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="#">
|
||||
|
||||
@@ -1,3 +1,231 @@
|
||||
<div>
|
||||
<!-- It is never too late to be what you might have been. - George Eliot -->
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="theme-page-section _pt-100">
|
||||
|
||||
<div class="container">
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-6 col-md-offset-3">
|
||||
|
||||
<div class="theme-login theme-login-white">
|
||||
|
||||
|
||||
<div class="theme-login-header">
|
||||
|
||||
<h1 class="theme-login-title">
|
||||
ویرایش پروفایل
|
||||
</h1>
|
||||
|
||||
<p class="theme-login-subtitle">
|
||||
اطلاعات حساب کاربری خود را ویرایش کنید
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="theme-login-box">
|
||||
|
||||
<div class="theme-login-box-inner">
|
||||
|
||||
|
||||
<form
|
||||
action="{{ route('users.profile.update') }}"
|
||||
method="POST"
|
||||
enctype="multipart/form-data"
|
||||
class="theme-login-form"
|
||||
>
|
||||
|
||||
@csrf
|
||||
@method('PUT')
|
||||
|
||||
|
||||
<div class="mb-4">
|
||||
|
||||
<label>
|
||||
نام
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="first_name"
|
||||
value="{{ old('first_name', $user->first_name) }}"
|
||||
class="form-control"
|
||||
>
|
||||
|
||||
@error('first_name')
|
||||
<span class="text-danger">
|
||||
{{ $message }}
|
||||
</span>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="mb-4">
|
||||
|
||||
<label>
|
||||
نام خانوادگی
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="last_name"
|
||||
value="{{ old('last_name', $user->last_name) }}"
|
||||
class="form-control"
|
||||
>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="mb-4">
|
||||
|
||||
<label>
|
||||
شماره موبایل
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="mobile"
|
||||
value="{{ old('mobile', $user->mobile) }}"
|
||||
class="form-control"
|
||||
>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="mb-4">
|
||||
|
||||
<label>
|
||||
ایمیل
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="email"
|
||||
name="email"
|
||||
value="{{ old('email', $user->email) }}"
|
||||
class="form-control"
|
||||
>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
|
||||
<label
|
||||
for="profile_image"
|
||||
class="block text-sm/6 font-medium text-gray-500 dark:text-gray-300"
|
||||
>
|
||||
تصویر پروفایل
|
||||
</label>
|
||||
|
||||
<div class="mt-3">
|
||||
|
||||
<input
|
||||
type="file"
|
||||
id="profile_image"
|
||||
name="profile_image"
|
||||
accept=".jpg,.jpeg,.png,.webp"
|
||||
class="block w-full p-3 text-base outline-none text-gray-800 dark:text-gray-100 dark:bg-gray-900 bg-slate-100 border border-transparent rounded-md"
|
||||
>
|
||||
|
||||
</div>
|
||||
|
||||
@error('profile_image')
|
||||
<span class="text-red-500 text-sm">
|
||||
{{ $message }}
|
||||
</span>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<hr>
|
||||
|
||||
|
||||
<h4>
|
||||
تغییر رمز عبور
|
||||
</h4>
|
||||
|
||||
|
||||
|
||||
<div class="mb-4">
|
||||
|
||||
<label>
|
||||
رمز عبور فعلی
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="password"
|
||||
name="current_password"
|
||||
class="form-control"
|
||||
>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="mb-4">
|
||||
|
||||
<label>
|
||||
رمز عبور جدید
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="password"
|
||||
name="new_password"
|
||||
class="form-control"
|
||||
>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="mb-4">
|
||||
|
||||
<label>
|
||||
تکرار رمز جدید
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="password"
|
||||
name="new_password_confirmation"
|
||||
class="form-control"
|
||||
>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<button
|
||||
type="submit"
|
||||
class="submit-btn"
|
||||
>
|
||||
ذخیره تغییرات
|
||||
</button>
|
||||
|
||||
|
||||
</form>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\DashboardController;
|
||||
use App\Http\Controllers\FavoriteController;
|
||||
use App\Http\Controllers\HomeController;
|
||||
use App\Http\Controllers\ProfileController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
@@ -15,4 +16,9 @@ Route::prefix('users')->name('users.')->middleware('auth:web')->group(function (
|
||||
Route::get('/profile/edit',[ProfileController::class,'edite'])->name('profile.edit');
|
||||
Route::put('/profile/update',[ProfileController::class,'update'])->name('profile.update');
|
||||
|
||||
Route::get('/favorite',[FavoriteController::class,'create'])->name('favorite.create');
|
||||
Route::post('favorite',[FavoriteController::class,'store'])->name('favorite.store');
|
||||
|
||||
Route::delete('/favorite/{favorite}',[FavoriteController::class,'destroy'])->name('favorite.destroy');
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user