Exercise: Exercise result per question, incoherent data. Missing filter

on ExerciseLib::get_student_stats_by_question
 - refs
#3428
pull/3445/head
carlos alvarado 5 years ago
parent 4bd6911c88
commit ff50a99627
  1. 6
      main/exercise/stats.php
  2. 35
      main/inc/lib/exercise.lib.php

@ -68,7 +68,8 @@ if (!empty($question_list)) {
$question_id, $question_id,
$exerciseId, $exerciseId,
$courseCode, $courseCode,
$sessionId $sessionId,
true
); );
$count_users = ExerciseLib::get_number_students_question_with_answer_count( $count_users = ExerciseLib::get_number_students_question_with_answer_count(
@ -137,7 +138,8 @@ if (!empty($question_list)) {
$question_id, $question_id,
$exerciseId, $exerciseId,
$courseCode, $courseCode,
$sessionId $sessionId,
true
); );
$answer = new Answer($question_id); $answer = new Answer($question_id);

@ -3795,6 +3795,7 @@ EOT;
* @param int $exercise_id * @param int $exercise_id
* @param string $course_code * @param string $course_code
* @param int $session_id * @param int $session_id
* @param bool $onlyStudent Filter only enrolled students
* *
* @return array * @return array
*/ */
@ -3802,10 +3803,12 @@ EOT;
$question_id, $question_id,
$exercise_id, $exercise_id,
$course_code, $course_code,
$session_id $session_id,
$onlyStudent = false
) { ) {
$track_exercises = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES); $track_exercises = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES);
$track_attempt = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); $track_attempt = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
$courseUser = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$question_id = (int) $question_id; $question_id = (int) $question_id;
$exercise_id = (int) $exercise_id; $exercise_id = (int) $exercise_id;
@ -3813,9 +3816,35 @@ EOT;
$session_id = (int) $session_id; $session_id = (int) $session_id;
$courseId = api_get_course_int_id($course_code); $courseId = api_get_course_int_id($course_code);
if (empty($session_id)) {
$courseCondition = "
INNER JOIN $courseUser c
ON (
e.exe_user_id = c.user_id AND
e.c_id = c.c_id AND
c.status = ".STUDENT."
AND relation_type <> 2
)
";
} else {
$courseCondition = "
INNER JOIN $courseUser c
ON (
e.exe_user_id = c.user_id AND
e.c_id = c.c_id AND
c.status = 0
)
";
}
$sql = "SELECT MAX(marks) as max, MIN(marks) as min, AVG(marks) as average $sql = "SELECT MAX(marks) as max, MIN(marks) as min, AVG(marks) as average
FROM $track_exercises e FROM $track_exercises e
INNER JOIN $track_attempt a ";
if ($onlyStudent == true) {
$sql.= $courseCondition;
}
$sql.= "
INNER JOIN $track_attempt a
ON ( ON (
a.exe_id = e.exe_id AND a.exe_id = e.exe_id AND
e.c_id = a.c_id AND e.c_id = a.c_id AND
@ -3826,7 +3855,7 @@ EOT;
a.c_id = $courseId AND a.c_id = $courseId AND
e.session_id = $session_id AND e.session_id = $session_id AND
question_id = $question_id AND question_id = $question_id AND
status = '' e.status = ''
LIMIT 1"; LIMIT 1";
$result = Database::query($sql); $result = Database::query($sql);
$return = []; $return = [];

Loading…
Cancel
Save