'User offers List', 'description' => 'List of users offers' ]; } public function defineProperties() { return [ 'perPage' => [ 'title' => 'Number of offers', 'description' => 'How many offers do you want to display', 'default' => 12, 'validationPattern' => '^[0-9]+$', 'validationMessage' => 'Only numbers allowed' ], 'slug' => [ 'title' => 'Select by category :slug', 'description' => 'Select by category', 'type' => 'string', 'default' => '' ], 'id' => [ 'title' => 'Select by vendor :id', 'description' => 'Select by vendor', 'type' => 'string', 'default' => '' ], ]; } public function onRun() { $allParams = \Input::all(); $params = ''; foreach ($allParams as $key => $item) { if($key != 'page'){ $params .= '&'.$key.'='.$item; } } $this->params = $params; $this->userCategories = $this->loadCategories(); $this->userProfile = $this->loadUser(); $this->userProducts = $this->loadProducts(); $this->sliders = $this->loadSliders(); $this->currentCat = $this->loadCurrentCategory(); if(\Auth::user()){ $this->authUser = \Auth::user()->id; $this->chatroom = $this->getChatroom(); $this->result = $this->getMessages($this->chatroom ? $this->chatroom->id : null); }else{ $this->authUser = null; $this->chatroom = null; $this->result = null; } } protected function loadProducts() { $perPage = $this->property('perPage'); $sort = \Input::get('sort'); $vendor_id = $this->property('id'); $categorySlug = $this->property('slug'); $category = null; if($categorySlug){ $category = Category::where('slug', $categorySlug)->first(); } $products = Product::query(); if($category){ if (isset($sort) && $sort != '') { $sort = self::getSort($sort); $products = $category->products()->where('status', 'approved')->where('vendor_id', $vendor_id)->withCount("images")->orderBy( $sort[0], $sort[1]); }else{ $products = $category->products()->where('status', 'approved')->where('vendor_id', $vendor_id)->withCount("images"); } }else{ if (isset($sort) && $sort != '') { $sort = self::getSort($sort); $products = $products->where("vendor_id", $vendor_id)->where('status', 'approved')->withCount("images")->orderBy( $sort[0], $sort[1]); }else{ $products = $products->where("vendor_id", $vendor_id)->where('status', 'approved')->withCount("images")->orderBy( "id", "DESC"); } } $products = $products->paginate($perPage); return $products; } private static function getSort($sort): array { $sort_key = trim($sort, '-'); if (str_contains($sort, '-') && strpos($sort, '-') == 0) { $sort_direction = 'desc'; } return [ $sort_key, $sort_direction ?? 'asc' ]; } protected function loadCategories(){ $user = User::find($this->property('id')); if($user){ $categories = $user->categories()->get(); return $categories; } return null; } protected function loadCurrentCategory(){ $currentCat = Category::where("slug", $this->property('slug'))->first(); if($currentCat){ return $currentCat; } return null; } public function loadUser(){ $user = User::with("sliders")->find($this->property('id')); return $user; } protected function loadSliders(){ $user = User::find($this->property('id')); return $user->sliders()->get(); } public function onCreateFav() { $data = input(); $validator = Validator::make($data, [ 'product_id' => 'required' ]); if($validator->fails()) { Flash::error("Haryt maglumatyny nädogry"); } $favourite = new Favourites; $favourite->user_id = \Auth::user()->id; $favourite->product_id = (int)$data['product_id']; $favourite->save(); Flash::success("Haryt halanlaryma goşuldy"); } protected function getChatroom() { if(\Auth::user()->id == $this->property('id')){ return null; }else{ $chatrooms = \Auth::user()->chatrooms; foreach($chatrooms as $room) { $room->message_partner = $room->users()->where('users.id','!=',\Auth::user()->id)->first(); if($room->message_partner){ if($room->message_partner->id == $this->property('id')) { return $room; } } } $seller = User::findOrFail($this->property('id')); $chatroom = new Chatroom; $chatroom->save(); $chatroom->users()->attach($seller->id); $chatroom->users()->attach(Auth::user()->id); $chatroom->message_partner = $seller; return $chatroom; } } public function getMessages($chatroomId){ if($chatroomId){ $result = Chatroom::find($chatroomId)->messages()->latest('send_at')->limit(10)->get()->reverse(); return $result; }else{ return null; } } }