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

@ -3795,6 +3795,7 @@ EOT;
* @param int $exercise_id
* @param string $course_code
* @param int $session_id
* @param bool $onlyStudent Filter only enrolled students
*
* @return array
*/
@ -3802,10 +3803,12 @@ EOT;
$question_id,
$exercise_id,
$course_code,
$session_id
$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);
$courseUser = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$question_id = (int) $question_id;
$exercise_id = (int) $exercise_id;
@ -3813,9 +3816,35 @@ EOT;
$session_id = (int) $session_id;
$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
FROM $track_exercises e
INNER JOIN $track_attempt a
";
if ($onlyStudent == true) {
$sql.= $courseCondition;
}
$sql.= "
INNER JOIN $track_attempt a
ON (
a.exe_id = e.exe_id AND
e.c_id = a.c_id AND
@ -3826,7 +3855,7 @@ EOT;
a.c_id = $courseId AND
e.session_id = $session_id AND
question_id = $question_id AND
status = ''
e.status = ''
LIMIT 1";
$result = Database::query($sql);
$return = [];

Loading…
Cancel
Save