File: /var/www/html/orbidirectory.com/app/Http/Controllers/front/HomePageController.php
<?php
namespace App\Http\Controllers\front;
use App\Http\Controllers\Controller;
use App\Mail\LeadSubmitted;
use App\Models\CitySelection;
use App\Models\DirectLeads;
use App\Models\Faq;
use App\Models\Media;
use App\Models\OrbiLeads;
use App\Models\Settings;
use App\Models\Transporter;
use App\Models\User;
use App\Models\VehicleMake;
use App\Models\VehicleModel;
use App\Models\Vehicles;
use App\Models\VehicleTypes;
use App\Models\Seo;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cookie;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class HomePageController extends Controller
{
public function home()
{
$vehicle_types = VehicleTypes::where('status',VehicleTypes::STATUS_ACTIVATE)->latest()->take(6)->get();
$vehicle_models = VehicleModel::latest()->take(6)->get();
$vehicle_brand = VehicleMake::all();
$vehicle_record = Vehicles::with('get_make', 'get_model', 'vehicle_type', 'transporters.get_user', 'media')->take(6)->get();
$cities = CitySelection::get(); // Retrieves all cities from the database
$selectedCity = Cookie::get('selected_city', null);
$noVehiclesMessage = null; // Default to null
$transporters = Transporter::with(['vehicle.get_make', 'vehicle.get_model', 'vehicle.vehicle_type', 'vehicle.media','get_user'])
->when($selectedCity, function ($query) use ($selectedCity) {
return $query->whereRaw("FIND_IN_SET(?, service_city)", [$selectedCity]);
}, function ($query) {
return $query->latest()->take(6);
})
->get();
if ($selectedCity && $transporters->isEmpty()) {
$noVehiclesMessage = 'No vehicles are available in the selected city.';
}
$faqs = Faq::where('status', 0)->get();
$mediaItems = Media::whereIn('model_id', $vehicle_record->pluck('id'))->get();
$website_name = Settings::getValue('website_name', '#');
$website_phone_number = Settings::getValue('website_phone_number', '#');
$website_home_video = Settings::getVideoUrl('website_home_video');
$seo = Seo::seo('home');
return view('front.home', compact('vehicle_record', 'vehicle_brand', 'vehicle_types', 'vehicle_models', 'mediaItems', 'website_name', 'website_phone_number', 'faqs', 'website_home_video','seo','transporters','cities','selectedCity','noVehiclesMessage'));
}
// for dropdown home page
public function getModel($makeID)
{
$model = VehicleModel::where('make_id', $makeID)->get();
return response()->json($model);
}
public function getLocation($location)
{
$location = Transporter::where('service_area', $location)->get();
return response()->json($location);
}
public function searchAll(Request $request)
{
$transporters = Transporter::with(['vehicle.get_make', 'vehicle.get_model', 'vehicle.Vehicle_type', 'vehicle.media','vehicle.city'])
->get();
$vehicles = Vehicles::all(); // Fetch all vehicles (or add filters if necessary)
$vehicle_brand = VehicleMake::where('status',VehicleMake::STATUS_ACTIVATE)->latest()->get();
$vehicle_types = VehicleTypes::where('status',VehicleTypes::STATUS_ACTIVATE)->latest()->get();
$vehicle_models = VehicleModel::with('vehicle')->where('status',VehicleModel::STATUS_ACTIVATE)->latest()->get();
$seo = Seo::where('route_name','explore')->first();
$inputData = [
'brand' => $request->brand,
'model' => $request->model,
'city' => $request->city_id,
'vehicleTypeId' => $request->vehicleTypeId,
'keyword' => $request->keyword,
];
$website_phone_number = Settings::getValue('website_phone_number', '#');
$cities = CitySelection::get();
$selectedCity = Cookie::get('selected_city', null);
return view('front.search', compact('transporters','vehicles', 'vehicle_brand', 'vehicle_types', 'vehicle_models', 'inputData', 'website_phone_number','seo','cities','selectedCity'));
}
// public function searchAll(Request $request)
// {
// $vehicle_brand = VehicleMake::latest()->take(10)->get();
// $vehicle_types = VehicleTypes::latest()->take(10)->get();
// $vehicle_models = VehicleModel::with('vehicle')->latest()->take(10)->get();
// $seo = Seo::where('route_name','explore')->first();
// $query = Vehicles::with(['get_make', 'get_model', 'Vehicle_type', 'transporters.get_user', 'transporters.get_city', 'media']);
// if ($request->has('brand')) {
// $query = $query->where('make_id', $request->brand);
// }
// if ($request->has('model')) {
// $query = $query->where('model_id', $request->model);
// }
// // if ($request->has('location')) {
// // $query = $query->where('transporters.service_area', 'like', '%' . $request->location . '%');
// // }
// if ($request->has('location')) {
// $query->whereHas('transporters', function ($q) use ($request) {
// $q->where('service_area', 'like', '%' . $request->location . '%');
// });
// }
// if ($request->has('vehicle_types')) {
// $query = $query->where('vehicle_type_id', $request->vehicle_types);
// }
// if ($request->has('seating_capacity')) {
// $query = $query->where('seating_capacity', $request->seating_capacity);
// }
// if ($request->has('service_type')) {
// $query = $query->where('service_type', $request->service_type);
// }
// if ($request->has('is_verified')) {
// $query = $query->where('is_verified', $request->is_verified);
// }
// if ($request->has('keyword')) {
// $keyword = $request->keyword; // Get the keyword from the request
// $query->whereHas('get_make', function ($q) use ($keyword) {
// $q->where('name', 'like', '%' . $keyword . '%');
// })
// ->orWhereHas('get_model', function ($q) use ($keyword) {
// $q->where('name', 'like', '%' . $keyword . '%');
// })
// ->orWhereHas('transporters', function ($q) use ($keyword) {
// $q->where('service_area', 'like', '%' . $keyword . '%'); // Assuming 'location' is a column in the 'transporters' relationship
// })
// ->get();
// }
// // if ($request->has('vehicle_type_search')) {
// // $query->whereHas('vehicle_type', function ($q) use ($request) {
// // $q->where('vehicle_type_id', 'like', '%' . $request->vehicle_type_search . '%');
// // });
// // }
// if ($request->has('vehicle_type_search')) {
// $query->where('vehicle_type_id', $request->vehicle_type_search);
// }
// // $vehicles = $query->select('vehicles.id as vehicle_id', 'vehicles.*', 'transporters.*', 'vehicles.service_type', 'users.phone_number')
// // ->get();
// $vehicles = $query->get();
// // $vehicles = $query->paginate(3);
// // dd($vehicles);
// $inputData = [
// 'brand' => $request->brand,
// 'model' => $request->model,
// 'location' => $request->location,
// 'vehicleTypeId' => $request->vehicleTypeId,
// 'keyword' => $request->keyword,
// ];
// // if ($request->ajax()) {
// // return response()->json([
// // 'html' => view('front.partial.vehicle_list', ['vehicles' => $vehicles])->render(),
// // 'pagination' => (string) $vehicles->links()->render(),
// // ]);
// // }
// $website_phone_number = Settings::getValue('website_phone_number', '#');
// // dd($inputData);
// return view('front.search', compact('vehicles', 'vehicle_brand', 'vehicle_types', 'vehicle_models', 'inputData', 'website_phone_number','seo'));
// }
public function getVehicles(Request $request)
{
$page = $request->input('page', 1);
$limit = $request->input('limit', 9);
$offset = ($page - 1) * $limit;// Extract filter parameters from the request
$brand = $request->input('brand');
$model = $request->input('model');
$cityId = $request->input('city_id');
$vehicleTypeId = $request->input('vehicleTypeId');
$seatingCapacity = $request->input('seating_capacity');
// dd($seatingCapacity);
$serviceType = $request->input('service_type');
$isVerified = $request->input('is_verified');
$keyword = $request->input('keyword');
// Fetch vehicle brands, types, and models for filters
$vehicle_brand = VehicleMake::latest()->take(10)->get();
$vehicle_types = VehicleTypes::latest()->take(10)->get();
$vehicle_models = VehicleModel::with(['vehicle', 'get_make'])->latest()->take(10)->get();
$model_id = $request->input('model');
// Build the query with offset and limit
$query = Transporter::with(['vehicle.get_make', 'vehicle.get_model', 'vehicle.Vehicle_type', 'vehicle.media','vehicle.city','get_user']);
// dd($request->input('brand'));
$query->whereHas('vehicle', function ($q) use ($request) {
if ($request->filled('brand')) {
$q->where('make_id', $request->input('brand'));
}
if ($request->filled('model')) {
$q->where('model_id', $request->input('model'));
}
if ($request->filled('service_type')) {
$q->where('service_type', $request->input('service_type'));
}
if ($request->filled('seating_capacity')) {
$q->where('seating_capacity', $request->input('seating_capacity'));
}
if ($request->filled('vehicle_type_id')) {
$q->where('vehicle_type_id', $request->input('vehicle_type_id'));
}
// Add more filters if needed
});
$selectedCity = Cookie::get('selected_city', null);
$query->when($selectedCity, function ($q) use ($selectedCity) {
// Use FIND_IN_SET to check if selectedCity exists in the CSV field 'service_city'
return $q->whereRaw("FIND_IN_SET(?, service_city)", [$selectedCity]);
}, function ($q) {
// No selected city: get latest 6 records
return $q->latest()->take(6);
})
->get();
if ($request->filled('is_verified')) {
$query->where('is_verified', $isVerified);
}
$totalCount = $query->count(); // Total count of records
$totalPages = ceil($totalCount / $limit);
// Fetch vehicles with offset and limit
$transporters = $query->offset($offset)->limit($limit)->get();
$html = view('front.partial.vehicleSearch_list', compact('transporters', 'vehicle_models', 'vehicle_types','model_id'))->render();
// Return the response as JSON
return response()->json([
'transporters' => $transporters,
'vehicle_brand' => $vehicle_brand,
'vehicle_types' => $vehicle_types,
'vehicle_models' => $vehicle_models,
'html' => $html,
'total_pages' => $totalPages,
]);
}
public function vehicledetails($id)
{
try {
// dd(22);
$vehicle = Vehicles::with('get_make', 'get_model', 'vehicle_type', 'transporters.get_user', 'media','city')
->find($id);
$city = $vehicle->city ? $vehicle->city->name : '';
if (!$vehicle) {
Log::error('Vehicle not found with ID: ' . $id);
return response()->json(['error' => 'Vehicle not found'], 404);
}
$mediaUrl = $vehicle->getFirstMediaUrl('vehicle_image') ?: '';
// dd($vehicle);
$html = view('front.vehicle-details-html', compact('vehicle','city'))->render();
// dd(123);
Log::info('Generated HTML:', ['html' => $html]);
Log::info('Media URL:', ['media_url' => $mediaUrl]);
return response()->json(['html' => $html, 'media_url' => $mediaUrl]);
} catch (\Exception $e) {
Log::error('Error fetching vehicle details: ' . $e->getMessage());
return response()->json(['error' => 'Error fetching vehicle details'], 500);
}
}
public function listingStore(Request $request)
{
// dd($request->all());
try {
$validator = Validator::make($request->all(), [
'your_name' => 'required|string|max:255',
'your_email' => 'nullable|email|max:255',
'your_number' => 'nullable|digits:10|numeric',
]);
if ($validator->fails()) {
return response()->json(['error' => $validator->errors()], 422);
}
$direct_leads = new DirectLeads();
$direct_leads->transporter_id = $request->input('transporter_id');
$direct_leads->vehicle_id = $request->input('vehicle_id');
$direct_leads->name = $request->input('your_name');
$direct_leads->email = $request->input('your_email');
$direct_leads->phone_number = $request->input('your_number');
$direct_leads->source = 'Listing';
$direct_leads->save();
$vehicle = Vehicles::with('get_make', 'get_model', 'vehicle_type', 'transporters.get_user', 'media')
->find($direct_leads->vehicle_id);
if (!$vehicle) {
Log::error('Vehicle not found with ID: ' . $request->input('vehicle_id'));
return response()->json(['error' => 'Vehicle not found'], 404);
}
// $mediaUrl = $vehicle->getFirstMediaUrl('vehicle_image') ?: '';
$html = view('front.vehicle-details-html', compact('vehicle'))->render();
return response()->json(['html' => $html, 'success' => true]);
} catch (\Exception $e) {
// Log the exception and return an error response
Log::error('Error in listingStore: ' . $e->getMessage());
return response()->json(['error' => 'An error occurred.'], 500);
}
}
public function bookingform(Request $request)
{
// dd($request->all());
$validator = Validator::make($request->all(), [
'your_name' => 'required|string|max:255',
'your_email' => 'nullable|email|unique:direct_leads,email,NULL,id,phone_number,' . $request->input('your-number'),
'your_number' => 'nullable|regex:/^[0-9]{10}$/',
'vehicle_type' => 'required|exists:vehicle_types,id',
'passenger' => 'required',
'pickup' => 'required',
'drop' => 'required',
'datetimepicker' => 'required|date_format:Y/m/d H:i:s',
'your_message' => 'required',
]);
if ($validator->fails()) {
return response()->json(['error' => $validator->errors()], 422);
}
$travelDate = \Carbon\Carbon::createFromFormat('Y/m/d H:i:s', $request->datetimepicker)->format('Y/m/d H:i:s');
$orbi_leads = new OrbiLeads();
$orbi_leads->name = $request->your_name;
$orbi_leads->phone_number = $request->your_number;
$orbi_leads->email = $request->your_email;
$orbi_leads->vehicle_type_id = $request->vehicle_type;
$orbi_leads->number_of_passenger = $request->passenger;
$orbi_leads->pickup = $request->pickup;
$orbi_leads->drop = $request->drop;
$orbi_leads->travel_date = $travelDate;
$orbi_leads->description = $request->your_message;
$orbi_leads->save();
$admin = User::first();
// $admin = User::skip(1)->take(1)->first();
if ($admin) {
Mail::to($admin->email)->send(new LeadSubmitted($orbi_leads));
}
if ($request->hidden_homepage_booking) {
session()->flash('success-homepageform', 'Your booking has been successfully submitted! Our team will be in touch with you soon.');
return redirect()->back();
// return redirect()->to(url()->current() . '#BookingFormhome');
} else {
session()->flash('success', 'Your booking has been successfully submitted! Our team will be in touch with you soon.');
return redirect()->back();
}
}
}