htmlBuilder = $htmlBuilder; $this->htmlBuilder->parameters([ 'paging' => true, 'searching' => true, 'info' => false, 'searchDelay' => 350, 'language' => [ 'url' => Module::asset('core:datatable.json') ], ]); Parent::__construct(); } public function index(Request $request) { if ($request->ajax()) { return DataTables::of(Advertisement::select(['advertisements.id','advertisements.title','priority','status', 'category_id','expiration_time','type','accept','offer','advertisements.created_at', 'advertisements.updated_at' ,DB::raw('concat(users.fname ," ",users.lname) as users_fullname ') ,DB::raw('categories.title as categories_title ') ])->orderBy('id','Desc')->join('users', 'advertisements.user_id', '=', 'users.id') ->join('categories', 'advertisements.category_id', '=', 'categories.id') ) ->editColumn('accept', function($adv){ if($adv->accept==1){ return "فعال"; }elseif($adv->accept==0){ return "غیر فعال"; } }) ->editColumn('priority', function($adv) { if($adv->priority=='immediate'){ return "فوری"; }elseif($adv->priority=='immediate-special'){ return "ویژه و فوری"; } elseif($adv->priority=='special'){ return "ویژه"; }else{ return "عادی"; } }) ->editColumn('type', function($adv){ if($adv->type=='rent'){ return "اجاره"; }elseif($adv->type=='sale'){ return "فروش"; } elseif($adv->type=='buy'){ return "خرید"; } }) ->editColumn('offer', function($adv) { if($adv->offer==1){ return "فعال"; }elseif($adv->offer==0){ return "غیرفعال"; } }) ->editColumn('status', function($adv) { if($adv->status==1){ return "پرداخت شده"; }elseif($adv->status==0){ return "منقضی شده"; }elseif($adv->status==2){ return "در انتظار پرداخت"; } }) ->addColumn('operation', function($adv){ return parent::redirectAction('list/comment/'.$adv->id,'نظرات','success') . parent::redirectAction('list/experience/'.$adv->id,'گزارشات','primary') . parent::redirectAction('list/offer/'.$adv->id,'پیشنهادات','info') . parent::redirectAction('list/edit/'.$adv->id,'ویرایش','warning'); // . parent::redirectAction('list/delete?id='.$adv->id,'حذف','danger'); }) ->rawColumns(['operation','status','offer','priority','accept']) ->make(true); } $object = 'آگهی ها'; $html = $this->htmlBuilder ->addColumn(['data' =>'id', 'name' => 'id', 'title' => 'شناسه']) ->addColumn(['data' => 'users_fullname', 'name' => 'users.fname', 'title' => 'نام کاربر']) ->addColumn(['data' => 'users_fullname', 'name' => 'users.lname', 'title' => 'نام کاربر','class'=>'d-none']) ->addColumn(['data' => 'title', 'name' => 'title', 'title' => 'عنوان']) ->addColumn(['data' => 'type', 'name' => 'type', 'title' => 'نوع']) ->addColumn(['data' => 'accept', 'name' => 'accept', 'title' => 'نمایش']) ->addColumn(['data' => 'status', 'name' => 'status', 'title' => 'وضغیت']) ->addColumn(['data' => 'priority', 'name' => 'priority', 'title' => 'اولویت']) ->addColumn(['data' => 'categories_title', 'name' => 'categories.title', 'title' => 'دسته بندی']) ->addColumn(['data' => 'expiration_time', 'name' => 'expiration_time', 'title' => 'انقضا']) ->addColumn(['data' => 'created_at', 'name' => 'created_at', 'title' => 'ثبت']) ->addColumn(['data' => 'operation', 'name' => 'operation', 'title' => 'عملیات']); return view('core::shared.datatable', compact(['html','object'])); } /** * Remove the specified resource from storage. * @param Request $request * @return Response */ public function destroy(Request $request) { Advertisement::find($request->id)->delete(); return redirect('admin/advertisement/list'); } public function getCities($id){ $ids=City::where('state_id',$id)->pluck('id'); $data=CityTranslation::whereIn('city_id',$ids)->get(); return $data; } public function getCity(Request $request){ $city=City::where('id',$request->id)->first(); $ids=$city->id; $state_id=$city->state_id; $data=CityTranslation::where('city_id',$ids)->first(); $data['state']=StateTranslation::where('state_id',$state_id)->first(); return $data; } public function getStates(){ $data=StateTranslation::all(); return $data; } public function getSubCategory($id){ $data=Category::where('parent_id',$id)->get(); return $data; } public function getDataCategory($id){ $data=Category::where('id',$id)->with('items')->first(); $data['expiration_time']=\Carbon\Carbon::now()->addDays($data->time)->toDateString(); return $data; } /** * Show the form for creating a new resource. * @return Response */ public function add() { $data['route_action'] = 'advertisement.list.store'; $data['categories'] = Category::where('parent_id' , null)->get(); $data['state'] = StateTranslation::all(); return view('advertisement::advertisement.add',$data); } /** * Store a newly created resource in storage. * @param Request $request * @return Response */ public function store(Request $request) { $request['user_id'] = Auth::user()->id; if($request->priority=='immediate'){ $request['sort'] = 102; }elseif($request->priority=='special'){ $request['sort'] = 103; }elseif($request->priority=='normal'){ $request['sort'] = 101; }elseif($request->priority=='immediate-special'){ $request['sort'] = 104; } if(isset ($request->datas)){ $request['data'] = json_encode($request->datas); $adv=Advertisement::create($request->all()); }else{ $adv=Advertisement::create($request->all()); } Parent::multi_attachments_process($request,$adv); if(isset($request->shop_id)){ $adv_id=$adv->id; $shop_id=$request->shop_id; $ids=Like::where('likable_id',$shop_id)->where('likable_type','Modules\Shop\Entities\Shop')->pluck('user_id'); foreach ($ids as $itm){ User::find($itm)->notify(new NewAdvertisement($adv_id,$shop_id)); } } return redirect()->route('admin.advertisement.list'); } public function create(Request $request) { $request['user_id'] = Auth::user()->id; $request['user_id'] = Auth::user()->id; if($request->priority=='immediate'){ $request['sort'] = 102; }elseif($request->priority=='special'){ $request['sort'] = 103; }elseif($request->priority=='normal'){ $request['sort'] = 101; }elseif($request->priority=='immediate-special'){ $request['sort'] = 104; } if(isset ($request->datas)){ $request['data'] = json_encode($request->datas); $adv=Advertisement::create($request->all()); }else{ $adv=Advertisement::create($request->all()); } Parent::multi_attachments_process($request,$adv); if(isset($request->shop_id)){ $adv_id=$adv->id; $shop_id=$request->shop_id; $ids=Like::where('likable_id',$shop_id)->where('likable_type','Modules\Shop\Entities\Shop')->pluck('user_id'); foreach ($ids as $itm){ User::find($itm)->notify(new NewAdvertisement($adv_id,$shop_id)); } } return response()->json([ 'data' => $adv, 'message'=>'ok', 'status' => 200 ]); } /** * Show the form for editing the specified resource. * @param $id * @return Response */ public function edit($id) { $data['route_action'] = 'advertisement.list.update'; $data['data']=Advertisement::where('id',$id)->with('city','category','attachments')->first(); $state_id=$data['data']['city']['state_id']; $data['data']['state'] = StateTranslation::where('id',$state_id)->first(); $ids=City::where('state_id',$state_id)->pluck('id'); $data['data']['state']['cites'] = CityTranslation::whereIn('city_id',$ids)->get(); $data['state']= StateTranslation::all(); $data['params'] = ['id'=>$id]; $data['id']=$id; return view('advertisement::advertisement.edit',$data); } /** * Update the specified resource in storage. * @param Request $request * @return Response */ public function update(Request $request) { if(isset ($request->datas)){ $request['data'] = json_encode($request->datas); } $adv=Advertisement::find(($request->id))->update($request->all()); Parent::multi_attachments_process($request,$adv); return redirect()->route('admin.advertisement.list'); } /** * Show the specified resource. * @param Request $request * @return Response */ public function show(Request $request) { $c=new Advertisement(); if(isset($request->q)){ $input = $request->q; $c=$c->where('title','like',"%$input%"); } if(isset($request->filter)){ $filter=json_decode($request->filter); foreach ($filter as $key=>$value){ $c=$c->where('data->'.$key,$value); } } if(isset($request->category_id)){ $c=$c->where('category_id',$request->category_id); } if(isset($request->type)){ $c=$c->where('type',$request->type); } // if(isset($request->cat_parent)){ // $cats=Category::where('parent_id',$request->cat_parent)->pluck('id'); // $c=$c->whereIn('category_id',$cats); // } if(isset($request->priority)){ $c=$c->where('priority',$request->priority); } if(isset($request->city_id)){ $c=$c->where('city_id',$request->city_id); } if(isset($request->state_id)){ $cities=City::where('state_id',$request->state_id)->pluck('id'); $c=$c->whereIn('city_id',$cities); } if(isset($request->pricemin)){ $c=$c->where('price','>',$request->pricemin); } if(isset($request->pricemax)){ $c=$c->where('price','<',$request->pricemax); } if(isset($request->orderby)){ if($request->orderby=='priceDesc'){ $c=$c->orderBy('price','DESC'); }elseif ($request->orderby=='priceAsc'){ $c=$c->orderBy('price','ASC'); }elseif ($request->orderby=='idAsc'){ $c=$c->orderBy('id','ASC'); } elseif ($request->orderby=='idDesc'){ $c=$c->orderBy('id','DESC'); } } $data=$c->with('user','offers','attachments','experience','comments')->orderBy('id','desc')->where('accept',1)->paginate(9); return response()->json([ 'data' => $data, 'message'=>'ok', 'status' => 200 ]); } /** * Show the specified resource. * @param Request $request * @return Response */ public function single(Request $request) { $data=Advertisement::with('user','offers','attachments','experience','comments')->where('id',$request->id)->first(); $data->increment('hit'); return response()->json([ 'data' => $data, 'message'=>'ok', 'status' => 200 ]); } /** * Show the list of advertisements * @param Request $request * @return Response */ public function CategoryAdv(Request $request) { if($request->id){ $list=Category::find($request->id)->advertisement()->with('user')->where('accept',1)->orderBy('id','DESC')->paginate(9); }else{ $list=Advertisement::with('user')->where('accept',1)->orderBy('id','DESC')->paginate(9); } return response()->json([ 'data' => $list, 'message'=>'ok', 'status' => 200 ]); } /** * this function used to like a advertisement * @param Request $request * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response */ function like(Request $request){ $adv = Advertisement::find($request->id); $like = Advertisement::find($request->id)->like()->firstOrCreate([ 'user_id'=>Auth::user()->id ]); if($like->wasRecentlyCreated){ $adv->increment('like'); }else{ $like->delete(); $adv->decrement('like'); } return response()->json([ 'data' => true, 'message'=>'ok', 'status' => 200 ]); } function likedList(){ $data = Like::where('likable_type','Modules\Advertisement\Entities\Advertisement')->where('user_id',Auth::user()->id)->with('likable')->paginate(9); return response()->json([ 'data' => $data, 'message'=>'ok', 'status' => 200 ]); } /** * this function used to search * @param Request $request * @return array */ function search(Request $request){ $input = $request->q; $c=new Advertisement(); $c=$c->where('title','like',"%$input%"); if(isset($request->filter)){ $filter=json_decode($request->filter); foreach ($filter as $key=>$value){ $c=$c->where('data->'.$key,$value); } } if(isset($request->category_id)){ $c=$c->where('category_id',$request->category_id); } if(isset($request->cat_parent)){ $cats=Category::where('parent_id',$request->cat_parent)->pluck('id'); $c=$c->whereIn('category_id',$cats); } if(isset($request->priority)){ $c=$c->where('priority',$request->priority); } if(isset($request->city_id)){ $c=$c->where('city_id',$request->city_id); } if(isset($request->type)){ $c=$c->where('type',$request->type); } if(isset($request->state_id)){ $cities=City::where('state_id',$request->state_id)->pluck('id'); $c=$c->whereIn('city_id',$cities); } if(isset($request->pricemin)){ $c=$c->where('price','>',$request->pricemin); } if(isset($request->pricemax)){ $c=$c->where('price','<',$request->pricemax); } if(isset($request->orderby)){ if($request->orderby=='priceDesc'){ $c=$c->orderBy('price','DESC'); }elseif ($request->orderby=='priceAsc'){ $c=$c->orderBy('price','ASC'); }elseif ($request->orderby=='idAsc'){ $c=$c->orderBy('id','ASC'); } elseif ($request->orderby=='idDesc'){ $c=$c->orderBy('id','DESC'); } } $data=$c->with('user','offers','attachments','experience','comments')->where('accept',1)->get(); return response()->json([ 'data' => $data, 'message'=>'ok', 'status' => 200 ]); } static public function paid($json){ $data=json_decode($json); $advertisement_id=$data->adv_id; if($data->type=='immediate'){ $request['sort'] = 102; }elseif($data->type=='special'){ $request['sort'] = 103; }elseif($data->type=='normal'){ $request['sort'] = 101; }elseif($data->type=='immediate-special'){ $request['sort'] = 104; } Advertisement::where('id',$advertisement_id)->first()->update(['status'=>1,'priority'=>$data->type ,'sort' => $request['sort']]); } public function list() { $types=Advertisement::groupBy('category_id')->get()->pluck('category_id'); $array=array(); foreach ($types as $type){ $array[$type]=Advertisement::where('category_id',$type)->where('accept',1)->with('user','offers','attachments','experience','comments')->orderBy('id','desc')->take(5)->get(); } $data['advertisement']= $array; return response()->json([ 'data' => $data, 'message'=>'ok', 'status' => 200 ]); } public function related(Request $request) { $adv_id=$request->adv_id; $category_id=Advertisement::where('id',$adv_id)->first()->category_id; $data=Advertisement::where('category_id',$category_id)->where('id','!=',$adv_id)->where('accept',1)->with('user','offers','attachments','experience','comments')->orderBy('id','desc')->take(5)->get(); return response()->json([ 'data' => $data, 'message'=>'ok', 'status' => 200 ]); } public function userAdvertisement() { $data= Advertisement::where('user_id',Auth::user()->id)->with('user','offers','attachments','experience','comments')->orderBy('id','desc')->paginate(9); return response()->json([ 'data' => $data, 'message'=>'ok', 'status' => 200 ]); } public function maxPrice() { $data= Advertisement::max('price'); return response()->json([ 'data' => $data, 'message'=>'ok', 'status' => 200 ]); } public function delete(Request $request) { $adv=Advertisement::where('id',$request->id)->first(); if($adv->user_id==Auth::user()->id){ $adv->delete(); return response()->json([ 'data' => true, 'message'=>'ok', 'status' => 200 ]); }else{ return response()->json([ 'data' => false, 'message'=>'unauthenticated', 'status' => 200 ]); } } public function updateAdv(Request $request) { $adv=Advertisement::where('id',$request->id)->first(); if($adv->user_id==Auth::user()->id){ $request['user_id'] = Auth::user()->id; $request['accept'] = 0; if(isset ($request->datas)){ $request['data'] = json_encode($request->datas); $data=Advertisement::where('id',$request->id)->first()->update($request->all()); }else{ $data=Advertisement::where('id',$request->id)->first()->update($request->all()); } Parent::multi_attachments_process($request,$adv); return response()->json([ 'data' => $data, 'message'=>'ok', 'status' => 200 ]); }else{ return response()->json([ 'data' => false, 'message'=>'unauthenticated', 'status' => 200 ]); } } public function advDeleteAttachment(Request $request) { $Attachment=Attachment::where('uid',$request->uid)->first(); if($Attachment->attachmentable_type=='Modules\Advertisement\Entities\Advertisement'){ $Attachment->attachmentable_id; $user_id=Advertisement::where('id',$Attachment->attachmentable_id)->first()->user_id; if($user_id==Auth::user()->id){ $Attachment->delete(); return response()->json([ 'data' => true, 'message'=>'ok', 'status' => 200 ]); }else{ return response()->json([ 'data' => false, 'message'=>'unAuthorize', 'status' => 200 ]); } } } }