diff --git a/main/exercice/exercise.lib.php b/main/exercice/exercise.lib.php index e60ca7f054..62364fab4f 100644 --- a/main/exercice/exercise.lib.php +++ b/main/exercice/exercise.lib.php @@ -1621,23 +1621,28 @@ function get_student_stats_by_question($question_id, $exercise_id, $course_code return $return; } -function get_number_students_question_with_answer_count($question_id, $exercise_id, $course_code, $session_id) { +function get_number_students_question_with_answer_count($question_id, $exercise_id, $course_code, $session_id) { $track_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); $track_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); + $course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER); $question_id = intval($question_id); $exercise_id = intval($exercise_id); $course_code = Database::escape_string($course_code); $session_id = intval($session_id); + $sql = "SELECT DISTINCT exe_user_id - FROM $track_exercises e INNER JOIN $track_attempt a ON (a.exe_id = e.exe_id) + FROM $track_exercises e INNER JOIN $track_attempt a ON (a.exe_id = e.exe_id) INNER JOIN $course_user cu + ON cu.course_code = a.course_code AND cu.user_id = exe_user_id WHERE exe_exo_id = $exercise_id AND - course_code = '$course_code' AND + a.course_code = '$course_code' AND e.session_id = $session_id AND question_id = $question_id AND - answer <> 0 AND - status = ''"; + answer <> 0 AND + cu.status = ".STUDENT." AND + relation_type <> 2 AND + e.status = ''"; $result = Database::query($sql); $return = 0; if ($result) { @@ -1650,6 +1655,7 @@ function get_number_students_question_with_answer_count($question_id, $exercise function get_number_students_answer_count($answer_id, $question_id, $exercise_id, $course_code, $session_id) { $track_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); $track_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); + $course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER); $question_id = intval($question_id); $answer_id = intval($answer_id); @@ -1658,12 +1664,16 @@ function get_number_students_answer_count($answer_id, $question_id, $exercise_i $session_id = intval($session_id); $sql = "SELECT DISTINCT exe_user_id - FROM $track_exercises e INNER JOIN $track_attempt a ON (a.exe_id = e.exe_id) + FROM $track_exercises e INNER JOIN $track_attempt a ON (a.exe_id = e.exe_id) INNER JOIN $course_user cu + ON cu.course_code = a.course_code AND cu.user_id = exe_user_id WHERE exe_exo_id = $exercise_id AND - course_code = '$course_code' AND + a.course_code = '$course_code' AND e.session_id = $session_id AND - answer = $answer_id AND - question_id = $question_id AND status = ''"; + answer = $answer_id AND + question_id = $question_id AND + cu.status = ".STUDENT." AND + relation_type <> 2 AND + e.status = ''"; $result = Database::query($sql); $return = 0; if ($result) { diff --git a/main/exercice/stats.php b/main/exercice/stats.php index c65caaf984..f60425e701 100644 --- a/main/exercice/stats.php +++ b/main/exercice/stats.php @@ -18,7 +18,13 @@ if (!$result) { api_not_allowed(true); } -$students = CourseManager :: get_student_list_from_course_code(api_get_course_id(), false); +$session_id = api_get_session_id(); + +if (empty($session_id)) { + $students = CourseManager :: get_student_list_from_course_code(api_get_course_id(), false); +} else { + $students = CourseManager :: get_student_list_from_course_code(api_get_course_id(), true, $session_id); +} $count_students = count($students); $question_list = $objExercise->get_validated_question_list(); @@ -37,7 +43,7 @@ $headers = array( ); if (!empty($question_list)) { - foreach($question_list as $question_id) { + foreach ($question_list as $question_id) { $question_obj = Question::read($question_id); $exercise_stats = get_student_stats_by_question($question_id, $exercise_id, api_get_course_id(), api_get_session_id()); $count_users = get_number_students_question_with_answer_count($question_id, $exercise_id, api_get_course_id(), api_get_session_id()); diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index f7dddb048c..2c900cc258 100644 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -1314,8 +1314,9 @@ class CourseManager { if ($session_id == 0) { // students directly subscribed to the course - $rs = Database::query("SELECT * FROM ".Database::get_main_table(TABLE_MAIN_COURSE_USER)." - WHERE course_code = '$course_code' AND status = 5"); + $sql = "SELECT * FROM ".Database::get_main_table(TABLE_MAIN_COURSE_USER)." + WHERE course_code = '$course_code' AND status = ".STUDENT.""; + $rs = Database::query(); while ($student = Database::fetch_array($rs)) { $students[$student['user_id']] = $student; } @@ -1324,7 +1325,8 @@ class CourseManager { // students subscribed to the course through a session if ($with_session) { - $sql_query = "SELECT * FROM ".Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER)." WHERE course_code = '$course_code' AND status<>2"; + $sql_query = "SELECT * FROM ".Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER)." + WHERE course_code = '$course_code' AND status<>2"; if ($session_id != 0) { $sql_query .= ' AND id_session = '.$session_id; }