HEX
Server: Apache/2.4.41 (Amazon) OpenSSL/1.0.2k-fips PHP/5.6.40
System: Linux ip-172-31-40-18 4.14.146-93.123.amzn1.x86_64 #1 SMP Tue Sep 24 00:45:23 UTC 2019 x86_64
User: apache (48)
PHP: 5.6.40
Disabled: NONE
Upload Files
File: //var/www/html/punjabcabs/Original_Backup/app/Http/Controllers/MainController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use DB;
use Log;
use Setting;
use Session;
use Auth;
use Exception;
use Notification;
use Carbon\Carbon;
use App\Helpers\Helper;
use Mail;

use App\User;
use App\Dispatcher;
use App\Provider;
use App\UserRequests;
use App\RequestFilter;
use App\ProviderService;
use App\ServiceType;
use App\Http\Controllers\SendPushNotification;
use App\Http\Controllers\ProviderResources\TripController;

class MainController extends Controller
{

    /**
     * Contact Email.
     *
     * @return \Illuminate\Http\Response
     */
    public function contactprocess(Request $request)
    {
       
        try{

            $user = $request->all();
            // send welcome email here
            if(Setting::get('mail_enable', 0) == 1) {
                Mail::send('emails.contact', ['user' => $user], function ($message) use ($user){
                    $message->to(config('app.email'), config('app.name'))->subject(config('app.name').' - Contact Form Inquiry');
                });
            }
            return back()->with('flash_success','Your message sent. Thanks for contacting.');

        } 

        catch (Exception $e) {
            return back()->with('flash_error', 'Sorry, something went wrong. try again later.');
        }  
    }

    public function changelang(Request $request)
    {
        $this->validate($request, [
                'language' => 'in:en,fr,de,es',
            ]);

            $language = $request->language;
            Session::put('language',$language);
            app()->setLocale($language);
            return back();
    }
    /**
     * Dispatcher Panel.
     *
     * @param  \App\Provider  $provider
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        if(Auth::guard('admin')->user()){
            $services = ServiceType::get();
            return view('admin.main.index',compact('services'));
        }elseif(Auth::guard('dispatcher')->user()){
            $services = ServiceType::get();
            return view('dispatcher.main.index',compact('services'));
        }
    }
    /**
     * Dispatcher Panel.
     *
     * @param  \App\Provider  $provider
     * @return \Illuminate\Http\Response
     */
    public function schedule()
    {
        if(Auth::guard('admin')->user()){
            $services = ServiceType::get();
            return view('admin.main.schedule',compact('services'));
        }elseif(Auth::guard('dispatcher')->user()){
            $services = ServiceType::get();
            return view('dispatcher.main.schedule',compact('services'));
        }
    }
    public function listall(Request $request)
    {
        $tripstatus = $request->tripstatus;
        $servicetype = $request->servicetype;
        $booking_by = $request->booking_by;
        $fromdate = Carbon::today();
        $todate = Carbon::now();
        
        if($request->fromdate !=''){
                $fromdate = Helper::date_formatter($request->fromdate);
            }
        if($request->todate !=''){
            $todate = Helper::date_formatter($request->todate);
        }
        
            $trips = UserRequests::with('user', 'provider', 'service_type', 'payment')
            ->where('status', 'LIKE', '%'.$tripstatus.'%')
            ->where('service_type_id', 'LIKE', '%'.$servicetype.'%')
            ->where('booking_by', 'LIKE', '%'.$booking_by.'%')
            ->where('created_at', '>=', $fromdate)
            ->where('created_at', '<', $todate)
            ->orderBy('assigned_at','desc')->get();
            /*dd($trips);*/

            $currency =setting::get('currency');
            $diskm =setting::get('distance_unit');
        if(Auth::guard('admin')->user()){
            return view('admin.main.show', compact('trips', 'currency', 'diskm'));
        }elseif(Auth::guard('dispatcher')->user()){
            return view('dispatcher.main.show', compact('trips', 'currency', 'diskm'));
        }
    }

