public function showWishList($id = '')
{
/*
* Checking if there is a product in flashWishList, if so, it will be saved into the basic wish list.
* This process happens just before the user add a product to wishlist being not logged.
* flashWishList will be deleted after being used into addToOrder method
*/
if (Session::get('flashWishList') !== null) {
$this->addToOrder('wishlist', Session::get('flashWishList.productId'), new Request());
Session::forget('flashWishList');
Session::save();
}
//saving added to wishlist message (it happens when the product is added to wishlist, and the method call this one)
Session::forget('suggest-listed');
if (Session::has('message')) {
Session::push('message', Session::get('message'));
}
$user = \Auth::user();
$productsHelper = new productsHelper();
$suggestions = [];
$hasWishList = true;
$hasLaterCart = true;
$wishListName = trans('store.basic_wish_list');
if ($user) {
/*
* it is used to verify whether the order required exist or not.
* if the order exists, its content is returned, otherwise,
* the basic wish list is retrieved
* @var string
*/
$order = '';
/*
* validating if there's a order requested.
* if it fails, there will be an 404 exception threw
*/
try {
$order = Order::findOrFail($id);
} catch (ModelNotFoundException $e) {
if (trim($id) != '') {
throw new NotFoundHttpException();
}
}
//if the user requires a specific wish list, its details will be provided
if ($order) {
$cart = Order::ofType('wishlist')->with('details')->where('user_id', $user->id)->where('id', $order->id)->first();
/**
* $wishListName will have the wish list name to be showed in the view.
*
* @var string
*/
$wishListName = $cart ? $cart->description : $wishListName;
} else {
$cart = Order::ofType('wishlist')->with('details')->where('user_id', $user->id)->first();
}
/*
* listing the user wish lists saved in his account.
* if there was a specific wish list requiered, it will be excluded from the directory list
*/
$wishLists = Order::select(['id', 'user_id', 'description'])->ofType('wishlist')->with('details')->where('description', '<>', '')->where('user_id', $user->id)->where('id', '<>', $cart ? $cart->id : '')->take(5)->get();
//products list saved for later
$laterCart = Order::ofType('later')->with('details')->where('user_id', $user->id)->first();
//evaluating wish list
if ($cart) {
if ($cart->details && $cart->details->count() > 0) {
//saving the ids selected to not include them into suggestions.
$productsHelper->setToHaystack($cart->details, 'product_id');
} else {
$hasWishList = false;
}
} else {
$hasWishList = false;
}
//evaluating wish list
if ($laterCart) {
if ($laterCart->details && $laterCart->details->count() > 0) {
//saving the ids selected to not include them into suggestions.
$productsHelper->setToHaystack($laterCart->details, 'product_id');
} else {
$hasLaterCart = false;
}
} else {
$hasLaterCart = false;
}
} else {
return redirect()->route('/auth/login');
}
$panel = ['center' => ['width' => '12']];
//suggestions based on cart content
$suggestions = ProductsController::getSuggestions(['preferences_key' => Session::get('suggest-listed'), 'limit' => 4]);
Session::forget('suggest-listed');
return view('orders.wish', compact('cart', 'user', 'panel', 'suggestions', 'cart', 'laterCart', 'wishLists', 'wishListName', 'hasWishList', 'hasLaterCart'));
}