@ -3526,37 +3526,32 @@ EOT; 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    /**  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * Get student results (only in completed exercises) stats by question.  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     *  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * @param int    $question_id  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * @param int    $exercise_id  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * @param string $course_code  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * @param int    $session_id  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * @param bool   $onlyStudent Filter only enrolled students  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     *  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * @return array  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * @throws \Doctrine\DBAL\Exception  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public static function get_student_stats_by_question(  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $question_id,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $exercise_id,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $course_code,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $session_id,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $onlyStudent = false  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    ) {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $track_exercises = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $track_attempt = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public static function getStudentStatsByQuestion(  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        int $questionId,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        int $exerciseId,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        string $courseCode,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        int $sessionId,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        bool $onlyStudent = false  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    ): array  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $trackExercises = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $trackAttempt = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $courseUser = Database::get_main_table(TABLE_MAIN_COURSE_USER);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $question_id = (int) $question_i d;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $exercise_id = (int) $exercise_i d;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $course_code = Database::escape_string($course_c ode);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $session_id = (int) $session_i d;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $courseId = api_get_course_int_id($course_c ode);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $questionId = (int) $questionI d;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $exerciseId = (int) $exerciseI d;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $courseCode = Database::escape_string($courseC ode);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $sessionId = (int) $sessionI d;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $courseId = api_get_course_int_id($courseC ode);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $sql = "SELECT MAX(marks) as max, MIN(marks) as min, AVG(marks) as average  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                FROM $track_e xercises e ";  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $sessionCondition = api_get_session_condition($session_i d, true, false, 'e.session_id');  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if (true ==  $onlyStudent) {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                FROM $trackE xercises e ";  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $sessionCondition = api_get_session_condition($sessionI d, true, false, 'e.session_id');  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if ($onlyStudent) {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            $courseCondition = '';  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if (empty($session_i d)) {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if (empty($sessionI d)) {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                $courseCondition = "  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                INNER JOIN $courseUser c  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                ON (  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -3579,14 +3574,14 @@ EOT; 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            $sql .= $courseCondition;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $sql .= "  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    		INNER JOIN $track_a ttempt a  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    		INNER JOIN $trackA ttempt a  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    		ON (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    		    a.exe_id = e.exe_id  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    		WHERE  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    		    exe_exo_id 	= $exercise_i d AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                a .c_id = $courseId AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                question_id = $question_i d AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    		    exe_exo_id 	= $exerciseI d AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                e .c_id = $courseId AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                question_id = $questionI d AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                e.status = ''  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                $sessionCondition  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            LIMIT 1";  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -3739,35 +3734,28 @@ EOT; 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    /**  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * Get number of answers to hotspot questions.  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     *  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * @param int    $answer_id  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * @param int    $question_id  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * @param int    $exercise_id  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * @param string $courseId  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * @param int    $session_id  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     *  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * @return int  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public static function get_number_students_answer_hotspot_count(  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $answer_id,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $question_id,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $exercise_id,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $courseId,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $session_id  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    ) {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $track_exercises = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $track_hotspot = Database::get_main_table(TABLE_STATISTIC_TRACK_E_HOTSPOT);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public static function getNumberStudentsAnswerHotspotCount(  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        int    $answerId,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        int    $questionId,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        int    $exerciseId,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        string $courseCode,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        int $sessionId  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    ): int  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $trackExercises = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $trackHotspot = Database::get_main_table(TABLE_STATISTIC_TRACK_E_HOTSPOT);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $courseUser = Database::get_main_table(TABLE_MAIN_COURSE_USER);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $courseTable = Database::get_main_table(TABLE_MAIN_COURSE);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $courseUserSession = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $question_id = (int) $question_i d;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $answer_id = (int) $answer_i d;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $exercise_id = (int) $exercise_i d;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $courseId = (int) $courseId ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $session_id = (int) $session_i d;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $questionId = (int) $questionI d;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $answerId = (int) $answerI d;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $exerciseId = (int) $exerciseI d;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $courseId = api_get_course_int_id($courseCode) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $sessionId = (int) $sessionI d;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if (empty($session_i d)) {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if (empty($sessionI d)) {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            $courseCondition = "  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            INNER JOIN $courseUser cu  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            ON cu.c_id = c.id AND cu.user_id  = exe_user_id";  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -3779,25 +3767,24 @@ EOT; 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            $courseConditionWhere = ' AND cu.status = '.SessionEntity::STUDENT;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $sessionCondition = api_get_session_condition($session_i d, true, false, 'e.session_id');  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $sessionCondition = api_get_session_condition($sessionI d, true, false, 'e.session_id');  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $sql = "SELECT DISTINCT exe_user_id  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                FROM $track_e xercises e  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                INNER JOIN $track_h otspot a  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                FROM $trackE xercises e  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                INNER JOIN $trackH otspot a  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                ON (a.hotspot_exe_id = e.exe_id)  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                INNER JOIN $courseTable c  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                ON (a.c_id = c.id)  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                $courseCondition  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                WHERE  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    exe_exo_id              = $exercise_i d AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    exe_exo_id              = $exerciseI d AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    a.c_id 	= $courseId AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    hotspot_answer_id       = $answer_i d AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    hotspot_question_id     = $question_i d AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    hotspot_answer_id       = $answerI d AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    hotspot_question_id     = $questionI d AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    hotspot_correct         =  1 AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    e.status                = ''  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    $courseConditionWhere  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    $sessionCondition  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            ";  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $result = Database::query($sql);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $return = 0;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if ($result) {  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -3873,7 +3860,7 @@ EOT; 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    a.exe_id = e.exe_id  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                INNER JOIN $courseTable c  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                ON c.id = a .c_id  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                ON c.id = e .c_id  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                $courseCondition  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                WHERE  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    exe_exo_id = $exercise_id AND  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -3913,6 +3900,75 @@ EOT; 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return $return;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    /**  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * Get the number of times an answer was selected.  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public static function getCountOfAnswers(  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        int $answerId,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        int $questionId,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        int $exerciseId,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        string $courseCode,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        int $sessionId,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $questionType = null,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    ): int  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $trackExercises = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $trackAttempt = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $courseTable = Database::get_main_table(TABLE_MAIN_COURSE);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $courseUser = Database::get_main_table(TABLE_MAIN_COURSE_USER);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $courseUserSession = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $answerId = (int) $answerId;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $questionId = (int) $questionId;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $exerciseId = (int) $exerciseId;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $courseId = api_get_course_int_id($courseCode);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $sessionId = (int) $sessionId;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $return = 0;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $answerCondition = match ($questionType) {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            FILL_IN_BLANKS => '',  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            default => " answer = $answerId AND ",  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        };  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if (empty($sessionId)) {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            $courseCondition = "  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            INNER JOIN $courseUser cu  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            ON cu.c_id = c.id AND cu.user_id = exe_user_id";  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            $courseConditionWhere = " AND relation_type < > 2 AND cu.status = ".STUDENT;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        } else {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            $courseCondition = "  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            INNER JOIN $courseUserSession cu  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            ON (cu.c_id = a.c_id AND cu.user_id = e.exe_user_id AND e.session_id = cu.session_id)";  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            $courseConditionWhere = ' AND cu.status = '.SessionEntity::STUDENT;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $sessionCondition = api_get_session_condition($sessionId, true, false, 'e.session_id');  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $sql = "SELECT count(a.answer) as total  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                FROM $trackExercises e  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                INNER JOIN $trackAttempt a  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                ON (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    a.exe_id = e.exe_id  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                INNER JOIN $courseTable c  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                ON c.id = e.c_id  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                $courseCondition  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                WHERE  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    exe_exo_id = $exerciseId AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    e.c_id = $courseId AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    $answerCondition  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    question_id = $questionId AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    e.status = ''  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    $courseConditionWhere  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    $sessionCondition  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            ";  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $result = Database::query($sql);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if ($result) {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            $count = Database::fetch_array($result);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            $return = (int) $count['total'];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return $return;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    /**  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * @param array  $answer  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * @param string $user_answer  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -5444,7 +5500,7 @@ EOT; 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return $trackedExercise;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public static function getTotalQuestionAnswered($courseId, $exerciseId, $questionId)  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public static function getTotalQuestionAnswered($courseId, $exerciseId, $questionId, $onlyStudents = false ): int   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $courseId = (int) $courseId;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $exerciseId = (int) $exerciseId;  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -5452,16 +5508,27 @@ EOT; 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $attemptTable = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $trackTable = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $courseUser = Database::get_main_table(TABLE_MAIN_COURSE_USER);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $courseUserJoin = "";  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $studentsWhere = "";  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if ($onlyStudents) {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            $courseUserJoin = "  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            INNER JOIN $courseUser cu  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            ON cu.c_id = te.c_id AND cu.user_id = exe_user_id";  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            $studentsWhere = " AND relation_type < > 2 AND cu.status = ".STUDENT;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $sql = "SELECT count(te.exe_id) total  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $sql = "SELECT count(distinct ( te.exe_id) ) total  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            FROM $attemptTable t  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            INNER JOIN $trackTable te  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            ON (t.exe_id = te.exe_id)  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            $courseUserJoin  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            WHERE  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                te.c_id = $courseId AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                exe_exo_id = $exerciseId AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                t.question_id = $questionId AND  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                status != 'incomplete'  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                te.status != 'incomplete'  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                $studentsWhere  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        ";  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $queryTotal = Database::query($sql);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        $totalRow = Database::fetch_array($queryTotal, 'ASSOC');