    public function showdetail(Request $request)
    {
       
        if($request->has('id')){
            $id = $request->id;
            $request = UserRequests::with('user','provider', 'service_type','payment')->findOrFail($id);
            return $request;
        }
    }
    public function editdetail($request_id)
    {
           $request = UserRequests::with('user','provider', 'service_type','payment')->findOrFail($request_id);
           $services = ServiceType::get();
        if(Auth::guard('admin')->user()){
            return view('admin.main.modal.edit', compact('request', 'services'));
        }elseif(Auth::guard('dispatcher')->user()){
            return view('dispatcher.main.modal.edit', compact('request', 'services'));
        }
    }
    public function storedetail(Request $request, $id)
    {
           $this->validate($request, [
            's_address' => 'required|max:255',
            'd_address' => 'required|max:255',
            'service_type_id' => 'required',
            ]);

           try {

            $trip = UserRequests::findOrFail($id);
            $status = $request->status;
            if($status !='SEARCHING' && $status !='SCHEDULED' && $status !='CANCELLED'){
                    if($request->has('s_longitude')) {
                        $details = "https://maps.googleapis.com/maps/api/directions/json?origin=".$request->s_latitude.",".$request->s_longitude."&destination=".$request->d_latitude.",".$request->d_longitude."&mode=driving&key=".env('GOOGLE_MAP_KEY');

                    $json = curl($details);

                    $details = json_decode($json, TRUE);

                    $route_key = $details['routes'][0]['overview_polyline']['points'];
                    $meter = $details['routes'][0]['legs'][0]['distance']['value'];
                    $unit =Setting::get('distance_unit');
                    
                    if($unit =='km'){
                        $kilometer = $meter/1000;
                    }else{
                        $base = $meter/1000;
                        $kilometer = $base * 0.62137119;
                    }

                    $trip->distance = $kilometer;
                    $trip->s_latitude = $request->s_latitude;
                    $trip->s_longitude = $request->s_longitude;
                    $trip->d_latitude = $request->d_latitude;
                    $trip->d_longitude = $request->d_longitude;
                    $trip->route_key = $route_key;
                    $trip->s_address = $request->s_address;
                    $trip->d_address = $request->d_address;
                    $trip->save();
                    return back()->with('flash_success', 'Updated details');    
                    }
            }
            if($request->has('s_longitude')) {
                $details = "https://maps.googleapis.com/maps/api/directions/json?origin=".$request->s_latitude.",".$request->s_longitude."&destination=".$request->d_latitude.",".$request->d_longitude."&mode=driving&key=".env('GOOGLE_MAP_KEY');

            $json = curl($details);

            $details = json_decode($json, TRUE);

            $route_key = $details['routes'][0]['overview_polyline']['points'];
            $meter = $details['routes'][0]['legs'][0]['distance']['value'];
            $unit =Setting::get('distance_unit');
            
            if($unit =='km'){
                $kilometer = $meter/1000;
            }else{
                $base = $meter/1000;
                $kilometer = $base * 0.62137119;
            }

            $trip->distance = $kilometer;
            $trip->s_latitude = $request->s_latitude;
            $trip->s_longitude = $request->s_longitude;
            $trip->d_latitude = $request->d_latitude;
            $trip->d_longitude = $request->d_longitude;
            $trip->route_key = $route_key;
            }
            
            
            $trip->s_address = $request->s_address;
            $trip->d_address = $request->d_address;
            $trip->service_type_id = $request->service_type_id;
            $trip->provider_id = 0;
            $trip->current_provider_id = 0;
            $trip->cancelled_by ="NONE";
            $trip->cancel_reason ="";
            $trip->booking_by ="DISPATCHER";
            $checkstatus ='';
            $trip->assigned_at = Carbon::now();
            if($request->has('schedule_at')) {
                $trip->schedule_at = Carbon::parse($request->schedule_at);
                $trip->status ="SCHEDULED";
                $trip->push = 'AUTO';
            }else{
                $trip->schedule_at = Null;
                $trip->status ="SEARCHING";
                $trip->push = Null;
                $checkstatus = "SEARCHING";
            }
            
            $trip->user_rated =0;
            $trip->provider_rated =0;
            $trip->save();
            if($request->provider_auto_assign == 'on' && $trip->status =='SEARCHING'){
                $ActiveProviders = ProviderService::where('service_type_id', $request->service_type_id)
                ->where('status', 'active')->get()
                ->pluck('provider_id');

                $distance = Setting::get('provider_search_radius', '10');
                $latitude = $trip->s_latitude;
                $longitude = $trip->s_longitude;
                
                $Providers = Provider::whereIn('id', $ActiveProviders)
                    ->where('status', 'approved')
                    ->selectRaw("* , (1.609344 * 3956 * acos( cos( radians('$latitude') ) * cos( radians(latitude) ) * cos( radians(longitude) - radians('$longitude') ) + sin( radians('$latitude') ) * sin( radians(latitude) ) ) ) AS distance")
                    ->having('distance', '<', $distance)
                    ->orderBy('distance') 
                    ->get();
  
                if(count($Providers) > 0) { 

                    $trip->current_provider_id = $Providers[0]->id;
                    $trip->save();
                    ProviderService::where('provider_id',$Providers[0]->id)->update(['status' =>'riding']);
                    (new SendPushNotification)->IncomingRequest($Providers[0]->id);

                    foreach ($Providers as $key => $Provider) {

                        $Filter = new RequestFilter;
                        // Send push notifications to the first provider
                        // incoming request push to provider
                        $Filter->request_id = $trip->id;
                        $Filter->provider_id = $Provider->id; 
                        $Filter->save();
                        
                    }
                }else{
                    $trip->status = 'CANCELLED';
                    $trip->cancelled_by = 'NODRIVER';
                    $trip->save(); 
                }

            }
            return back()->with('flash_success', 'Updated details');  
        } 

        catch (ModelNotFoundException $e) {
            return back()->with('flash_error', 'Something Went Wrong');
        }
        
    }
    public function canceldetail(Request $request, $id)
    {
        try {
            $trip = UserRequests::findOrFail($id);
            $trip->status ="CANCELLED";
            $trip->cancelled_by ="DISPATCHER";
            $trip->push = Null;
            $trip->save();

            $RequestFilter = RequestFilter::where('request_id', $id)
            ->delete();

            return back()->with('flash_success', 'Trip Canceled Successfully');  
        } 

        catch (ModelNotFoundException $e) {
            return back()->with('flash_error', 'Something Went Wrong');
        }
        
    }

