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/VehicleTypesController.php
<?php

namespace App\Http\Controllers;

use App\Models\VehicleTypes;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use PhpParser\Node\Expr\FuncCall;
use Yajra\DataTables\Facades\DataTables;

class VehicleTypesController extends Controller
{
    public function index(Request $request)
    {
        if ($request->ajax()) {
            $search_keyword = '';

            $start_date = '';
            $end_date = '';
            $request_data = $request->all();
            if ($request->has('search_keyword')) {
                $search_keyword = $request->search_keyword;
            }

            // avoid zero column as it's checkbox so we can't sort by it
            if ($request->has('order') && $request->order[0]['column'] != 0) {
                $sort_column_number = $request->order[0]['column'];
                $sort_column_dir = $request->order[0]['dir'];
                $sort_column_key = $request->columns[$sort_column_number]['data'];
            }



            $main_query = VehicleTypes::query();
            $query = $main_query;
            $query = $main_query;
            if (!empty($search_keyword)) {
                $query = $query->where('name', 'LIKE', '%' . $search_keyword . '%');
            }

            if (!empty($sort_column_key)) {
                $query = $query->orderBy($sort_column_key, $sort_column_dir);
            } else {
                $query = $query->latest();
            }



            $data = $query->get();
            $count_total = $main_query->count();
            $count_filter = $count_total;
            return DataTables::of($data)

                ->addColumn('name', function ($row) {
                    return $row->name;
                })

            //   ->editColumn('created_at', function ($row) {
            //         return $row->created_at
            //             ? \Carbon\Carbon::parse($row->created_at)->timezone('Asia/Kolkata')->format('d-m-Y h:i A')
            //             : '';
            //     })
                ->addColumn('action', function ($row) {

                    if ($row->is_admin !== 1) {

                        return view('admin.vehicle_types.partially.delete', compact('row'));
                    }
                })
              ->editColumn('image', function ($row) {
                    $imageUrl = $row->getFirstMediaUrl('vehicle_type_image');
                    if ($imageUrl) {
                        return '<img src="' . $imageUrl . '" alt="Vehicle Type Image" width="50" height="50">';
                    } else {
                        return '-';
                    }
                })
            ->addColumn('status', function ($row) {
                $checked = $row->status ? 'checked' : '';
                return '
                <label class="switch">
                    <input type="checkbox" class="toggle-status" data-id="'.$row->id.'" '.$checked.'>
                    <span class="slider round"></span>
                </label>';
            })
            ->rawColumns(['action','status','image'])
            ->with([
                "recordsTotal"    => $count_total,
                "recordsFiltered" => $count_filter,
            ])
                ->make(true);
        }
        return view('admin.vehicle_types.index');
    }

