shell bypass 403
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Response;
use Illuminate\Support\Str;
use App\Models\Product;
use App\Models\Cart;
use App\Models\Coupon;
use Carbon\Carbon;
use Auth;
class CartController extends Controller
{
public function index(Request $req)
{
$sessId = session()->getId();
$req->session()->put('session_id',$sessId);
if(Auth::check())
{
$data['cartItem'] = Cart::where('user_id',Auth::id())->get();
// $data['cartItem'] = Cart::all();
return view('cart',$data);
}
else
{
$data['cartItem'] = Cart::where('session_id',session('session_id'))->get();
// $data['cartItem'] = Cart::all();
return view('cart',$data);
// return back()->with('error','Please Login First');
}
}
public function cartCount()
{
if (auth()->check()) {
$cartCount = Cart::where('user_id', auth()->id())->count();
} else {
$cartCount = session()->has('cart') ? count(session('cart')) : 0;
}
return response()->json(['count' => $cartCount]);
}
public function insert(Request $req)
{
try {
$sessId = session()->getId();
$req->session()->put('session_id', $sessId);
$pro_id = $req->id;
$pro_quantity = $req->qty;
$pro_color = $req->color;
$pro_size = $req->size;
$varient = $req->varient;
$product = Product::where('product_id', $pro_id)->first();
if (!$product) {
return response()->json(['error' => 'Product not found']);
}
$product_category_id = $product->product_category_id;
if (Auth::user()) {
if (auth()->check()) {
$cartQuery = Cart::where('user_id', Auth::id())
->where('product_id', $pro_id)
->where('color_id', $pro_color)
->where('size_id', $pro_size)
->where('varient_id', $varient);
if ($cartQuery->exists()) {
$cart = $cartQuery->first();
$cart->product_quantity += $pro_quantity;
$cart->save();
} else {
$newCartItem = new Cart;
$newCartItem->user_id = Auth::user()->id;
$newCartItem->product_id = $pro_id;
$newCartItem->product_quantity = $pro_quantity;
$newCartItem->color_id = $pro_color;
$newCartItem->size_id = $pro_size;
$newCartItem->varient_id = $varient;
$newCartItem->save();
}
$this->applyCategoryDiscount(Auth::id(), $product_category_id);
$updatedCartItem = Cart::where('user_id', Auth::id())->where('product_id', $pro_id)->first();
return response()->json([
'success' => 'Cart Updated Successfully',
'discount' => $updatedCartItem->discount ?? 0,
'final_price' => $updatedCartItem->final_price ?? $product->product_origional_price,
]);
} else {
return response()->json(['loginerror' => 'Please Login First']);
}
} else {
$cartQuery = Cart::where('session_id', session('session_id'))
->where('product_id', $pro_id)
->where('color_id', $pro_color)
->where('size_id', $pro_size)
->where('varient_id', $varient);
if ($cartQuery->exists()) {
$cart = $cartQuery->first();
$cart->product_quantity += $pro_quantity;
$cart->save();
} else {
$newCartItem = new Cart;
$newCartItem->session_id = session('session_id');
$newCartItem->product_id = $pro_id;
$newCartItem->product_quantity = $pro_quantity;
$newCartItem->color_id = $pro_color;
$newCartItem->size_id = $pro_size;
$newCartItem->varient_id = $varient;
$newCartItem->save();
}
$this->applyCategoryDiscount(session('session_id'), $product_category_id, false);
$updatedCartItem = Cart::where('session_id', session('session_id'))->where('product_id', $pro_id)->first();
return response()->json([
'success' => 'Cart Updated Successfully',
'discount' => $updatedCartItem->discount ?? 0,
'final_price' => $updatedCartItem->final_price ?? $product->product_origional_price,
]);
}
} catch (\Exception $e) {
return response()->json(['error' => 'An error occurred: ' . $e->getMessage()]);
}
}
public function showProductDetail($id)
{
$product = Product::find($id);
if (!$product) {
abort(404, 'Product not found');
}
// Fetch cart details if needed
$cartItem = Cart::where('product_id', $id)
->where('user_id', Auth::id())
->orWhere('session_id', session('session_id'))
->first();
$discount = $cartItem->discount ?? 0;
$finalPrice = $cartItem->final_price ?? $product->product_origional_price;
return view('product_detail', [
'product' => $product,
'discount' => $discount,
'final_price' => $finalPrice
]);
}
private function applyCategoryDiscount($identifier, $product_category_id, $isAuth = true)
{
$discountPercentage = 10;
if ($isAuth) {
$cartItems = Cart::where('user_id', $identifier)
->whereHas('product', function ($query) use ($product_category_id) {
$query->where('product_category_id', $product_category_id);
})->get();
} else {
$cartItems = Cart::where('session_id', $identifier)
->whereHas('product', function ($query) use ($product_category_id) {
$query->where('product_category_id', $product_category_id);
})->get();
}
foreach ($cartItems as $cartItem) {
$product = Product::find($cartItem->product_id);
$totalPrice = $product->product_origional_price * $cartItem->product_quantity;
$discountAmount = ($totalPrice * $discountPercentage) / 100;
$cartItem->discount = $discountAmount;
$cartItem->final_price = $totalPrice - $discountAmount;
$cartItem->save();
}
}
public function update(Request $req)
{
$id = $req->id;
$pro_id = $req->pro_id;
$pro_quantity = $req->qty;
if(Auth::user())
{
if (auth()->check())
{
$prod_check = Product::where('product_id',$pro_id)->first();
if($prod_check)
{
$UpdateCart = Cart::find($id);
$UpdateCart->product_quantity = $pro_quantity;
$UpdateCart->save();
return response()->json(['success'=>'Cart Updated Successfully']);
}
}
else
{
return response()->json(['loginerror'=>'Please Login First']);
}
}
else
{
$prod_check = Product::where('product_id',$pro_id)->first();
if($prod_check)
{
$UpdateCart = Cart::find($id);
$UpdateCart->product_quantity = $pro_quantity;
$UpdateCart->save();
return response()->json(['success'=>'Cart Updated Successfully']);
}
}
}
public function delete(Request $req)
{
$id = $req->id;
$DeleteCart = Cart::find($id);
$DeleteCart->delete();
}
public function decrease(Request $req)
{
$id = $req->id;
$DecQty = Cart::find($id);
$DecQty->product_quantity = $DecQty->product_quantity - 1;
$DecQty->save();
return response()->json(['success'=>'decreased']);
}
public function increase(Request $req)
{
$id = $req->id;
$DecQty = Cart::find($id);
$DecQty->product_quantity = $DecQty->product_quantity + 1;
$DecQty->save();
return response()->json(['success'=>'increase']);
}
public function delete_all()
{
if(Auth::check())
{
Cart::where('user_id', Auth::id())->delete();
return redirect('cart');
}
else
{
Cart::where('session_id', session('session_id'))->delete();
return redirect('cart');
}
// Cart::truncate();
// return redirect('cart');
}
public function check_coupon(Request $req)
{
$coupon = $req->coupan;
$data = Coupon::where('coupon_code', $coupon)->where('coupon_status', 1)->first();
$current_date = Carbon::now();
if(!$data)
{
return response()->json(['notfound'=>'Invalid Coupon Please Enter Valid Coupon Code!']);
}
else
{
$dbase_date = $data->coupon_end_date;
if($dbase_date < $current_date)
{
return response()->json(['expire'=>'Coupon Code You Entered Is Expired!']);
}
else
{
$req->session()->put('coupon',[
'id' => $data->coupon_id,
'code' => $data->coupon_code,
'percent' => $data->coupon_percent,
'sdate' => $data->coupon_start_date,
'edate' => $data->coupon_end_date,
'status' => $data->coupon_status,
]);
return response()->json(['success'=>'Coupon Added Successfully!']);
}
}
}
// public function xyzz()
// {
// session()->forget('coupon');
// }
}