/**
  * @param $view
  */
 public function posts($view)
 {
     $viewData = $view->getData();
     if (!isset($view['posts'])) {
         $params = [];
         if (isset($viewData['element']->element_options)) {
             $options = json_decode($viewData['element']->element_options);
             if (isset($options->show)) {
                 $params['limit'] = $options->show;
             }
             if (isset($options->show_images) && !$options->show_images) {
                 $view->with('hideImages', true);
             }
             if (isset($options->category)) {
                 $params['category'] = $options->category;
             }
         }
         try {
             $params['token'] = CustomerHelper::checkLoggedinCustomer();
             $request = VendirunApi::makeRequest('blog/search', $params);
             $posts = $request->getData();
         } catch (FailResponseException $e) {
             $posts = [];
         }
         $view->with('posts', $posts);
     }
 }
 /**
  * @param $staffId
  * @return \Illuminate\View\View
  */
 public function staff($staffId)
 {
     $staff = VendirunApi::makeRequest('client/staff', ['id' => $staffId])->getData();
     if (!$staff) {
         abort(404);
     }
     return View::make('vendirun::cms.staff', ['person' => $staff]);
 }
 /**
  * Composer for the menu item, Checks if the menu is already set, if not does the API request
  * @param View $view
  */
 public function menuItem($view)
 {
     $viewData = $view->getData();
     if (!isset($viewData['menu'])) {
         $slug = isset($viewData['menuSlug']) ? $viewData['menuSlug'] : '';
         $menu = VendirunApi::makeRequest('cms/menu', ['slug' => $slug])->getData();
         $view->with('menu', $menu->sub_menu);
     }
 }
 /**
  * @return mixed
  */
 public function processReset()
 {
     try {
         VendirunApi::makeRequest('customer/passwordReset', ['email' => Request::get('email'), 'token' => Request::get('token'), 'password' => Request::get('password')]);
         return Redirect::route(LocaleHelper::localePrefix() . 'vendirun.passwordResetOk');
     } catch (FailResponseException $e) {
         $data['pageTitle'] = trans('vendirun::customer.recoverPassword');
         $data['alertMessage'] = trans('vendirun::customer.recoverPasswordFail2');
         $data['token'] = Request::get('token');
         return View::make('vendirun::customer.password.reset-form', $data);
     }
 }
 /**
  * @param $productId
  * @return \Illuminate\Http\RedirectResponse
  */
 public function removeFavourite($productId)
 {
     $response = VendirunApi::makeRequest('product/removeFavourite', ['token' => Session::get('token'), 'product_id' => $productId]);
     Cache::forget('favourites-' . Session::get('token'));
     if (!$response->getSuccess()) {
         Session::flash('vendirun-alert-error', $response->getError());
     } else {
         if (Session::has('primaryPagePath')) {
             return Redirect::to(Session::get('primaryPagePath'));
         }
     }
     return Redirect::back();
 }
 /**
  * @return \Illuminate\View\View
  */
 public function search()
 {
     $data = [];
     try {
         $searchVars = $_GET;
         $searchVars['language'] = App::getLocale();
         $searchVars['token'] = CustomerHelper::checkLoggedinCustomer();
         $posts = VendirunApi::makeRequest('blog/search', $searchVars);
         $data['posts'] = $posts->getData();
     } catch (FailResponseException $e) {
         abort('404');
     }
     return View::make('vendirun::blog.search', $data);
 }
 /**
  * @param View $view
  */
 public function customerDetails($view)
 {
     // check if token exists and confirm login
     if ($token = CustomerHelper::checkLoggedinCustomer()) {
         $loggedIn = VendirunApi::makeRequest('customer/tokenAuth', ['token' => $token]);
         if ($loggedIn->getSuccess()) {
             $data = $loggedIn->getData();
             $view->with('loggedInName', $data->name);
             $view->with('loggedInEmail', $data->name);
         } else {
             Session::remove('token');
         }
     }
 }
 /**
  * @param string $gateway
  * @return object
  */
 public static function getPaymentGatewayInfo($gateway = '')
 {
     $paymentGateways = VendirunApi::makeRequest('client/paymentGateways')->getData();
     $data['stripe'] = false;
     $data['paypal'] = false;
     foreach ($paymentGateways as $key => $settings) {
         if ($gateway == $key) {
             return $settings;
         }
         $data[$key] = true;
         $data[$key . 'Settings'] = $settings;
     }
     return (object) $data;
 }
 /**
  * @param View $view
  */
 public function slider($view)
 {
     $viewData = $view->getData();
     if (!isset($viewData['options'])) {
         $viewData['options'] = json_decode($viewData['element']->element_options, true);
     }
     $slider_id = $viewData['options']['id'];
     try {
         $slider = VendirunApi::makeRequest('cms/slider', ['id' => $slider_id])->getData();
         $sliderStyles = $this->getSliderStyles($slider);
         $slideStyles = $this->getSlideStyles($slider);
     } catch (FailResponseException $e) {
         $slider = false;
         $sliderStyles = [];
         $slideStyles = [];
     }
     $view->with('slider', $slider)->with('sliderStyles', $sliderStyles)->with('slideStyles', $slideStyles);
 }
 /**
  * @param View $view
  */
 public function getFavourites(View $view)
 {
     $cacheKey = 'favourites-' . Session::get('token');
     if (!($favouriteProducts = Cache::get($cacheKey))) {
         try {
             $favouriteProducts = VendirunApi::makeRequest('product/favourites', ['token' => Session::get('token')])->getData();
         } catch (\Exception $e) {
             $favouriteProducts = NULL;
         }
     }
     Cache::forever($cacheKey, $favouriteProducts);
     $favouriteProductsArray = [];
     if ($favouriteProducts) {
         foreach ($favouriteProducts->result as $favourite) {
             $favouriteProductsArray[] = $favourite->id;
         }
     }
     $view->with('favouriteProducts', $favouriteProducts)->with('favouriteProductsArray', $favouriteProductsArray);
 }
 /**
  * Handle an incoming request.
  *
  * @param  \Illuminate\Http\Request $request
  * @param  \Closure                 $next
  * @return mixed
  */
 public function handle($request, Closure $next)
 {
     $segment = $request->segment(1);
     if (in_array($segment, LocaleHelper::validLocales())) {
         app()->setLocale($segment);
     } else {
         $clientInfo = VendirunApi::makeRequest('client/publicInfo')->getData();
         app()->setLocale($clientInfo->primary_language->language_code);
     }
     // if it's a CMS page, we need to get rid of the locale part of the URL so we get the actual slug
     if ($request->route()->getName() == 'vendirun.cmsPage') {
         $path = $request->route()->parameter('catchall');
         $pathArray = explode('/', $path);
         if (in_array($pathArray[0], LocaleHelper::validLocales())) {
             $request->route()->setParameter('catchall', str_replace($request->segment(1) . '/', '', $path));
         }
     }
     return $next($request);
 }
 /**
  * @param array $items
  * @return object
  */
 public function getProducts($items)
 {
     return VendirunApi::makeRequest('product/search', ['variation_list_only' => implode(",", $items), 'limit' => 0])->getData();
 }
 /**
  * @param $id
  * @return \Illuminate\Http\RedirectResponse
  */
 public function delete($id)
 {
     VendirunApi::makeRequest('customer/deleteAddress', ['id' => $id]);
     return Redirect::route('vendirun.customer.account');
 }
 /**
  * @return object
  */
 public static function getRegions()
 {
     return VendirunApi::makeRequest('util/countries')->getData();
 }
 /**
  * @param string $slug
  * @return ProductCategory
  */
 public function find($slug)
 {
     $factory = new ProductCategoryFactory();
     return $factory->fromApi(VendirunApi::makeRequest('product/category', ['locale' => App::getLocale(), 'category' => $slug])->getData());
 }
 /**
  * Update only sends payment details as you cannot edit anything else on an
  *   order from the front-end
  * @param Order $order
  * @return Order
  */
 private function update(Order $order)
 {
     $params = ['id' => $order->getId(), 'payments' => $this->compose_payments($order)];
     $result = VendirunApi::makeRequest('order/update', $params)->getData();
     return $this->find($result->order_id, false);
 }
 /**
  * @param $data
  * @param $id
  * @return Customer
  */
 private function update($data, $id)
 {
     $data['id'] = $id;
     VendirunApi::makeRequest('customer/update', $data)->getData();
     return $this->find();
 }
 /**
  * @param $id
  * @return \Illuminate\View\View
  */
 public function recommend($id)
 {
     $data = [];
     try {
         $property = VendirunApi::makeRequest('property/property', ['id' => $id]);
         $data['property'] = $property->getData();
     } catch (FailResponseException $e) {
         if (App::environment() == 'production') {
             abort(404);
         }
     }
     return View::make('vendirun::property.recommend', $data);
 }
 /**
  * Displays favourite properties
  */
 public function viewFavouriteProperties()
 {
     $properties = VendirunApi::makeRequest('property/getFavourite', ['token' => Session::get('token'), 'idsOnly' => false]);
     return View::make('vendirun::property.favourite-properties')->with('properties', $properties->getData());
 }
 /**
  * @param View $view
  */
 public function getFavourites(View $view)
 {
     $favouritePropertiesArray = [];
     try {
         $favouriteProperties = VendirunApi::makeRequest('property/getFavourite', ['token' => Session::get('token')])->getData();
         foreach ($favouriteProperties as $favourite) {
             $favouritePropertiesArray[] = $favourite->id;
         }
     } catch (\Exception $e) {
         $favouriteProperties = NULL;
     }
     $view->with('favouriteProperties')->with('favouritePropertiesArray', $favouritePropertiesArray);
 }
 /**
  * @param $productVariationId
  * @return mixed
  */
 public function findByVariationId($productVariationId)
 {
     $searchParams['product_variation_id'] = $productVariationId;
     $productFactory = new ProductFactory();
     return $productFactory->fromApi(VendirunApi::makeRequest('product/product', $searchParams)->getData());
 }
 /**
  * @param $callbackData
  * @return $this|\Illuminate\Http\RedirectResponse
  */
 private function doEmailVerification($callbackData)
 {
     try {
         $params = ['email' => $callbackData['email'], 'callback_url' => route(LocaleHelper::localePrefix() . 'vendirun.emailConfirmAction'), 'callback_data' => json_encode($callbackData)];
         VendirunApi::makeRequest('customer/verifyEmail', $params);
         return Redirect::route(LocaleHelper::localePrefix() . 'vendirun.emailConfirm');
     } catch (FailResponseException $e) {
         return Redirect::route(LocaleHelper::localePrefix() . 'vendirun.register')->withInput()->withErrors($e->getMessage());
     }
 }