when($request->filled('search'), function (Builder $query) use ($request) { $search = $request->input('search'); $query->whereAny([ 'first_name', 'last_name', 'username', 'email' ], 'LIKE', "%$search%"); }) ->when($request->filled('sort'), function (Builder $query) use ($request) { $sort = $request->input('sort'); switch ($sort) { case 'name_desc': { $query ->orderByDesc('first_name'); break; } case 'email': { $query ->orderBy('email'); break; } case 'newest': { $query ->orderByDesc('created_at'); break; } case 'name_asc': default: { $query ->orderBy('first_name'); } } }, function (Builder $query) { $query->orderBy('first_name'); }) ->paginate() ->withQueryString(); return view('admin.admins.index', compact('title', 'admins')); } public function edit(Admin $admin) { return view('admin.admins.edit', compact('admin')); } public function create() { $title = 'ایجاد کاربر جدید'; return view('admin.admins.create'); } public function store(AdminStoreRequest $request) { $data = $request->validated(); $avatarPath = null; DB::beginTransaction(); try { $admin = Admin::create([ 'first_name' => $data['first_name'], 'last_name' => $data['last_name'], 'username' => $data['username'], 'email' => $data['email'] ?? null, 'mobile' => $data['mobile'] ?? null, 'password' => Hash::make($data['password']), 'role' => $data['role'], 'status' => $data['status'], ]); if ($request->hasFile('image')) { $image = $request->file('image'); $imageName = $admin->id . '_' . time() . '_' . rand(11111, 99999) . '.' . $image->extension(); $avatarPath = $image->storeAs( 'admin_avatars', $imageName, 'public' ); $file = File::create([ 'name' => $imageName, 'size' => $image->getSize(), 'original_name' => $image->getClientOriginalName(), 'path' => $avatarPath, 'extension' => $image->extension(), ]); // AdminAvatar::create([ // 'admin_id' => $admin->id, // 'file_id' => $file->id, // ]); } foreach ($data['permissions'] as $permission) { AdminPermission::create([ 'admin_id' => $admin->id, 'permission' => $permission, ]); } DB::commit(); return redirect() ->route('admin.admins.index') ->with('success', 'مدیر جدید با موفقیت ایجاد شد.'); } catch (\Throwable $exception) { DB::rollBack(); if ($avatarPath) { Storage::disk('public')->delete($avatarPath); } Log::error('خطا در ایجاد مدیر جدید', [ 'message' => $exception->getMessage(), 'file' => $exception->getFile(), 'line' => $exception->getLine(), ]); return back() ->withInput( $request->except([ 'password', 'password_confirmation', 'image', ]) ) ->with('error', 'خطایی هنگام ایجاد مدیر رخ داد.'); } } public function destroy() { } public function trash() { } public function restore() { } public function forceDelete() { } }