uploadFolder = 'sliders'; } public function index() { ResponseService::noAnyPermissionThenRedirect(['slider-list', 'slider-create', 'slider-update', 'slider-delete']); $slider = Slider::select(['id', 'image', 'sequence', 'country_id', 'state_id', 'city_id'])->orderBy('sequence', 'ASC')->with('country:id,name', 'state:id,name', 'city:id,name')->get(); $items = Item::where('status', 'approved')->get(); $categories = Category::where('status', 1)->get(); $countries = Country::select(['id', 'name'])->get(); return view('slider.index', compact('slider', 'items', 'categories', 'countries')); } public function store(Request $request) { if (! $request->filled('category_id') && ! $request->filled('item') && ! $request->filled('link')) { ResponseService::validationError('At least one of the fields (Category, Advertisement, or Third Party Link) is required.'); } ResponseService::noPermissionThenRedirect('slider-create'); $validator = Validator::make($request->all(), [ 'image.*' => 'required|image|mimes:jpg,png,jpeg|max:7168', ]); if ($validator->fails()) { ResponseService::validationError($validator->errors()->first()); } try { $lastSequence = Slider::max('sequence'); $nextSequence = $lastSequence + 1; $slider = Slider::create([ 'image' => $request->hasFile('image') ? FileService::compressAndUpload($request->file('image'), $this->uploadFolder) : '', 'third_party_link' => $request->link ?? '', 'sequence' => $nextSequence, 'country_id' => $request->country_id, 'state_id' => $request->state_id, 'city_id' => $request->city_id, ]); if ($request->filled('category_id')) { $category = Category::find($request->category_id); $slider->model()->associate($category)->save(); } if ($request->filled('item')) { $item = Item::find($request->item); $slider->model()->associate($item)->save(); } ResponseService::successResponse('Slider created successfully'); } catch (Throwable $th) { ResponseService::logErrorResponse($th, 'Slider Controller -> store'); ResponseService::errorResponse(); } } public function destroy($id) { ResponseService::noPermissionThenRedirect('slider-delete'); try { $slider = Slider::find($id); if ($slider) { $url = $slider->image; $relativePath = parse_url($url, PHP_URL_PATH); if (Storage::disk(config('filesystems.default'))->exists($relativePath)) { Storage::disk(config('filesystems.default'))->delete($relativePath); } $slider->delete(); ResponseService::successResponse('slider delete successfully'); } } catch (Throwable $th) { ResponseService::logErrorResponse($th, 'Slider Controller -> destroy'); ResponseService::errorResponse('something is wrong !!!'); } } public function show(Request $request) { ResponseService::noPermissionThenRedirect('slider-list'); $offset = $request->offset ?? 0; $limit = $request->limit ?? 10; $sort = $request->sort ?? 'id'; $order = $request->order ?? 'DESC'; $sql = Slider::with('model', 'country:id,name', 'state:id,name', 'city:id,name'); if (! empty($request->search)) { $sql = $sql->search($request->search); } $total = $sql->count(); $sql->sort($sort, $order)->skip($offset)->take($limit); $result = $sql->get(); $bulkData = []; $bulkData['total'] = $total; $rows = []; foreach ($result as $key => $row) { $tempRow = $row->toArray(); $operate = ''; if (Auth::user()->can('slider-delete')) { $operate .= BootstrapTableService::deleteButton(route('slider.destroy', $row->id)); } $tempRow['operate'] = $operate; $rows[] = $tempRow; } $bulkData['rows'] = $rows; return response()->json($bulkData); } }