Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 138
EndSemesterExamOnlineService
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 3
272.00
0.00% covered (danger)
0.00%
0 / 138
 __construct
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 2
 getStudentExamRegistrations
0.00% covered (danger)
0.00%
0 / 1
182.00
0.00% covered (danger)
0.00%
0 / 95
 setRedirectStudentToOnlineExamDetails
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 41
<?php
namespace com\linways\ec\core\service;
use com\linways\base\util\MakeSingletonTrait;
use com\linways\ec\core\exception\ExamControllerException;
use com\linways\core\ams\professional\service\CommonService;
use com\linways\ec\core\service\CommonExamService;
use com\linways\ec\core\mapper\EndSemesterExamOnlineServiceMapper;
class EndSemesterExamOnlineService extends BaseService
{
    use MakeSingletonTrait;
    private function __construct() {
        $this->mapper = EndSemesterExamOnlineServiceMapper::getInstance()->getMapper();
    }
     
    /**
     * get Student Exam Registrations
     * @param  $searchRequest
     * @throws ExamControllerException
     */
    public function getStudentExamRegistrations($searchRequest){
        $searchRequest = $this->realEscapeObject($searchRequest);
        try{
            $orderBy = " ORDER BY eer.name, vas.code ";
            $whereQuery = "";
            
            if(!empty($searchRequest->studentId)) {
                $whereQuery .= " AND s.studentID = '".$searchRequest->studentId."'";
            } else if($GLOBALS['userType'] == 'STUDENT') {
                $whereQuery .= " AND s.studentID = '".$GLOBALS['userId']."'";
            }
            if(!empty($searchRequest->examRegistrationId)) {
                $examRegistrationIdString = is_array($searchRequest->examRegistrationId) ? "'" . implode("','",$searchRequest->examRegistrationId) . "'" : "'".$searchRequest->examRegistrationId."'";
                $whereQuery .= " AND eer.id IN ( $examRegistrationIdString )";
            }
            if(!empty($searchRequest->examRegistrationType)) {
                $examRegistrationTypeString = is_array($searchRequest->examRegistrationType) ? "'" . implode("','",$searchRequest->examRegistrationType) . "'" : "'".$searchRequest->examRegistrationType."'";
                $whereQuery .= " AND eer.type IN ( $examRegistrationTypeString )";
            } else {
                $whereQuery .= " AND eer.type IN ('REGULAR','SUPPLEMENTARY')";
            }
            
            $query = "  SELECT
                            eer.id AS examRegistrationId,
                            eer.name AS examRegistrationName,
                            eer.type AS examRegistrationType,
                            eerb.properties->>'$.academicTermId' AS academicTermId,
                            vas.id AS subjectId,
                            vas.code AS subjectCode,
                            vas.name AS subjectName,
                            s.studentName,
                            spa.properties->>'$.rollNumber' AS rollNo,
                            spa.properties->>'$.registerNumber' AS regNo,
                            oe.assessment_id AS assessmentId,
                            oe.properties AS examProperties
                        FROM
                            ec_exam_registration eer
                        INNER JOIN ec_exam_registration_batch eerb On
                            eerb.ec_exam_registration_id = eer.id
                        INNER JOIN ec_exam_registration_subject eers On
                            eers.ec_exam_registration_batch_id = eerb.id
                        INNER JOIN ec_student_assessment_registration esar On
                            esar.am_assessment_id = eers.am_assessment_id
                        INNER JOIN cm_academic_paper_subjects caps On
                            caps.id = eers.cm_academic_paper_subjects_id
                        INNER JOIN v4_ams_subject vas On
                            vas.id = caps.ams_subject_id
                        INNER JOIN studentaccount s ON
                            s.studentID = esar.student_id
                        INNER JOIN student_program_account spa ON
                            spa.student_id = s.studentID
                        INNER JOIN oe_exams oe ON
                            oe.assessment_id = eers.am_assessment_id
                            AND oe.is_deleted = 0
                        WHERE
                            spa.academic_status IN ('ACTIVE','COMPLETED')
                            AND eer.trashed IS NULL
                            AND eer.properties->>'$.publish' = '1'
                            AND (eer.properties ->> '$.isSpecialExam' != '1' OR eer.properties ->> '$.isSpecialExam' IS NULL )
                            AND esar.properties->>'$.registrationStatus' = 'REGISTERED'
                            AND oe.type = 'EXAM_CONTROLLER'
                            AND oe.identifying_context->>'$.type' = 'ONLINE_EXAM'
                        ";
            $studentExamRegistrations =  $this->executeQueryForList($query.$whereQuery.$orderBy, $this->mapper[EndSemesterExamOnlineServiceMapper::GET_STUDENT_EXAM_REGISTRATIONS]);
            $currentTime = time();
            foreach ($studentExamRegistrations as $examRegistration) {
                $examRegistration->isExpand = false;
                foreach ($examRegistration->subjects as $subject) {
                    $examProperties = $subject->examProperties;
                    $examStartTime = strtotime($examProperties->startTime);
                    $examEndTime = strtotime($examProperties->endTime);
                    if ($currentTime < $examStartTime) {
                        $subject->examStatus = 'UPCOMING';
                        unset($subject->examProperties);
                        unset($subject->assessmentId);
                    } else if ($currentTime >= $examStartTime && $currentTime < $examEndTime) {
                        $subject->examStatus = 'ONGOING';
                    } else {
                        $subject->examStatus = 'FINISHED';
                        unset($subject->examProperties);
                        unset($subject->assessmentId);
                    }
                    $subject->examDate = date("d-m-Y", $examStartTime);
                    $subject->examStartTime = date("h:i A", $examStartTime);
                    $subject->examEndTime = date("h:i A", $examEndTime);
                    
                    unset($examProperties);
                    unset($examStartTime);
                    unset($examEndTime);
                }
            }
        } catch(\Exception $e) {
            throw new ExamControllerException($e->getCode(),$e->getMessage());
        }
        $result = new \stdClass();
        $result->examRegCount = count($studentExamRegistrations);
        $result->examRegistrations = $studentExamRegistrations;
        return $result;
    }
    /**
     * set Redirect Student To Online Exam Details
     * @param  $searchRequest
     * @throws ExamControllerException
     */
    public function setRedirectStudentToOnlineExamDetails($searchRequest){
        $searchRequest = $this->realEscapeObject($searchRequest);
        try{
            $_SESSION['oe_userId'] = $GLOBALS['userId'];
            $_SESSION['oe_userName'] = 'Student Name';
            $_SESSION['EXAM_CONTROLLER_USER_TYPE'] = $GLOBALS['userType'];
            $_SESSION['oe_userType'] = $GLOBALS['userType'];
            $s3Folder = CommonService::getInstance()->getSettings("ONLINE_EXAM", "ATTACHMENT_FOLDER");
            $s3BucketName = getenv('S3_BUCKET_NAME');
            $awsAccessKey = getenv('AWS_ACCESS_KEY');
            $s3MaxFileSize = getenv('S3_MAX_FILE_SIZE');
            $signRequestEndpoint = "https://" . $_SERVER['SERVER_NAME'] . "/libcommon/s3/endpoint-cors.php";
            $collegeCode = $GLOBALS['COLLEGE_CODE'];
            $context = [
                's3' => [
                    'bucketName' => $s3BucketName,
                    'awsAccessKey' => $awsAccessKey, 
                    'maxFileSize' => $s3MaxFileSize,
                    'folder' => $s3Folder,
                    'signRequestEndpoint' => $signRequestEndpoint
                ],
                'collegeCode' => $collegeCode
            ];
            $identifyingContext = new \stdClass();
            $identifyingContext->userId = $_SESSION['oe_userId'];
            $identifyingContext->assessmentId = $searchRequest->assessmentId;
            $oeData = new \stdClass();
            $oeData->context = $context;
            $oeData->identifyingContext = $identifyingContext;
            $oeData->type = 'EXAM_CONTROLLER';
            $oeData->userType = 'STUDENT';
            $oeData->userName = $_SESSION['oe_userName'];
            $oeData->backLink = "";
            
            $result = new \stdClass();
            $result->context = $context;
            $result->identifyingContext = $identifyingContext;
            $result->oeData = $oeData;
    
            return $result;
        } catch(\Exception $e) {
            throw new ExamControllerException($e->getCode(),$e->getMessage());
        }
    }
}