D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
home
/
forge
/
re-viewers.com
/
app
/
Http
/
Controllers
/
Admin
/
Filename :
SliderController.php
back
Copy
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Models\Slider; use App\Models\Review; use Illuminate\Support\Facades\Log; use Illuminate\Support\Str; use Spatie\Image\Image; use Illuminate\Support\Facades\File; use Throwable; class SliderController extends Controller { public function index(Request $request) { $sliders = Slider::query(); // بحث if ($request->filled('search_value')) { $keyword = $request->input('search_value'); $sliders->where('slider_title', 'LIKE', "%{$keyword}%"); } $sliders = $sliders->orderBy('id', 'DESC')->paginate(12)->withQueryString(); return view('pages.sliders.index', compact('sliders')); } public function create() { try { $reviews = Review::where('status', 1)->orderBy('id', 'DESC')->get(); return view('pages.sliders.create', compact('reviews'))->with('page_title', 'Add Slider'); } catch (Throwable $e) { report($e); \Toastr::error('An unexpected error occurred.'); return redirect()->route('home'); } } public function store(Request $request) { try { $request->validate([ 'slider_type' => 'required|string|in:Review,external', 'review_id' => 'nullable|required_if:slider_type,Review|exists:reviews,id', 'slider_title' => 'nullable|required_if:slider_type,external|string|max:150', 'external_url' => 'nullable|required_if:slider_type,external|string|max:255', 'slider_file' => 'nullable|required_if:slider_type,external|image|mimes:jpeg,jpg,png|max:2048', ]); $data = $request->only(['slider_type', 'review_id', 'slider_title', 'external_url']); // تصحيح review_id if ($data['slider_type'] === 'Review') { $data['review_id'] = $request->input('review_id'); } else { $data['review_id'] = null; } $data['slider_title'] = $request->input('slider_title') ?? ''; $data['external_url'] = $request->input('external_url') ?? ''; // رفع الصورة إذا كانت موجودة if ($data['slider_type'] === 'external' && $request->hasFile('slider_file')) { $image = $request->file('slider_file'); $imageName = Str::random(10) . '_' . time() . '.' . $image->getClientOriginalExtension(); $image->move(public_path('images'), $imageName); $data['external_image'] = $imageName; } // منع التكرار if ($data['review_id']) { $existingSlider = Slider::where('review_id', $data['review_id']) ->where('slider_type', $data['slider_type']) ->where('status', 1) ->first(); if ($existingSlider) { \Toastr::error('This ' . $data['slider_type'] . ' is already in the slider!'); return redirect()->back()->withInput(); } } Slider::create($data); // تحديث حالة الـ review إذا كان نوعه Review if ($data['slider_type'] === 'Review' && $data['review_id']) { Review::where('id', $data['review_id'])->update(['set_as_slider' => 1]); } \Toastr::success('Slider added successfully!'); return redirect()->route('sliders.index'); } catch (\Exception $e) { Log::error($e->getMessage()); \Toastr::error('An unexpected error occurred. Please try again.'); return redirect()->back()->withInput(); } } public function edit(Slider $slider) { $reviews = Review::orderBy('product_title')->get(); return view('pages.sliders.edit', compact('slider', 'reviews'))->with('page_title', 'Edit Slider'); } /** * Update the specified slider in storage. * * @param \Illuminate\Http\Request $request * @param \App\Models\Slider $slider * @return \Illuminate\Http\RedirectResponse */ public function update(Request $request, Slider $slider) { try { $request->validate([ 'slider_type' => 'required|string|in:Review,external', 'review_id' => 'nullable|required_if:slider_type,Review|exists:reviews,id', 'slider_title' => 'nullable|required_if:slider_type,external|string|max:150', 'external_url' => 'nullable|required_if:slider_type,external|string|max:255', 'slider_file' => 'nullable|image|mimes:jpeg,jpg,png|max:2048', // File is not required on update ]); $data = $request->only(['slider_type', 'review_id', 'slider_title', 'external_url']); // Map review_id if ($data['slider_type'] === 'Review') { $data['review_id'] = $request->input('review_id'); } else { $data['review_id'] = null; } // Upload and handle image if it exists if ($data['slider_type'] === 'external' && $request->hasFile('slider_file')) { // Delete old image files if ($slider->external_image) { File::delete(public_path('images/' . $slider->external_image)); } $image = $request->file('slider_file'); $imageName = Str::random(10) . '_' . time() . '.' . $image->getClientOriginalExtension(); $image->move(public_path('images'), $imageName); $data['external_image'] = $imageName; } // Update the slider record $slider->update($data); \Toastr::success('Slider updated successfully!'); return redirect()->route('sliders.index'); } catch (\Exception $e) { Log::error($e->getMessage()); \Toastr::error('An unexpected error occurred. Please try again.'); return redirect()->back()->withInput(); } } /** * Remove the specified slider from storage. * * @param \App\Models\Slider $slider * @return \Illuminate\Http\RedirectResponse */ public function destroy(Slider $slider) { try { // Delete associated image if it exists if ($slider->external_image) { File::delete(public_path('images/' . $slider->external_image)); } // Delete the slider record $slider->delete(); \Toastr::success('Slider deleted successfully!'); return redirect()->back(); } catch (\Exception $e) { Log::error($e->getMessage()); \Toastr::error('An unexpected error occurred. Please try again.'); return redirect()->back(); } } }