MailController.php (Before) MailController.php (After)
<?php <?php
   
namespace App\Http\Controllers; namespace App\Http\Controllers;
   
use DB; use DB;
use Log; use Log;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Config; use Config;
use App\Http\Controllers\QuizController; use App\Http\Controllers\QuizController;
use App\Http\ResponseHelper; use App\Http\ResponseHelper;
   
class MailController extends Controller class MailController extends Controller
{ {
   public function __construct()    public function __construct()
   {    {
       $this->helper = new ResponseHelper();        $this->helper = new ResponseHelper();
       $this->campaignId = env('CAMPAIGN_ID', true);        $this->campaignId = env('CAMPAIGN_ID', true);
   }    }
   
   public function sendMail(){    public function sendMail(){
   
       Log::channel('email')->info("Cron Strted-----------------");        Log::channel('email')->info("Cron Strted-----------------");
   
       $controller = new QuizController();        $controller = new QuizController();
       $userQuizDetails = DB::table('quiz_user')        $userQuizDetails = DB::table('quiz_user')
       ->select('created_at', 'recommended_at', 'mail_sent', 'session_id','id')        ->select('created_at', 'recommended_at', 'mail_sent', 'session_id','id')
       ->where([        ->where([
           ['mail_sent', '=', '0'],            ['mail_sent', '=', '0'],
           ['recommended_at', '=', NULL]            ['recommended_at', '=', NULL]
       ])->get();        ])->get();
   
       if(!empty($userQuizDetails))        if(!empty($userQuizDetails))
       {        {
           $updateIDs = array();            $updateIDs = array();
           foreach($userQuizDetails as $userQuiz){            foreach($userQuizDetails as $userQuiz){
   
               $email = DB::table('users')->select('user_email')->where([                $email = DB::table('users')->select('user_email')->where([
                   'id' => $userQuiz->id                    'id' => $userQuiz->id
               ])->value('user_email');                ])->value('user_email');
               // $email =  "testing@p80w.com";                // $email =  "testing@p80w.com";
                         
               $quizStartTime =  $userQuiz->created_at;                $quizStartTime =  $userQuiz->created_at;
               $recommendedAt =  $userQuiz->recommended_at;                            $recommendedAt =  $userQuiz->recommended_at;            
               $currentTime   =  date('Y-m-d H:i:s');                $currentTime   =  date('Y-m-d H:i:s');
               $sentMail      =  $userQuiz->mail_sent;                $sentMail      =  $userQuiz->mail_sent;
               $sessionID     =  $userQuiz->session_id;                $sessionID     =  $userQuiz->session_id;
                                 
               $timeDiff = $this->getTimeDiff($quizStartTime, $currentTime);                $timeDiff = $this->getTimeDiff($quizStartTime, $currentTime);
   
               // Send Mail if difference is 1 hour and mail is not sent earlier                // Send Mail if difference is 1 hour and mail is not sent earlier
               if($timeDiff >= 1 && $sentMail !== 1)                if($timeDiff >= 1 && $sentMail !== 1)
               {                {
                   $eventRequest = array(                    $eventRequest = array(
                       "email" => $email,                        "email" => $email,
                       "eventName" => "Quiz Abandonment"                         "eventName" => "Quiz Abandonment" 
                       // "campaignId" => $this->campaignId                                  // "campaignId" => $this->campaignId          
                   );                    );
                    // Trigger Event                     // Trigger Event
                   $eventResponse = $controller->createEvent(json_encode($eventRequest));                    $eventResponse = $controller->createEvent(json_encode($eventRequest));
   
                   if(isset($eventResponse->code) && $eventResponse->code == 'Success'){                    if(isset($eventResponse->code) && $eventResponse->code == 'Success'){
                       Log::channel('email')->info('Quiz Abandonment Event triggered successfully Please check mail : '.$email);                        Log::channel('email')->info('Quiz Abandonment Event triggered successfully Please check mail : '.$email);
                       $returnData = [                        $returnData = [
                           'stored' => true,                            'stored' => true,
                           'message' => 'success'                             'message' => 'success' 
                       ];                        ];
   
                       array_push($updateIDs, $sessionID); // To update the sent_email to 1                        array_push($updateIDs, $sessionID); // To update the sent_email to 1
                   }                    }
                   else{                    else{
                       Log::channel('email')->info('Event not triggered');                        Log::channel('email')->info('Event not triggered');
                       $returnData = [                        $returnData = [
                           'error' => 'Event not triggered'                             'error' => 'Event not triggered' 
                       ];                        ];
                   }                    }
   
               }                }
               else{                else{
                   Log::channel('email')->info('No need to send mail notification to the user '.$email.' with sessionID ='.$sessionID);                    Log::channel('email')->info('No need to send mail notification to the user '.$email.' with sessionID ='.$sessionID);
               }                }
                                 
           }            }
   
           $updateQuizUser = DB::table('quiz_user')            $updateQuizUser = DB::table('quiz_user')
               ->whereIn('session_id', $updateIDs)                ->whereIn('session_id', $updateIDs)
               ->update(['mail_sent' => 1]);                ->update(['mail_sent' => 1]);
                         
           echo"done";die;            echo"done";die;
       }        }
   
   
   }    }
   
   public function getTimeDiff($date1, $date2){    public function getTimeDiff($date1, $date2){
   
       $diff = abs(strtotime($date2) - strtotime($date1));          $diff = abs(strtotime($date2) - strtotime($date1));  
   
       $years = floor($diff / (365*60*60*24));        $years = floor($diff / (365*60*60*24));
   
       $months = floor(($diff - $years * 365*60*60*24)        $months = floor(($diff - $years * 365*60*60*24)
                                   / (30*60*60*24));                                      / (30*60*60*24));  
   
       $days = floor(($diff - $years * 365*60*60*24 -          $days = floor(($diff - $years * 365*60*60*24 -  
                   $months*30*60*60*24)/ (60*60*24));                    $months*30*60*60*24)/ (60*60*24));
   
       $hours = floor(($diff - $years * 365*60*60*24           $hours = floor(($diff - $years * 365*60*60*24   
       - $months*30*60*60*24 - $days*60*60*24) / (60*60));        - $months*30*60*60*24 - $days*60*60*24) / (60*60));
   
       return $hours;        return $hours;
   }    }
   
   public function sendProspectNotification(Request $request){    public function sendProspectNotification(Request $request){
   
       $controller = new QuizController();        $controller = new QuizController();
       $email = $request->input('email');        $email = $request->input('email');
   
       if(empty($email))        if(empty($email))
       {        {
           $returnData = [            $returnData = [
               'error' => 'Email is empty'                 'error' => 'Email is empty' 
           ];            ];
   
           return $this->helper->returnData(600, "error", $returnData );            return $this->helper->returnData(600, "error", $returnData );
       }        }
   
       $eventRequest = array(        $eventRequest = array(
           "email" => $email,            "email" => $email,
           "eventName" => "Prospect"             "eventName" => "Prospect" 
           // "campaignId" => $this->campaignId                      // "campaignId" => $this->campaignId          
       );        );
        // Trigger Event         // Trigger Event
       $eventResponse = $controller->createEvent(json_encode($eventRequest));        $eventResponse = $controller->createEvent(json_encode($eventRequest));
   
       if(isset($eventResponse->code) && $eventResponse->code == 'Success'){        if(isset($eventResponse->code) && $eventResponse->code == 'Success'){
.            Log::info('status => Event triggered successfully Please check mail : '.$email);            Log::channel('email')->info('status => Event triggered successfully Please check mail : '.$email);
           $returnData = [            $returnData = [
                           'stored' => true                                                        'stored' => true                            
                       ];                        ];
           return $this->helper->returnData(200, "success", $returnData );            return $this->helper->returnData(200, "success", $returnData );
       }        }
       else{        else{
.            Log::info('status =>Event not triggered');            Log::channel('email')->info('status =>Event not triggered');
   
           $returnData = [            $returnData = [
                           'error' => 'Event not triggered'                             'error' => 'Event not triggered' 
                       ];                        ];
           return $this->helper->returnData(600, "error", $returnData );            return $this->helper->returnData(600, "error", $returnData );
       }        }
   
   }      }  
   
} }