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 / 8
CRAP
0.00% covered (danger)
0.00%
0 / 102
RubricService
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 8
240.00
0.00% covered (danger)
0.00%
0 / 101
 __construct
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 3
 __clone
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 1
 getInstance
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 5
 getRubricDetailsByQuestionId
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 27
 insertRubricDetailsOfQuestion
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 22
 deleteQuestionRubric
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 20
 insertRubricWiseStudentQuestionMark
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 12
 deleteQuestionWiseStudentRubricMark
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 11
<?php
namespace com\linways\core\ams\professional\service;
use com\linways\core\ams\professional\dto\nba\RubricWiseAssessmentCriteriaDetails;
use com\linways\core\ams\professional\dto\nba\RubricWiseAssessment;
use com\linways\core\ams\professional\dto\nba\HolisticRubricCriteria;
use com\linways\core\ams\professional\mapper\nba\RubricsServiceMapper;
use com\linways\core\ams\professional\exception\ProfessionalException;
use function GuzzleHttp\json_decode;
class  RubricService extends BaseService
{
    // /Condition 1 - Presence of a static member variable
    private static $_instance = null;
    
    private $mapper = [];
    // /Condition 2 - Locked down the constructor
    private function __construct()
    {
        $this->mapper = RubricsServiceMapper::getInstance()->getMapper();
    }
    // Prevent any oustide instantiation of this class
    
    // /Condition 3 - Prevent any object or instance of that class to be cloned
    private function __clone()
    {}
    // Prevent any copy of this object
    
    // /Condition 4 - Have a single globally accessible static method
    public static function getInstance()
    {
        if (! is_object(self::$_instance)) // or if( is_null(self::$_instance) ) or if( self::$_instance == null )
            self::$_instance = new self();
            
            return self::$_instance;
    }
    /**
     * Get rubric details of a question by questionId 
     * @param int $assessmentQuestionId
     */
    
    public function getRubricDetailsByQuestionId($assessmentQuestionId)
    {
        $assessmentQuestionId = $this->realEscapeString($assessmentQuestionId);
        $sqlGetRubricDetails = 
            "SELECT 
                rwa.id question_rubric_id,
                rwa.assessment_question_id,
                rwa.is_percentage,
                rwa.batch_id,
                rwa.sem_id,
                rwa.subject_id,
                rwa.staff_id,
                rwacd.id rubric_criteria_id,
                rwacd.rubric_wise_assessment_id,
                rwacd.criteria,
                rwacd.value_and_justification
                
            FROM
                rubric_wise_assessment rwa
                    INNER JOIN
                rubric_wise_assessment_criteria_details rwacd ON (rwacd.rubric_wise_assessment_id = rwa.id)
            WHERE
                rwa.assessment_question_id = '$assessmentQuestionId'";
        
        try {
            
            return $this->executeQueryForList($sqlGetRubricDetails,$this->mapper[RubricsServiceMapper::GET_RUBRIC_DETAILS_BY_QUESTION_ID])[0];
            
        } catch (\Exception $e) {
            
            throw new ProfessionalException($e->getCode,$e->getMessage());
        }
        
    }
    /**
     * insert rubric details of a question  
     * @param int $assessmentQuestionId
     */
    
