HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux ip-172-26-0-120 6.17.0-1009-aws #9~24.04.2-Ubuntu SMP Fri Mar 6 23:50:29 UTC 2026 x86_64
User: ubuntu (1000)
PHP: 8.3.6
Disabled: NONE
Upload Files
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();
        }
    }
}