Skip to content

Commit d3da7ce

Browse files
authored
Merge pull request #3445 from carlangas159/3428
Exercise: Exercise result per question, incoherent data.
2 parents a334228 + 39495c8 commit d3da7ce

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

main/exercise/stats.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@
6868
$question_id,
6969
$exerciseId,
7070
$courseCode,
71-
$sessionId
71+
$sessionId,
72+
true
7273
);
7374

7475
$count_users = ExerciseLib::get_number_students_question_with_answer_count(
@@ -137,7 +138,8 @@
137138
$question_id,
138139
$exerciseId,
139140
$courseCode,
140-
$sessionId
141+
$sessionId,
142+
true
141143
);
142144

143145
$answer = new Answer($question_id);

main/inc/lib/exercise.lib.php

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3795,27 +3795,56 @@ public static function get_exercises_to_be_taken($course_code, $session_id)
37953795
* @param int $exercise_id
37963796
* @param string $course_code
37973797
* @param int $session_id
3798+
* @param bool $onlyStudent Filter only enrolled students
37983799
*
37993800
* @return array
38003801
*/
38013802
public static function get_student_stats_by_question(
38023803
$question_id,
38033804
$exercise_id,
38043805
$course_code,
3805-
$session_id
3806+
$session_id,
3807+
$onlyStudent = false
38063808
) {
38073809
$track_exercises = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES);
38083810
$track_attempt = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
3811+
$courseUser = Database::get_main_table(TABLE_MAIN_COURSE_USER);
38093812

38103813
$question_id = (int) $question_id;
38113814
$exercise_id = (int) $exercise_id;
38123815
$course_code = Database::escape_string($course_code);
38133816
$session_id = (int) $session_id;
38143817
$courseId = api_get_course_int_id($course_code);
38153818

3819+
if (empty($session_id)) {
3820+
$courseCondition = "
3821+
INNER JOIN $courseUser c
3822+
ON (
3823+
e.exe_user_id = c.user_id AND
3824+
e.c_id = c.c_id AND
3825+
c.status = ".STUDENT."
3826+
AND relation_type <> 2
3827+
)
3828+
";
3829+
} else {
3830+
$courseCondition = "
3831+
INNER JOIN $courseUser c
3832+
ON (
3833+
e.exe_user_id = c.user_id AND
3834+
e.c_id = c.c_id AND
3835+
c.status = 0
3836+
)
3837+
";
3838+
}
3839+
38163840
$sql = "SELECT MAX(marks) as max, MIN(marks) as min, AVG(marks) as average
38173841
FROM $track_exercises e
3818-
INNER JOIN $track_attempt a
3842+
";
3843+
if ($onlyStudent == true) {
3844+
$sql .= $courseCondition;
3845+
}
3846+
$sql .= "
3847+
INNER JOIN $track_attempt a
38193848
ON (
38203849
a.exe_id = e.exe_id AND
38213850
e.c_id = a.c_id AND
@@ -3826,7 +3855,7 @@ public static function get_student_stats_by_question(
38263855
a.c_id = $courseId AND
38273856
e.session_id = $session_id AND
38283857
question_id = $question_id AND
3829-
status = ''
3858+
e.status = ''
38303859
LIMIT 1";
38313860
$result = Database::query($sql);
38323861
$return = [];

0 commit comments

Comments
 (0)