App\Http\Controllers\OrdersController::showWishList PHP Method

showWishList() public method

Show the contents of a wish list.
public showWishList ( $id = '' ) : view
return view for orders.wish
    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'));
    }