    public function create()
    {
        return view('admin.vehicle_types.create');
    }

    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required|unique:vehicle_types,name',
            'vehicle_type_image' => 'required|mimes:png,jpg,jpeg,webp,svg|max:200',
        ], [
            'name.required' => 'The vehicle type name is required.',
            'name.unique' => 'This vehicle type already exists. Please choose a different name.',
            'vehicle_type_image.max' => 'The image must not be greater than 200KB.',
            'vehicle_type_image.mimes' => 'The icon must be a file of type: png, jpg, jpeg, svg, webp.',
        ]);

        if ($validator->fails()) {
            return redirect()->back()->withErrors($validator)->withInput();
        }

        // Image dimension validation
        if ($request->hasFile('vehicle_type_image')) {
            $image = $request->file('vehicle_type_image');
            $dimensions = getimagesize($image);
            if ($dimensions[0] != 150 || $dimensions[1] != 150) {
                return redirect()->back()->withErrors([
                    'vehicle_type_image' => 'The image must be exactly 150x150 pixels.'
                ])->withInput();
            }
        }

        $vehicle_type = new VehicleTypes();
        $vehicle_type->name = $request->name;
        $vehicle_type->save();

        if ($request->hasFile('vehicle_type_image')) {
            $vehicle_type->addMediaFromRequest('vehicle_type_image')->toMediaCollection('vehicle_type_image');
        }

        return redirect()->route('vehicle_type.index')->with('success', 'Vehicle Type added Successfully');
    }

    public function edit(string $id)
    {
        $vehicle_type = VehicleTypes::find($id);
        $imageUrl = $vehicle_type->getFirstMediaUrl('vehicle_type_image');
        if (isset($vehicle_type)) {

            return view('admin.vehicle_types.edit', compact('vehicle_type','imageUrl'));
        } else {
            return back()->with('error', 'Vehicle types does not exist');
        }
    }
    public function update(Request $request, string $id)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required',
            'vehicle_type_image' => 'nullable|mimes:png,jpg,jpeg,webp,svg|max:200',
        ],[
            'name.required' => 'The vehicle type name is required.',
            'name.unique' => 'This vehicle type already exists. Please choose a different name.',
            'vehicle_type_image.max' => 'The image must not be greater than 200KB.',
            'vehicle_type_image.mimes' => 'The icon must be a file of type: png, jpg, jpeg, svg, webp.',
        ]);

        if ($validator->fails()) {
            return redirect()->back()->withErrors($validator)->withInput();
        }

        // Image dimension validation
        if ($request->hasFile('vehicle_type_image')) {
            $image = $request->file('vehicle_type_image');
            $dimensions = getimagesize($image);
            if ($dimensions[0] != 150 || $dimensions[1] != 150) {
                return redirect()->back()->withErrors([
                    'vehicle_type_image' => 'The image must be exactly 150x150 pixels.'
                ])->withInput();
            }
        }

        $vehicle_type = VehicleTypes::find($id);
        if (isset($vehicle_type)) {
            $vehicle_type->name = $request->input('name');
            $vehicle_type->save();

            if ($request->hasFile('vehicle_type_image')) {
                $vehicle_type->clearMediaCollection('vehicle_type_image');
                $vehicle_type->addMediaFromRequest('vehicle_type_image')->toMediaCollection('vehicle_type_image');
            }

            return redirect()->route('vehicle_type.index')->with('success', 'Vehicle Type has been updated successfully.');
        } else {
            return back()->with('error', 'Vehicle Type not found.');
        }
    }

    // public function update(Request $request, string $id)
    // {

    //     $validator = Validator::make($request->all(), [
    //         'name' => 'required',
    //         'vehicle_type_image' => 'nullable|mimes:png,jpg,jpeg,webp,svg|max:200',
    //     ],[
    //         'name.required' => 'The vehicle type name is required.',
    //         'name.unique' => 'This vehicle type already exists. Please choose a different name.',
    //         'vehicle_type_image.max' => 'The image must not be greater than 200KB.',
    //         'vehicle_type_image.mimes' => 'The icon must be a file of type: png, jpg, jpeg, svg, webp.',
    //     ]);


    //     if ($validator->fails()) {
    //         return redirect()->back()->withErrors($validator)->withInput();
    //     }
    //     $vehicle_type = VehicleTypes::find($id);
    //     if (isset($vehicle_type)) {
    //         $vehicle_type->name = $request->input('name');
    //         $vehicle_type->save();
    //          if ($request->hasFile('vehicle_type_image')) {
    //             $vehicle_type->clearMediaCollection('vehicle_type_image');
    //             $vehicle_type->addMediaFromRequest('vehicle_type_image')->toMediaCollection('vehicle_type_image');
    //         }
    //         return redirect()->route('vehicle_type.index')->with('success', 'Vehicle Type has been updated successfully.');
    //     } else {
    //         return back()->with('error', 'Vehicle Type not found.');
    //     }
    // }
    public function destroy(string $id)
    {
        $vehicle_type = VehicleTypes::find($id);
        if (isset($vehicle_type)) {
            $vehicle_type->Delete();

            return redirect()->back()->with('success', 'Vehicle Type has been deleted successfully.');
        } else {
            return back()->with('error', 'Vehicle Type not found.');
        }
    }

    public function toggleStatus(Request $request){
        $vehicleType = VehicleTypes::find($request->id);
         if (!$vehicleType) {
            return response()->json([
                'success' => false,
                'message' => 'Vehicle type not found.'
            ]);
        }
        $vehicleType->status = $request->status;
        $vehicleType->save();
        return response()->json([
                'success' => true,
                'message' => 'Status updated successfully.'
            ]);    
        }
}