sort = 'stock_quantity'; } } // public function index() { if (!auth()->check() && \App\Helpers\getSetting('under') == 1) { return redirect('/under/index.php'); } $cats = Cat::whereNull('parent_id')->limit(6)->get(); $sliders = Slider::whereActive(true)->limit(5)->get(); // $vid = Clip::latest()->where('active', 1)->first(); $discount = Discount::whereNotNull('expire') ->where('expire', '>', \DB::raw('NOW()')) ->whereNotNull('product_id')->pluck('product_id')->toArray(); $disPros = Product::whereIn('id', $discount)->get(); return view('website.index', compact('cats', 'sliders', 'disPros')); } public function cat(Cat $cat, Request $request) { $q = $cat->products()->where('active', 1) ->orderByRaw("FIELD(stock_status, \"IN_STOCK\", \"BACK_ORDER\", \"OUT_STOCK\")") ->orderByDesc($this->sort)->orderByDesc('id'); if ($request->has('ext')) { $q = $q->where('stock_status', 'IN_STOCK') ->where('stock_quantity','>',0); } if ($request->has('from')) { $q = $q->where('price', '>=', $request->input('from')); } if ($request->has('to')) { $q = $q->where('price', '<=', $request->input('to')); } if ($request->has('sort')) { switch ($request->input('sort')) { case "fav": $q = $q->orderByDesc('average_rating'); break; case "cheap": $q = $q->orderBy('price'); break; case "new": $q = $q->orderByDesc('id'); break; case "expensive": $q = $q->orderByDesc('price'); break; default: $q = $q->orderByDesc('sell_count'); break; } } else { $q = $q->orderByDesc('sell_count'); } if (isset($request->meta) && isset($request->meta['material'])){ // dd(array_column(json_decode($request->meta['material'],true),'value')); if (count(json_decode($request->meta['material'],true) ) > 0){ $q->whereMetaIn('material',array_column(json_decode($request->meta['material'],true),'value')); } } if (isset($request->meta) && isset($request->meta['size'])) { $id = Quantity::where('count','>',0) ->where('data','LIKE','%"size":"'.$request->meta['size'].'"%') ->pluck('product_id')->toArray(); $q->whereIn('id',$id); } if (isset($request->meta) && isset($request->meta['color'])) { $id = Quantity::where('count','>',0) ->where('data','LIKE','%"color":"'.$request->meta['color'].'"%') ->pluck('product_id')->toArray(); $q->whereIn('id',$id); } $products = $q->paginate(16); return view('website.cat', compact('cat', 'products')); } public function products() { $sld = Slider::inRandomOrder()->first(); $products = Product::orderByDesc($this->sort) ->orderByDesc('id')->paginate(16); return view('website.products', compact('products', 'sld')); } public function product($pro) { if (is_numeric($pro)){ $pro = Product::whereId($pro)->first(); if ($pro == null){ $pro = Product::inRandomOrder()->limit(1)->first(); } return redirect()->route('product',$pro->slug); }else{ $pro = Product::whereSlug($pro)->first(); } $cat = $pro->category; // $p = Product::first()->; $pro->increment('view_count'); $comments = $pro->approved_comments()->paginate(10); return view('website.product', compact('pro', 'cat', 'comments')); } public function searchAjax(Request $request) { if (!$request->has('q') || mb_strlen(trim($request->q)) < 3) { $msg = __('Invalid search'); return ['OK' => false, 'err' => $msg]; } $q = trim($request->q); $products = Product::where(function ($query) use ($q) { $query->where('name', 'LIKE', '%' . $q . '%') ->orWhere('description', 'LIKE', '%' . $q . '%'); })->where('active', 1) ->orderByDesc('stock_quantity')->limit(3)->get(); $pros = []; foreach ($products as $product) { $pros[] = [ 'name' => $product->name, 'link' => route('product', $product->slug), 'image' => $product->thumbUrl(), 'price' => $product->stock_quantity == 0 ? 'ناموجود' : $product->getPrice(), ]; } return ['OK' => true, 'data' => $pros]; } public function search(Request $request) { if (!$request->has('q') || mb_strlen(trim($request->q)) < 3) { $msg = __('Invalid search'); $title = __('Search for') . ' :'; return view('website.products', compact('msg', 'title')); } $q = trim($request->q); $title = __('Search for') . ' :' . $q; $products = Product::where(function ($query) use ($q) { $query->where('name', 'LIKE', '%' . $q . '%') ->orWhere('description', 'LIKE', '%' . $q . '%'); })->orderByDesc('stock_quantity')->where('active', 1) ->paginate(16); $posts = Post::where(function ($query) use ($q) { $query->where('title', 'LIKE', '%' . $q . '%') ->orWhere('body', 'LIKE', '%' . $q . '%'); })->where('status', 1)->paginate(16); return view('website.products', compact('products', 'title', 'posts')); } public function post(Post $post) { $comments = $post->comments()->paginate(15); $sld = Slider::inRandomOrder()->first(); return view('website.post', compact('post', 'comments', 'sld')); } public function gallery(Gallery $gallery) { $title = $gallery->title; $subtitle = __('Gallery'); return view('website.gallery', compact('gallery', 'title', 'subtitle')); } public function galleries() { $title = __('Galleries list'); $subtitle = __('Galleries'); $galleries = Gallery::where('status', 1)->paginate(16); return view('website.galleries', compact('galleries', 'title', 'subtitle')); } public function clips() { $title = __('Pediatric dental clips'); $subtitle = __('Clips'); $clips = Clip::where('active', 1)->paginate(16); return view('website.clips', compact('clips', 'title', 'subtitle')); } public function tag($tag) { $title = __('Tag') . ' ' . $tag; $subtitle = __('Tagged by') . ' ' . $tag; $posts = Post::withAnyTag($tag)->paginate(); return view('website.posts', compact('posts', 'tag', 'title', 'subtitle')); } public function category(Category $category) { $title = __('Category') . ' ' . $category->name; $subtitle = __('Category') . ' ' . $category->name; $posts = $category->posts()->where('status', 1)->paginate(10); return view('website.posts', compact('posts', 'title', 'subtitle')); } public function posts() { $title = __('All posts'); $subtitle = ''; $posts = Post::where('status', 1) ->orderByDesc('id')->paginate(10); return view('website.posts', compact('posts', 'title', 'subtitle')); } public function like(Post $news, Request $request) { if (!gLog(Post::class, $news->id, 'like', $request)) { return ['OK' => false, 'msg' => __("You liked ago ") . $news->title]; } if ($request->input('action') == 1) { $news->increment('like'); return ['OK' => true, 'msg' => __("You liked ") . $news->title]; } else { $news->increment('dislike'); return ['OK' => true, 'msg' => __("You disliked ") . $news->title]; } } public function vote(Poll $poll, Request $request) { if (!gLog(Poll::class, $poll->id, 'vote', $request)) { return redirect()->back()->with(['message' => __("You voted ago ") . $poll->title]); } $poll->opinions()->where('id', $request->input('poll' . $poll->id)) ->increment('vote'); return redirect()->route('n.poll', $poll->slug) ->with(['message' => __("You voted right now ") . $poll->title]); } public function poll(Poll $poll, Request $request) { $count = $poll->opinions()->sum('vote'); $canVote = gLog(Poll::class, $poll->id, 'vote', $request, false); return view('website.poll', compact('poll', 'count', 'canVote')); } public function commentPost(Post $post, CommentClientRequest $request) { // return $news; // return $request->all(); $data = [ 'email' => $request->email, 'body' => $request->body, 'name' => $request->name, 'ip' => $request->ip() ]; // if ($request->has('parent') && $request->parent != null) { // $data['sub_comment_id'] = $request->parent; // } // $news->comments()->create( // $data // ); // return $news; $comment = new Comment(); $comment->commentable_id = $post->id; $comment->commentable_type = 'Xmen\StarterKit\Models\Post'; $comment->email = $request->email; $comment->body = $request->body; $comment->name = $request->name; $comment->ip = $request->ip(); if ($request->has('parent') && $request->parent != null) { // $data['sub_comment_id'] = $request->parent; $comment->sub_comment_id = $request->parent; } $comment->save(); return redirect()->route('post', $post->slug . '#comment-form')->with(['message' => __('Your comment submited successfully, After approve will be visbile.')]); } public function commentProduct(Product $product, CommentClientRequest $request) { // return $news; // return $request->all(); $data = [ 'email' => $request->email, 'body' => $request->body, 'name' => $request->name, 'ip' => $request->ip() ]; // if ($request->has('parent') && $request->parent != null) { // $data['sub_comment_id'] = $request->parent; // } // $news->comments()->create( // $data // ); // return $news; $comment = new Comment(); $comment->commentable_id = $product->id; $comment->commentable_type = 'App\Models\Product'; $comment->email = $request->email; $comment->body = $request->body; $comment->name = $request->name; $comment->ip = $request->ip(); if ($request->has('parent') && $request->parent != null) { // $data['sub_comment_id'] = $request->parent; $comment->sub_comment_id = $request->parent; } $comment->save(); return redirect()->route('product', $product->slug . '#comment-form')->with(['message' => __('Your comment submited successfully, After approve will be visbile.')]); } public function goadv(Adv $adv) { $adv->increment('click'); if ($adv->max_click != 0 && $adv->max_click < $adv->click) { $adv->update(['active' => false]); } return redirect($adv->link); } public function compare() { $arr = unserialize(session('to_compare', serialize([]))); $pros = Product::whereIn('id', $arr)->get(); return view('website.compare', compact('pros')); } public function compareAdd(Product $pro) { $arr = unserialize(session('to_compare', serialize([]))); if (!in_array($pro->id, $arr)) { $arr[] = $pro->id; session(['to_compare' => serialize($arr)]); } $pros = Product::whereIn('id', $arr)->get(); return view('website.compare', compact('pros')); } public function compareRem(Product $pro) { $arr = unserialize(session('to_compare', serialize([]))); if (in_array($pro->id, $arr)) { unset($arr[array_search($pro->id, $arr)]); session(['to_compare' => serialize($arr)]); } return redirect()->route('compare'); } public function cardAdd($id) { $arr = unserialize(session('card', serialize([]))); $arr2 = unserialize(session('qcard', serialize([]))); if (!in_array($id, $arr)) { $arr[] = $id; session(['card' => serialize($arr)]); } return ['OK' => true, 'msg' => __('Added to card'), 'data' => count(array_merge($arr, $arr2))]; } public function cardAddQ($id, $count) { $arr = unserialize(session('qcard', serialize([]))); $counts = unserialize(session('qcounts', serialize([]))); $arr2 = unserialize(session('card', serialize([]))); if (!in_array($id, $arr)) { $arr[] = $id; $counts[] = $count; session(['qcard' => serialize($arr)]); session(['qcounts' => serialize($counts)]); } return ['OK' => true, 'msg' => __('Added to card'), 'data' => count(array_merge($arr, $arr2))]; } public function cardRem($id) { $arr = unserialize(session('card', serialize([]))); if (($key = array_search($id, $arr)) !== false) { unset($arr[$key]); } session(['card' => serialize($arr)]); return redirect()->route('card.show')->with(['message' => __('Product removed form card')]); } public function cardRemQ($id) { $arr = unserialize(session('qcard', serialize([]))); $counts = unserialize(session('qcounts', serialize([]))); if (($key = array_search($id, $arr)) !== false) { unset($arr[$key]); unset($counts[$key]); } session(['qcard' => serialize($arr)]); return redirect()->route('card.show')->with(['message' => __('Product removed form card')]); } public function card() { $arr = unserialize(session('card', serialize([]))); $pros = Product::whereIn('slug', $arr)->get(); $arr = unserialize(session('qcard', serialize([]))); $counts = unserialize(session('qcounts', serialize([]))); $qpros = Quantity::whereIn('id', $arr)->get(); $transports = Transport::orderBy('sort')->orderBy('price')->get(); $resevers = Invoice::where('reserve',1)->where('customer_id', \auth('customer')->id()) ->whereBetween('created_at', [ Carbon::now()->subHour((int)getSetting('reserve')), Carbon::now(), ])->get(); \Session::put('shoping_card','1'); \Session::save(); return view('website.card', compact('pros', 'transports', 'qpros', 'counts', 'resevers')); } public function sign() { if (\Auth::guard('customer')->check()) { return redirect()->route('customer'); } if (config('app.sms_signup')) { return view('website.signsms'); } else { return view('website.sign'); } } public function questionSend(QuestionClientRequest $request) { $q = new Question(); $q->product_id = $request->product_id; $q->body = $request->body; $q->customer_id = Auth::guard('customer')->id(); $q->save(); return json_encode(['OK' => true, 'msg' => __('Your question has been sent, We answer it soon.')]); } public function mag() { $posts = Post::where('status', 1)->paginate(10); $title = __('Magazine'); return view('website.posts', compact('posts', 'title')); } public function sendSMS(Request $request) { // $this->sendSMS($request->mobile,) $code = rand(10000, 99999); $mobile = $request->mobile; $text = config('app.name') . PHP_EOL . __("Your authentication code") . ': ' . $code; $sms = new Sms(); $sms->ip = $request->ip(); $sms->text = $text; $sms->code = $code; $sms->mobile = $mobile; $sms->save(); if (Customer::where('mobile', $mobile)->count() > 0) { $c = Customer::where('mobile', $mobile)->first(); $c->code = $code; $c->save(); } sendSMSText($mobile, $text); return ['OK' => true, 'msg' => __('SMS send, Please login with you Auth code')]; } public function checkSMS(Request $request) { $code = $request->pass; $mobile = $request->mobile; if (Customer::where('mobile', $mobile)->count() > 0) { if (Customer::where('mobile', $mobile)->where('code', $code)->count() > 0){ Auth::guard('customer')->loginUsingId(Customer::where('mobile', $mobile) ->where('code', $code)->first()->id); return ['OK' => true, 'msg' => __('Welcome')]; }else{ return ['OK' => false, 'err' => __('Auth code error')]; } // login } else { // register if (Sms::where([['ip', $request->ip()], ['code', $code], ['created_at', '>=', Carbon::now()->subHours(1)->toDateTimeString()]])->count() == 0) { return ['OK' => false, 'err' => __('Auth code error')]; } else { $c = new Customer(); $c->mobile = $mobile; $c->save(); Auth::guard('customer')->loginUsingId($c->id); return ['OK' => true, 'msg' => __('Welcome')]; } } } public function profile(ProfileCustomerRequest $request) { $customer = Customer::whereId(Auth::guard('customer')->id())->firstOrFail(); $customer->name = $request->input('name'); $customer->address = $request->input('address'); $customer->state = $request->input('state'); $customer->city = $request->input('city'); $customer->description = $request->input('description'); $customer->postal_code = $request->input('postal_code'); $customer->email = $request->input('email'); // $customer->mobile = $request->input('mobile'); if (trim($request->input('password')) != '') { $customer->password = bcrypt($request->input('password')); } $customer->save(); return redirect()->route('customer')->with(['message' => __("Profile updated")]); } public function logout() { Auth::guard('customer')->logout(); return redirect()->route('sign'); } public function discount(Request $request) { if ($request->code == '') { return abort(404); } return Discount::where('code', $request->code)->firstOrFail(); } public function track() { $attaches = Attachment::orderBy('id', 'desc')->paginate(20); return view('website.track', compact('attaches')); } public function favToggle(Product $product) { if (\auth('customer')->check()) { if (\auth('customer')->user()->products()->where('product_id', $product->id)->exists()) { \auth('customer')->user()->products()->where('product_id', $product->id)->detach(); return ['OK' => true, 'msg' => __('Product removed from favorite'), 'liked' => false]; } else { \auth('customer')->user()->products()->attach($product->id); return ['OK' => true, 'msg' => __('Product added to favorite'), 'liked' => true]; } } else { return ['OK' => false, 'msg' => 'You must login to do this action']; } } public function contact() { $title = __('ContactUs'); return view('website.contact', compact('title')); // return view('website.contact'); } public function sendContact(ContactSaveRequest $request) { $con = new Contact(); $con->full_name = $request->full_name; $con->email = $request->email; $con->Phone = $request->Phone; $con->subject = $request->subject; $con->body = $request->bodya; $con->save(); return redirect()->back()->with(['message' => __('Your message has been successfully sent.')]); } public function reset() { \Session::remove('card'); \Session::remove('qcard'); \Session::remove('qcounts'); \Session::save(); return __('Card cleared') . '...'; } static public function resetStockStatus(){ Product::whereStockQuantity('0')->update(['stock_status' => 'OUT_STOCK']); return 'Done!'; } static public function resetQuantity(){ $qs = Quantity::groupBy('product_id') ->select('product_id', DB::raw('sum(`count`) as count')) ->get(); foreach ($qs as $q){ $p = Product::whereId($q->product_id)->first(); if ($p != null){ $p->stock_quantity = $q->count; $p->save(); } } return 'Done!'; } }