QuizController.php (Before) QuizController.php (After)
<?php <?php
   
namespace App\Http\Controllers; namespace App\Http\Controllers;
   
use Illuminate\Http\Request; use Illuminate\Http\Request;
use DB; use DB;
use OhMyBrew\ShopifyApp\Facades\ShopifyApp; use OhMyBrew\ShopifyApp\Facades\ShopifyApp;
use Config; use Config;
use App\Model\QuizModel; use App\Model\QuizModel;
   
class QuizController extends Controller class QuizController extends Controller
{ {
   private $domain;    private $domain;
   private $shop;    private $shop;
   private $quizModel;    private $quizModel;
   
    /**     /**
    * Create a new controller instance.     * Create a new controller instance.
    *     *
    * @return void     * @return void
    */      */ 
   public function __construct()    public function __construct()
   {    {
       date_default_timezone_set('America/Los_Angeles');        date_default_timezone_set('America/Los_Angeles');
       $this->domain = env('SHOP_DOMAIN', true);        $this->domain = env('SHOP_DOMAIN', true);
       $this->shop = ShopifyApp::shop($this->domain);        $this->shop = ShopifyApp::shop($this->domain);
       $this->quizModel = new QuizModel();        $this->quizModel = new QuizModel();
   }    }
   public function getQuizDetails()    public function getQuizDetails()
   {    {
       $customerID = isset($_REQUEST['id']) ? $_REQUEST['id'] : '';        $customerID = isset($_REQUEST['id']) ? $_REQUEST['id'] : '';
       $params = [];        $params = [];
   
       $customerDetails = $this->shop->api()->rest('GET', '/admin/customers/'.$customerID.'.json', $params);        $customerDetails = $this->shop->api()->rest('GET', '/admin/customers/'.$customerID.'.json', $params);
       $customerDetails = $customerDetails->body;        $customerDetails = $customerDetails->body;
       $email = isset($customerDetails->customer->email) ? $customerDetails->customer->email : '';        $email = isset($customerDetails->customer->email) ? $customerDetails->customer->email : '';
       $firstName = isset($customerDetails->customer->first_name) ? $customerDetails->customer->first_name : '';        $firstName = isset($customerDetails->customer->first_name) ? $customerDetails->customer->first_name : '';
       $lastName = isset($customerDetails->customer->last_name) ? $customerDetails->customer->last_name : '';        $lastName = isset($customerDetails->customer->last_name) ? $customerDetails->customer->last_name : '';
       $customerName = $firstName." ".$lastName;        $customerName = $firstName." ".$lastName;
   
       $sessionIDs = $this->quizModel->getSessionID($email);        $sessionIDs = $this->quizModel->getSessionID($email);
   
       $sessionIDs = $this->formatSessionID($sessionIDs);        $sessionIDs = $this->formatSessionID($sessionIDs);
   
       if (!empty($sessionIDs)) {        if (!empty($sessionIDs)) {
           $quizDetails = $this->quizModel->getQuizDetails($sessionIDs);            $quizDetails = $this->quizModel->getQuizDetails($sessionIDs);
           //echo"<pre>"; print_r($quizDetails);die('test');    
       }        }
          
       return view('customerQuiz',        return view('customerQuiz',
           [            [
               "customerName" => $customerName,                "customerName" => $customerName,
               "email" => $email,                "email" => $email,
               "quizCount" => isset($quizDetails) ? count($quizDetails) : 0,                "quizCount" => isset($quizDetails) ? count($quizDetails) : 0,
               "quizDetails" => isset($quizDetails) ? $quizDetails : '',                "quizDetails" => isset($quizDetails) ? $quizDetails : '',
           ]            ]
       );        );
   }    }
   
   public function formatData($quizDetails)    public function formatData($quizDetails)
   {    {
       $quizArray = [];        $quizArray = [];
       if (!empty($quizDetails)) {        if (!empty($quizDetails)) {
           foreach ($quizDetails as $quziData) {            foreach ($quizDetails as $quziData) {
               if (!isset($quizArray[$quziData->question])) {                if (!isset($quizArray[$quziData->question])) {
                   $quizArray[$quziData->question] = $quziData->response;                    $quizArray[$quziData->question] = $quziData->response;
               }                }
               else {                else {
                   $data = $quizArray[$quziData->question] . " | " . $quziData->response;                    $data = $quizArray[$quziData->question] . " | " . $quziData->response;
                   $quizArray[$quziData->question] = $data;                    $quizArray[$quziData->question] = $data;
               }                }
           }            }
       }        }
       return $quizArray;        return $quizArray;
   }    }
   
   public function formatSessionID($sessionIDs)    public function formatSessionID($sessionIDs)
   {    {
   
       $sessionID = '';        $sessionID = '';
       if (!empty($sessionIDs)) {        if (!empty($sessionIDs)) {
           foreach ($sessionIDs as $value) {            foreach ($sessionIDs as $value) {
               $sessionID .= $value->session_id . ",";                $sessionID .= $value->session_id . ",";
           }            }
       }        }
   
       return rtrim($sessionID, ",");        return rtrim($sessionID, ",");
   }    }
   
   public function getQuizDetailById()    public function getQuizDetailById()
   {    {
   
       $sessionID = isset($_REQUEST['sessionId']) ? $_REQUEST['sessionId'] : '';        $sessionID = isset($_REQUEST['sessionId']) ? $_REQUEST['sessionId'] : '';
       $email = isset($_REQUEST['email']) ? $_REQUEST['email'] : '';        $email = isset($_REQUEST['email']) ? trim($_REQUEST['email']) : '';
   
       if (empty($sessionID)) {        if (empty($sessionID)) {
           // $email = 'testing+TestUser@p80w.com';            // $email = 'testing+TestUser@p80w.com';
           $sessionID = $this->quizModel->getSessionIds($email);  // TODO            $sessionID = $this->quizModel->getSessionIds($email);  // TODO
       }        }
               
       $quizDetails = $this->quizModel->getQuizDetails($sessionID);        $quizDetails = $this->quizModel->getQuizDetails($sessionID);
         
       $recommendations = $this->quizModel->getRecommendation($sessionID);        $recommendations = $this->quizModel->getRecommendation($sessionID);
   
       return view('quizDetails',        return view('quizDetails',
           [            [
               "quizDetails" => $quizDetails[$sessionID],                "quizDetails" => $quizDetails[$sessionID],
               "sessionId" => $sessionID,                "sessionId" => $sessionID,
               "recommendation" => !empty($recommendations) ? json_decode($recommendations) : '',                "recommendation" => !empty($recommendations) ? json_decode($recommendations) : '',
               "quizCompletionTime" => $this->getQuizCompletionTime($quizDetails[$sessionID]),                "quizCompletionTime" => $this->getQuizCompletionTime($quizDetails[$sessionID]),
               "email" => $email                "email" => $email
           ]            ]
       );        );
   
   }    }
   
   public function getCustomerDetails()    public function getCustomerDetails()
   {    {
       $email = isset($_REQUEST['email']) ? $_REQUEST['email'] : '';        $email = isset($_REQUEST['email']) ? $_REQUEST['email'] : '';
       $customerName = isset($_REQUEST['name']) ? $_REQUEST['name'] : '';        $customerName = isset($_REQUEST['name']) ? $_REQUEST['name'] : '';
       $sessionID = $this->quizModel->getSessionIds($email);  // TODO        $sessionID = $this->quizModel->getSessionIds($email);  // TODO
                 
       if (!empty($sessionID)) {        if (!empty($sessionID)) {
           $quizDetails = $this->quizModel->getQuizDetails($sessionID);            $quizDetails = $this->quizModel->getQuizDetails($sessionID);
       }        }
   
       return view('customerQuiz',        return view('customerQuiz',
           [            [
                               
               "customerName" => $customerName,                "customerName" => $customerName,
               "email" => $email,                "email" => $email,
               "quizCount" => isset($quizDetails) ? count($quizDetails) : 0,                "quizCount" => isset($quizDetails) ? count($quizDetails) : 0,
               "quizDetails" => isset($quizDetails) ? $quizDetails : '',                "quizDetails" => isset($quizDetails) ? $quizDetails : '',
           ]            ]
       );        );
   
   }    }
   
   public function quizList()    public function quizList()
   {    {
   
       $limit = 20;        $limit = 20;
       $previousLink = '';        $previousLink = '';
       $nextLink = '';        $nextLink = '';
       $getPageLink = '';        $getPageLink = '';
   
       if (!isset($_GET['page'])) {        if (!isset($_GET['page'])) {
           $data = $this->shop->api()->rest('GET', '/admin/api/2020-04/customers.json', ["fields" => "email,first_name, last_name", "limit" => $limit]);            $data = $this->shop->api()->rest('GET', '/admin/api/2020-04/customers.json', ["fields" => "email,first_name, last_name", "limit" => $limit]);
           $previousLink = !empty($data->link->previous)? $previousLink = $data->link->previous:'';            $previousLink = !empty($data->link->previous)? $previousLink = $data->link->previous:'';
           $nextLink = !empty($data->link->next)? $nextLink = $data->link->next:'';            $nextLink = !empty($data->link->next)? $nextLink = $data->link->next:'';
       } else {        } else {
           $getPageLink = trim($_GET['page']);            $getPageLink = trim($_GET['page']);
           $data = $this->shop->api()->rest('GET', '/admin/api/2020-04/customers.json', ["limit" => $limit,            $data = $this->shop->api()->rest('GET', '/admin/api/2020-04/customers.json', ["limit" => $limit,
           'page_info' => $getPageLink]);            'page_info' => $getPageLink]);
   
           $previousLink = !empty($data->link->previous)? $previousLink = $data->link->previous:'';            $previousLink = !empty($data->link->previous)? $previousLink = $data->link->previous:'';
           $nextLink = !empty($data->link->next)? $nextLink = $data->link->next:'';            $nextLink = !empty($data->link->next)? $nextLink = $data->link->next:'';
       }        }
   
       $customerData = [];        $customerData = [];
       $customerEmail = [];        $customerEmail = [];
       foreach ($data->body->customers as $customer) {        foreach ($data->body->customers as $customer) {
           $email = $customer->email;            $email = $customer->email;
           $name = $customer->first_name." ".$customer->last_name;            $name = $customer->first_name." ".$customer->last_name;
           $temp = array("email" => $email, "name" => $name);            $temp = array("email" => $email, "name" => $name);
           $customerData[] = $temp;            $customerData[] = $temp;
           $customerEmail[] = $email;            $customerEmail[] = $email;
       }        }
   
       $emails = '"' . implode('","', $customerEmail) . '"';        $emails = '"' . implode('","', $customerEmail) . '"';
   
           
       $quizDetails = $this->quizModel->getQuizDetailsByEmail($emails);        $quizDetails = $this->quizModel->getQuizDetailsByEmail($emails);
         $percentDetails = $this->getPercentDetails($quizDetails);  
          
       return view('welcome', [        return view('welcome', [
           "customers" => $customerData,            "customers" => $customerData,
           "quizDetails" => $quizDetails,            "quizDetails" => $quizDetails,
           "previousLink" => $previousLink,            "previousLink" => $previousLink,
           "nextLink" => $nextLink             "nextLink" => $nextLink, 
             "percentDetails" => $percentDetails  
       ]);        ]);
   }    }
   
   public function getQuizCompletionTime($quizDetails)    public function getQuizCompletionTime($quizDetails)
   {    {
       if (!empty($quizDetails)) {        if (!empty($quizDetails)) {
           $startTime = new \DateTime($quizDetails[0]->completion_time);            $startTime = new \DateTime($quizDetails[0]->completion_time);
           $endTime = new \DateTime(end($quizDetails)->completion_time);            $endTime = new \DateTime(end($quizDetails)->completion_time);
                                 
           $completionTime = $startTime->diff($endTime);            $completionTime = $startTime->diff($endTime);
           return array("min" => $completionTime->i, "sec" => $completionTime->s);            return array("min" => $completionTime->i, "sec" => $completionTime->s);
       }        }
       return null;        return null;
     }  
   
     public function getPercentDetails($quizDetails)  
     {  
         $percentDetails = array();  
         if (!empty($quizDetails)) {  
             foreach ($quizDetails as $email => $details) {  
   
                 $latestSessionID = end($details)['session_id'];  
                 $quizData = $this->quizModel->getQuizDetails($latestSessionID);  
                 $quizData = array_values($quizData);  
  \                if ($quizData[0][0]->isrecommendation == 'Yes') {  
                     $percentDetails[$email] = '100';  
                     // break;  
                 } else {  
                     $count = count($quizData[0]);  
                     $percentDetails[$email] = ($count/50) * 100;  
                     // break;  
                 }  
             }  
         }  
         return $percentDetails;  
   }    }
} }