diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 04c9c5a..66ff969 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -3,9 +3,53 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; +use App\Http\Requests\Admin\User\ChangePasswordRequest; +use App\Http\Requests\Admin\User\UserUpdateRequest; +use App\Models\User; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Hash; class UserController extends Controller { - // + public function index() + { + $users = User::query() + ->applySearch() + ->applySort() + ->latest() + ->paginate(4) + ->withQueryString(); + + return view('admin.users.index',compact('users')); + } + + public function edit(User $user) + { + return view('admin.users.edit',compact('user')); + } + public function update(UserUpdateRequest $request,User $user) + { + $user->update($request->validated()); + return redirect()->route('admin.users.index'); + } + + public function destroy(User $user) + { + $user->comments()->delete(); + $user->favorites()->delete(); + $user->reservations()->delete(); + $user->delete(); + + return redirect()->route('admin.users.index') + ->with('کاربر با موفقیت حذف شده.'); + } + + public function ChangePassword(ChangePasswordRequest $request,User $user) + { + $user->update(['password'=>Hash::make($request->password)]); + + return back(); + + + } } diff --git a/app/Http/Requests/Admin/User/ChangePasswordRequest.php b/app/Http/Requests/Admin/User/ChangePasswordRequest.php new file mode 100644 index 0000000..8ce4705 --- /dev/null +++ b/app/Http/Requests/Admin/User/ChangePasswordRequest.php @@ -0,0 +1,35 @@ +|string> + */ + public function rules(): array + { + return [ + 'password' => [ + 'required', + 'min:8', + 'confirmed', + ], + + + ]; + } +} diff --git a/app/Http/Requests/Admin/User/UserUpdateRequest.php b/app/Http/Requests/Admin/User/UserUpdateRequest.php new file mode 100644 index 0000000..c3b6907 --- /dev/null +++ b/app/Http/Requests/Admin/User/UserUpdateRequest.php @@ -0,0 +1,49 @@ +|string> + */ + public function rules(): array + { + return [ + 'first_name'=>[ + 'required', + 'string' + ], + 'last_name'=>[ + 'required', + 'string' + ], + 'email'=>[ + 'required', + 'email', + Rule::unique('users','email') + ->ignore($this->user->id), + ], + 'mobile'=>[ + 'required', + + Rule::unique('users','mobile') + ->ignore($this->user->id), + ] + ]; + } +} diff --git a/app/Models/Admin.php b/app/Models/Admin.php index a1b96f8..78c4aa6 100644 --- a/app/Models/Admin.php +++ b/app/Models/Admin.php @@ -90,8 +90,17 @@ class Admin extends User $query->orderBy('created_at', 'desc'), }; - } public function roles() + } + public function roles() { return $this->belongsToMany(Role::class, 'admin_roles'); } + public function hasPermission($permission) + { + return $this->roles() + ->whereHas('permissions', function ($query) use ($permission) { + $query->where('slug', $permission); + }) + ->exists(); + } } diff --git a/app/Models/User.php b/app/Models/User.php index e47f3ca..faf25d4 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -7,6 +7,8 @@ namespace App\Models; use Carbon\Carbon; +use Illuminate\Database\Eloquent\Attributes\Scope; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; use Illuminate\Foundation\Auth\User as Authenticatable; @@ -70,8 +72,44 @@ class User extends Authenticatable 'city_id', 'status' ]; + #[Scope] + protected function applySearch(Builder $query): void + { + $request = request(); - public function city() + if ($request->filled('keyword')) { + $keyword = $request->input('keyword'); + + $query->whereAny([ + 'first_name', + 'last_name', + 'mobile', + 'username', + ], 'LIKE', "%$keyword%"); + } + } + + #[Scope] + protected function applySort(Builder $query): void + { + $sort = request('sort'); + + match ($sort) { + + 'first_name_asc' => + $query->orderBy('first_name', 'asc'), + + 'first_name_desc' => + $query->orderBy('first_name', 'desc'), + + 'newest' => + $query->orderBy('created_at', 'desc'), + + default => + $query->orderBy('created_at', 'desc'), + }; + } + public function city() { return $this->belongsTo(City::class); } @@ -89,4 +127,8 @@ class User extends Authenticatable { return $this->hasMany(Favorite::class); } + public function reservations() + { + return $this->hasMany(Reservation::class); + } } diff --git a/resources/views/admin/layouts/sidebar.blade.php b/resources/views/admin/layouts/sidebar.blade.php index 5281211..7f967c1 100644 --- a/resources/views/admin/layouts/sidebar.blade.php +++ b/resources/views/admin/layouts/sidebar.blade.php @@ -39,6 +39,14 @@ + +