first(); $features = Feature::get(); $testimonials = Testimonial::get(); $destinations = Destination::orderBy('view_count','desc')->get()->take(8); $posts = Post::with('blog_category')->orderBy('id','desc')->get()->take(3); $packages = Package::with(['destination','package_amenities','package_itineraries','tours','reviews'])->orderBy('id','desc')->get()->take(3); $home_item = HomeItem::where('id',1)->first(); return view('front.home', compact('sliders','welcome_item','features', 'testimonials', 'posts', 'destinations', 'packages', 'home_item')); } public function about() { $welcome_item = WelcomeItem::where('id',1)->first(); $features = Feature::get(); $counter_item = CounterItem::where('id',1)->first(); $about_item = AboutItem::where('id',1)->first(); return view('front.about', compact('welcome_item', 'features', 'counter_item', 'about_item')); } public function contact() { $contact_item = ContactItem::where('id',1)->first(); return view('front.contact', compact('contact_item')); } public function contact_submit(Request $request) { $request->validate([ 'name' => 'required', 'email' => 'required|email', 'comment' => 'required', ]); $admin = Admin::where('id',1)->first(); $subject = "Contact Form Message"; $message = "Name:
".$request->name."

"; $message .= "Email:
".$request->email."

"; $message .= "Comment:
".nl2br($request->comment)."
"; \Mail::to($admin->email)->send(new Websitemail($subject,$message)); return redirect()->back()->with('success', 'Your message is submitted successfully. We will contact you soon.'); } public function subscriber_submit(Request $request) { $request->validate([ 'email' => 'required|email|unique:subscribers,email', ]); $token = hash('sha256',time()); $obj = new Subscriber; $obj->email = $request->email; $obj->token = $token; $obj->status = 'Pending'; $obj->save(); $verification_link = route('subscriber_verify',['email'=>$request->email,'token'=>$token]); $subject = 'Subscriber Verification'; $message = 'Please click the following link to verify your email address as subscriber:
Verify Email'; \Mail::to($request->email)->send(new Websitemail($subject,$message)); return redirect()->back()->with('success', 'You are subscribed successfully. Please check your email to confirm the verification link.'); } public function subscriber_verify($email,$token) { $subscriber = Subscriber::where('token',$token)->where('email',$email)->first(); if(!$subscriber) { return redirect()->route('home'); } $subscriber->token = ''; $subscriber->status = 'Active'; $subscriber->update(); return redirect()->back()->with('success', 'Your subscribtion is successful.'); } public function team_members() { $team_members = TeamMember::paginate(20); return view('front.team_members', compact('team_members')); } public function team_member($slug) { $team_member = TeamMember::where('slug',$slug)->first(); return view('front.team_member', compact('team_member')); } public function faq() { $faqs = Faq::get(); return view('front.faq', compact('faqs')); } public function terms() { $term_privacy_item = TermPrivacyItem::where('id',1)->first(); return view('front.terms', compact('term_privacy_item')); } public function privacy() { $term_privacy_item = TermPrivacyItem::where('id',1)->first(); return view('front.privacy', compact('term_privacy_item')); } public function blog() { $posts = Post::with('blog_category')->orderBy('id','desc')->paginate(9); return view('front.blog', compact('posts')); } public function post($slug) { $categories = BlogCategory::orderBy('name','asc')->get(); $post = Post::with('blog_category')->where('slug',$slug)->first(); $latest_posts = Post::with('blog_category')->orderBy('id','desc')->get()->take(5); return view('front.post', compact('post', 'categories', 'latest_posts')); } public function category($slug) { $category = BlogCategory::where('slug',$slug)->first(); $posts = Post::with('blog_category')->where('blog_category_id',$category->id)->orderBy('id','desc')->paginate(9); return view('front.category', compact('posts', 'category')); } public function destinations() { $destinations = Destination::orderBy('id','asc')->paginate(20); return view('front.destinations', compact('destinations')); } public function destination($slug) { $destination = Destination::where('slug',$slug)->first(); $destination->view_count = $destination->view_count + 1; $destination->update(); $destination_photos = DestinationPhoto::where('destination_id',$destination->id)->get(); $destination_videos = DestinationVideo::where('destination_id',$destination->id)->get(); $packages = Package::with(['destination','package_amenities','package_itineraries','tours','reviews'])->orderBy('id','desc')->where('destination_id',$destination->id)->get()->take(3); return view('front.destination', compact('destination', 'destination_photos', 'destination_videos', 'packages')); } public function packages(Request $request) { $form_name = $request->name; $form_min_price = $request->min_price; $form_max_price = $request->max_price; $form_destination_id = $request->destination_id; $form_review = $request->review; $destinations = Destination::orderBy('name','asc')->get(); $packages = Package::with(['destination','package_amenities','package_itineraries','tours','reviews'])->orderBy('id','desc'); if($request->name != '') { $packages = $packages->where('name','like','%'.$request->name.'%'); } if($request->min_price != '') { $packages = $packages->where('price','>=',$request->min_price); } if($request->max_price != '') { $packages = $packages->where('price','<=',$request->max_price); } if($request->destination_id != '') { $packages = $packages->where('destination_id',$request->destination_id); } if($request->review != 'all' && $request->review != null) { $packages = $packages->whereRaw('total_score/total_rating = ?', [$request->review]); } $packages = $packages->paginate(6); return view('front.packages', compact('destinations', 'packages', 'form_name', 'form_min_price', 'form_max_price', 'form_destination_id', 'form_review')); } public function package($slug) { $package = Package::with('destination')->where('slug',$slug)->first(); $package_amenities_include = PackageAmenity::with('amenity')->where('package_id',$package->id)->where('type','Include')->get(); $package_amenities_exclude = PackageAmenity::with('amenity')->where('package_id',$package->id)->where('type','Exclude')->get(); $package_itineraries = PackageItinerary::where('package_id',$package->id)->get(); $package_photos = PackagePhoto::where('package_id',$package->id)->get(); $package_videos = PackageVideo::where('package_id',$package->id)->get(); $package_faqs = PackageFaq::where('package_id',$package->id)->get(); $tours = Tour::where('package_id',$package->id)->get(); $reviews = Review::with('user')->where('package_id',$package->id)->get(); return view('front.package', compact('package', 'package_amenities_include', 'package_amenities_exclude', 'package_itineraries', 'package_photos', 'package_videos', 'package_faqs', 'tours', 'reviews')); } public function wishlist($package_id) { if(!Auth::guard('web')->check()) { return redirect()->route('login')->with('error', 'Please login first to add this item to your wishlist!'); } $user_id = Auth::guard('web')->user()->id; $check = Wishlist::where('user_id',$user_id)->where('package_id',$package_id)->count(); if($check > 0) { return redirect()->back()->with('error', 'This item is already in your wishlist!'); } $wishlist = new Wishlist(); $wishlist->user_id = $user_id; $wishlist->package_id = $package_id; $wishlist->save(); return redirect()->back()->with('success', 'Item is added to your wishlist!'); } public function payment(Request $request) { //dd($request->all()); // Check the tour selection if(!$request->tour_id) { return redirect()->back()->with('error', 'Please select a tour first!'); } // Check the seat availability $tour_data = Tour::where('id',$request->tour_id)->first(); $total_allowed_seats = $tour_data->total_seat; if($total_allowed_seats != '-1') { $total_booked_seats = 0; $all_data = Booking::where('tour_id',$request->tour_id)->where('package_id',$request->package_id)->get(); foreach($all_data as $data) { $total_booked_seats += $data->total_person; } $remaining_seats = $total_allowed_seats - $total_booked_seats; if($total_booked_seats+$request->total_person > $total_allowed_seats) { return redirect()->back()->with('error', 'Sorry! Only '.$remaining_seats.' seats are available for this tour!'); } } $user_id = Auth::guard('web')->user()->id; $package = Package::where('id',$request->package_id)->first(); $total_price = $request->ticket_price * $request->total_person; if($request->payment_method == 'PayPal') { $provider = new PayPalClient; $provider->setApiCredentials(config('paypal')); $paypalToken = $provider->getAccessToken(); $response = $provider->createOrder([ "intent" => "CAPTURE", "application_context" => [ "return_url" => route('paypal_success'), "cancel_url" => route('paypal_cancel') ], "purchase_units" => [ [ "amount" => [ "currency_code" => "USD", "value" => $total_price ] ] ] ]); //dd($response); if(isset($response['id']) && $response['id'] != null) { foreach($response['links'] as $link) { if($link['rel'] == 'approve') { session()->put('total_person', $request->total_person); session()->put('tour_id', $request->tour_id); session()->put('package_id', $request->package_id); session()->put('user_id', $user_id); return redirect()->away($link['href']); } } } else { return redirect()->route('paypal_cancel'); } } elseif($request->payment_method == 'Stripe') { $stripe = new \Stripe\StripeClient(config('stripe.stripe_sk')); $response = $stripe->checkout->sessions->create([ 'line_items' => [ [ 'price_data' => [ 'currency' => 'usd', 'product_data' => [ 'name' => $package->name, ], 'unit_amount' => $total_price*100, ], 'quantity' => $request->total_person, ], ], 'mode' => 'payment', 'success_url' => route('stripe_success').'?session_id={CHECKOUT_SESSION_ID}', 'cancel_url' => route('stripe_cancel'), ]); //dd($response); if(isset($response->id) && $response->id != ''){ //session()->put('product_name', $request->product_name); //session()->put('quantity', $request->quantity); //session()->put('price', $request->price); session()->put('total_person', $request->total_person); session()->put('tour_id', $request->tour_id); session()->put('package_id', $request->package_id); session()->put('user_id', $user_id); session()->put('paid_amount', $total_price); return redirect($response->url); } else { return redirect()->route('stripe_cancel'); } } elseif($request->payment_method == 'Cash') { $obj = new Booking; $obj->tour_id = $request->tour_id; $obj->package_id = $request->package_id; $obj->user_id = Auth::guard('web')->user()->id; $obj->total_person = $request->total_person; $obj->paid_amount = $request->ticket_price; $obj->payment_method = "Cash"; $obj->payment_status = "Pending"; $obj->invoice_no = time(); $obj->save(); return redirect()->back()->with('success', 'Payment is pending and will be successful after admin approval!'); } } public function paypal_success(Request $request) { $provider = new PayPalClient; $provider->setApiCredentials(config('paypal')); $paypalToken = $provider->getAccessToken(); $response = $provider->capturePaymentOrder($request->token); //dd($response); if(isset($response['status']) && $response['status'] == 'COMPLETED') { // Insert data into database $obj = new Booking; $obj->tour_id = session()->get('tour_id'); $obj->package_id = session()->get('package_id'); $obj->user_id = session()->get('user_id'); $obj->total_person = session()->get('total_person'); //$obj->payment_id = $response['id']; $obj->paid_amount = $response['purchase_units'][0]['payments']['captures'][0]['amount']['value']; //$obj->currency = $response['purchase_units'][0]['payments']['captures'][0]['amount']['currency_code']; // $obj->payer_name = $response['payer']['name']['given_name']; // $obj->payer_email = $response['payer']['email_address']; $obj->payment_method = "PayPal"; $obj->payment_status = 'Completed'; $obj->invoice_no = time(); $obj->save(); return redirect()->back()->with('success', 'Payment is successful!'); unset($_SESSION['tour_id']); unset($_SESSION['package_id']); unset($_SESSION['user_id']); unset($_SESSION['total_person']); } else { return redirect()->route('paypal_cancel'); } } public function paypal_cancel() { return redirect()->back()->with('error', 'Payment is cancelled!'); } public function stripe_success(Request $request) { if(isset($request->session_id)) { $stripe = new \Stripe\StripeClient(config('stripe.stripe_sk')); $response = $stripe->checkout->sessions->retrieve($request->session_id); //dd($response); $obj = new Booking; $obj->tour_id = session()->get('tour_id'); $obj->package_id = session()->get('package_id'); $obj->user_id = session()->get('user_id'); $obj->total_person = session()->get('total_person'); $obj->paid_amount = session()->get('paid_amount'); $obj->payment_method = "Stripe"; $obj->payment_status = "Completed"; $obj->invoice_no = time(); $obj->save(); return redirect()->back()->with('success', 'Payment is successful!'); unset($_SESSION['tour_id']); unset($_SESSION['package_id']); unset($_SESSION['user_id']); unset($_SESSION['total_person']); unset($_SESSION['paid_amount']); } else { return redirect()->route('stripe_cancel'); } } public function stripe_cancel() { return redirect()->back()->with('error', 'Payment is cancelled!'); } public function enquery_form_submit(Request $request, $id) { $package = Package::where('id',$id)->first(); $admin = Admin::where('id',1)->first(); $request->validate([ 'name' => 'required', 'email' => 'required|email', 'phone' => 'required', 'message' => 'required', ]); $subject = "Enquery about: ".$package->name; $message = "Name:
".$request->name."

"; $message .= "Email:
".$request->email."

"; $message .= "Phone:
".$request->phone."

"; $message .= "Message:
".nl2br($request->message)."
"; \Mail::to($admin->email)->send(new Websitemail($subject,$message)); return redirect()->back()->with('success', 'Your enquery is submitted successfully. We will contact you soon.'); } public function review_submit(Request $request) { //dd($request->all()); $request->validate([ 'rating' => 'required', 'comment' => 'required', ]); $obj = new Review; $obj->user_id = Auth::guard('web')->user()->id; $obj->package_id = $request->package_id; $obj->rating = $request->rating; $obj->comment = $request->comment; $obj->save(); $package_data = Package::where('id',$request->package_id)->first(); $package_data->total_rating = $package_data->total_rating + 1; $package_data->total_score = $package_data->total_score + $request->rating; $package_data->update(); return redirect()->back()->with('success', 'Review is submitted successfully!'); } public function registration() { return view('front.registration'); } public function registration_submit(Request $request) { $request->validate([ 'name' => 'required', 'email' => 'required|email|unique:users,email', 'password' => 'required', 'retype_password' => 'required|same:password', ]); $token = hash('sha256',time()); $user = new User(); $user->name = $request->name; $user->email = $request->email; $user->password = bcrypt($request->password); $user->token = $token; $user->save(); $verification_link = route('registration_verify',['email'=>$request->email,'token'=>$token]); $subject = 'User Account Verification'; $message = 'Please click the following link to verify your email address:
Verify Email'; \Mail::to($request->email)->send(new Websitemail($subject,$message)); return redirect()->back()->with('success', 'Registration is Successful, but you have to verify your email address to login. So please check your email to confirm the verification link.'); } public function registration_verify($email,$token) { //dd($token,$email); $user = User::where('token',$token)->where('email',$email)->first(); if(!$user) { return redirect()->route('login'); } $user->token = ''; $user->status = 1; $user->update(); return redirect()->route('login')->with('success', 'Your email is verified. You can login now.'); } public function login() { return view('front.login'); } public function login_submit(Request $request) { $request->validate([ 'email' => ['required', 'email'], 'password' => ['required'], ]); $check = $request->all(); $data = [ 'email' => $check['email'], 'password' => $check['password'], 'status' => 1, ]; if(Auth::guard('web')->attempt($data)) { return redirect()->route('user_dashboard')->with('success','Login is successful!'); } else { return redirect()->route('login')->with('error','The information you entered is incorrect! Please try again!')->withInput(); } } public function logout() { Auth::guard('web')->logout(); return redirect()->route('login')->with('success','Logout is successful!'); } public function forget_password() { return view('front.forget-password'); } public function forget_password_submit(Request $request) { $request->validate([ 'email' => ['required', 'email'], ]); $user = User::where('email',$request->email)->first(); if(!$user) { return redirect()->back()->with('error','Email is not found!'); } $token = hash('sha256',time()); $user->token = $token; $user->update(); $reset_link = route('reset_password',['token'=>$token,'email'=>$request->email]); $subject = "Password Reset"; $message = "To reset password, please click on the link below:
"; $message .= "Click Here"; \Mail::to($request->email)->send(new Websitemail($subject,$message)); return redirect()->back()->with('success','We have sent a password reset link to your email'); } public function reset_password($token,$email) { $user = User::where('email',$email)->where('token',$token)->first(); if(!$user) { return redirect()->route('login')->with('error','Token or email is not correct!'); } return view('front.reset-password', compact('token','email')); } public function reset_password_submit(Request $request, $token, $email) { $request->validate([ 'password' => ['required'], 'retype_password' => ['required','same:password'], ]); $user = User::where('email',$request->email)->where('token',$request->token)->first(); $user->password = Hash::make($request->password); $user->token = ""; $user->update(); return redirect()->route('login')->with('success','Password reset is successful. You can login now.'); } }