    public function autotrip($request_id)
    {
            $trip = UserRequests::findOrFail($request_id);
            $trip->provider_id = 0;
            $trip->current_provider_id = 0;
            $trip->cancelled_by ="NONE";
            $trip->cancel_reason ="";
            $trip->booking_by ="DISPATCHER";
            $trip->paid =0;
            $trip->assigned_at = Carbon::now();
            $trip->push = Null;
            $trip->schedule_at = Null;
            $trip->status ="SEARCHING";
            $trip->save();

            if($trip->status =='SEARCHING'){
                $ActiveProviders = ProviderService::where('service_type_id', $trip->service_type_id)
                ->where('status', 'active')->get()
                ->pluck('provider_id');

                $distance = Setting::get('provider_search_radius', '10');
                $latitude = $trip->s_latitude;
                $longitude = $trip->s_longitude;
                
                $Providers = Provider::whereIn('id', $ActiveProviders)
                    ->where('status', 'approved')
                    ->selectRaw("* , (1.609344 * 3956 * acos( cos( radians('$latitude') ) * cos( radians(latitude) ) * cos( radians(longitude) - radians('$longitude') ) + sin( radians('$latitude') ) * sin( radians(latitude) ) ) ) AS distance")
                    ->having('distance', '<', $distance)
                    ->orderBy('distance') 
                    ->get();
  
                if(count($Providers) > 0) { 

                    $trip->current_provider_id = $Providers[0]->id;
                    $trip->save();
                    ProviderService::where('provider_id',$Providers[0]->id)->update(['status' =>'riding']);  
                    (new SendPushNotification)->IncomingRequest($Providers[0]->id);

                    foreach ($Providers as $key => $Provider) {

                        $Filter = new RequestFilter;
                        // Send push notifications to the first provider
                        // incoming request push to provider
                        $Filter->request_id = $trip->id;
                        $Filter->provider_id = $Provider->id; 
                        $Filter->save();
                        
                    }
                }else{
                    $trip->status = 'CANCELLED';
                    $trip->cancelled_by = 'NODRIVER';
                    $trip->save(); 
                }

            }
    }
   
}