    public function insertRubricDetailsOfQuestion($assessmentQuestionRubricDetails)
    {
        $assessmentQuestionRubricDetails = $this->realEscapeObject($assessmentQuestionRubricDetails);
        $sqlInsertRubricQuestionDetails = "INSERT INTO 
            rubric_wise_assessment (assessment_question_id, is_percentage, batch_id, sem_id, subject_id, staff_id) 
        VALUES 
            ('$assessmentQuestionRubricDetails->assessmentQuestionId', '0', '$assessmentQuestionRubricDetails->batchId', '$assessmentQuestionRubricDetails->semId', '$assessmentQuestionRubricDetails->subjectId', '$assessmentQuestionRubricDetails->staffId')";
            
        try {
            $questionRubricId = $this->executeQueryForObject($sqlInsertRubricQuestionDetails, true);
            $sqlInsertRubricDetails="INSERT INTO 
                rubric_wise_assessment_criteria_details (rubric_wise_assessment_id, criteria, value_and_justification) 
            VALUES ";
                 $insertValues = [];
                 foreach ($assessmentQuestionRubricDetails->rubricWiseAssessmentCriteriaDetails as $rubricCriteria ) {
                     $valueAndJustification=json_encode($rubricCriteria->valueAndJustification);
                     $insertValues[] = " ('$questionRubricId', '$rubricCriteria->criteria', '$valueAndJustification')";
                 }
         
                 $sqlInsertRubricDetails .= implode(',', $insertValues);
                 return $this->executeQuery($sqlInsertRubricDetails);
            
        } catch (\Exception $e) {
            
            throw new ProfessionalException($e->getCode,$e->getMessage());
        }
        
    }
    public function deleteQuestionRubric($assessmentQuestionId)
    {
        $assessmentQuestionId = $this->realEscapeString($assessmentQuestionId);
        $sqlDeleteQuestionRubricDetails = "DELETE FROM rubric_wise_assessment_criteria_details 
                                            WHERE
                                                rubric_wise_assessment_id = (SELECT 
                                                    id
                                                FROM
                                                    rubric_wise_assessment
                                                
                                                WHERE
                                                    assessment_question_id = '$assessmentQuestionId')";
            
        try {
            $this->executeQuery($sqlDeleteQuestionRubricDetails);
            $sqlDeleteQuestionRubric="DELETE FROM rubric_wise_assessment 
                                        WHERE
                                            assessment_question_id = '$assessmentQuestionId'";
            return $this->executeQuery($sqlDeleteQuestionRubric);
        } catch (\Exception $e) {
            throw new ProfessionalException($e->getCode,$e->getMessage());
        }
        
    }
    public function insertRubricWiseStudentQuestionMark($assessmentQuestionRubricStudentMarkDetails)
    {
        $assessmentQuestionRubricStudentMarkDetails = $this->realEscapeObject($assessmentQuestionRubricStudentMarkDetails);
        $sqlInsertRubricQuestionStudentMarkDetails = "INSERT INTO 
            rubric_wise_assessment_student_mark (rubric_wise_assessment_id, rubric_wise_assessment_criteria_and_details_id, student_id, mark_obtained, staff_id) 
        VALUES 
            ('$assessmentQuestionRubricStudentMarkDetails->rubricWiseAssessmentId', '$assessmentQuestionRubricStudentMarkDetails->rubricWiseAssessmentCriteriaAndDetailsId', '$assessmentQuestionRubricStudentMarkDetails->studentId', '$assessmentQuestionRubricStudentMarkDetails->markObtained', '$assessmentQuestionRubricStudentMarkDetails->staffId') ON DUPLICATE KEY UPDATE mark_obtained = VALUES(mark_obtained),staff_id = VALUES(staff_id)";
            
        try {
            $questionRubricId = $this->executeQueryForObject($sqlInsertRubricQuestionStudentMarkDetails, true);
            
            
        } catch (\Exception $e) {
            
            throw new ProfessionalException($e->getCode,$e->getMessage());
        }
        
    }
    public function deleteQuestionWiseStudentRubricMark($assessmentQuestionRubricStudentMarkDetails)
    {
        $assessmentQuestionRubricStudentMarkDetails = $this->realEscapeObject($assessmentQuestionRubricStudentMarkDetails);
        
        $sqlDeleteQuestionRubricDetails = "DELETE FROM rubric_wise_assessment_student_mark 
                                            WHERE
                                                rubric_wise_assessment_id = '$assessmentQuestionRubricStudentMarkDetails->rubricWiseAssessmentId' AND student_id = $assessmentQuestionRubricStudentMarkDetails->studentId";
            
        try {
            return $this->executeQuery($sqlDeleteQuestionRubricDetails);
            
        } catch (\Exception $e) {
            throw new ProfessionalException($e->getCode,$e->getMessage());
        }
        
    }
    
   
}