'Offers List', 'description' => 'List of offers' ]; } public function defineProperties() { return [ 'categorySlug' => [ 'title' => 'Select by category :slug', 'description' => 'Select by category', 'type' => 'string', 'default' => '' ], 'vendor_id' => [ 'title' => 'Select by vendor :id', 'description' => 'Select by vendor', 'type' => 'string', 'default' => '' ], 'perPage' => [ 'title' => 'Number of offers', 'description' => 'How many offers do you want to display', 'default' => 1, 'validationPattern' => '^[0-9]+$', 'validationMessage' => 'Only numbers allowed' ], 'sortOrder' => [ 'title' => 'Sort offers', 'description' => 'How to sort offers', 'type' => 'dropdown', 'default' => 'desc' ], 'productSlug' => [ 'title' => 'Product Slug', 'description' => 'Similar offers (the same product)', 'type' => 'string', 'default' => '' ], 'offerId' => [ 'title' => 'Offer id', 'description' => 'Offer id', 'type' => 'string', 'default' => '' ] ]; } public function getSortOrderOptions() { return [ 'asc' => 'Created date (ascending)', 'desc' => 'Created date (descending)' ]; } public function onRun() { $this->offers = $this->loadOffers(); $this->category = $this->getCategory(); $this->categories = $this->getCategories(); $this->cities = $this->getCities(); } protected function getCategory(){ $cSlug = $this->property('categorySlug'); $category = Category::transWhere('slug', $cSlug, Session::get('rainlab.translate.locale'))->first(); return $category; } protected function getCategories(){ $categories = Category::all(); return $categories; } protected function getCities(){ $cities = City::all(); return $cities; } protected function filterOffers(){ return "filterOffers"; } protected function loadOffers() { $sortOrderParam = strtolower(\Input::get('sort_order')); // protect from sql injection if($sortOrderParam != 'asc' && $sortOrderParam != 'desc') { $sortOrder = $this->property('sortOrder'); } else { $sortOrder = $sortOrderParam; $this->sortParam = $sortOrderParam; } $cSlug = $this->property('categorySlug'); $vendorId = $this->property('vendor_id'); $perPage = $this->property('perPage'); $productSlug = $this->property('productSlug'); $offerId = $this->property('offerId'); $query = Product::where('status', 'approved')->with("vendor")->withCount("images") ->orderBy('ends_at', $sortOrder); if($cSlug != '') { $category = Category::transWhere('slug', $cSlug, Session::get('rainlab.translate.locale'))->first(); if($category) { $query = $category->products() ->where('status','approved') ->orderBy('updated_at', $sortOrder); } else { $query = null; } } if($productSlug != '' && $offerId != '') { // fetch offers with similar products $product = Product::transWhere('slug', $productSlug, Session::get('rainlab.translate.locale'))->first(); if($product) { $category = $product->categories->first(); $query = $category->products() ->where('id','!=',$offerId) ->where('status','approved') ->orderBy('updated_at', $sortOrder); } else { $query = null; } } if($vendorId != '') { $query = Product::where('vendor_id', $vendorId)->where('status', 'approved')->orderBy('updated_at', $sortOrder); } return $query ? $query->paginate($perPage) : null; } 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"); } }