diff --git a/main/inc/lib/events.lib.inc.php b/main/inc/lib/events.lib.inc.php index ca8ea64e6a..df94c67450 100644 --- a/main/inc/lib/events.lib.inc.php +++ b/main/inc/lib/events.lib.inc.php @@ -1090,6 +1090,7 @@ function count_exercise_attempts_by_user($user_id, $exercise_id, $course_code, $ * @param string course code * @param int session id * @return array with the results + * @todo rename this function * */ function get_best_exercise_results_by_user($exercise_id, $course_code, $session_id = 0) { @@ -1125,6 +1126,52 @@ function get_best_exercise_results_by_user($exercise_id, $course_code, $session_ return $best_score_return; } +function get_best_attempt_exercise_results_per_user($user_id, $exercise_id, $course_code, $session_id = 0) { + $table_track_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); + $table_track_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); + $course_code = Database::escape_string($course_code); + $exercise_id = intval($exercise_id); + $session_id = intval($session_id); + $user_id = intval($user_id); + + $sql = "SELECT * FROM $table_track_exercises + WHERE status = '' AND + exe_cours_id = '$course_code' AND + exe_exo_id = '$exercise_id' AND + session_id = $session_id AND + exe_user_id = $user_id AND + orig_lp_id =0 AND + orig_lp_item_id = 0 + ORDER BY exe_id"; + + $res = Database::query($sql); + $list = array(); + while($row = Database::fetch_array($res,'ASSOC')) { + $list[$row['exe_id']] = $row; /* + $sql = "SELECT * FROM $table_track_attempt WHERE exe_id = {$row['exe_id']}"; + $res_question = Database::query($sql); + while($row_q = Database::fetch_array($res_question,'ASSOC')) { + $list[$row['exe_id']]['question_list'][$row_q['question_id']] = $row_q; + } */ + } + //Getting the best results of every student + $best_score_return = array(); + $best_score_return['exe_result'] = 0; + + foreach($list as $result) { + $current_best_score = $result; + if ($current_best_score['exe_result'] > $best_score_return['exe_result']) { + $best_score_return = $result; + } + } + if (!isset($best_score_return['exe_weighting'])) { + $best_score_return = array(); + } + return $best_score_return; +} + + + function count_exercise_result_not_validated($exercise_id, $course_code, $session_id = 0) { $table_track_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); $table_track_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT_RECORDING); diff --git a/main/inc/lib/tracking.lib.php b/main/inc/lib/tracking.lib.php index 0ad0c31292..f843882e75 100644 --- a/main/inc/lib/tracking.lib.php +++ b/main/inc/lib/tracking.lib.php @@ -339,8 +339,8 @@ class Tracking { $a_course = CourseManager :: get_course_information($course_code); if (!empty($a_course)) { // table definition - $tbl_course_quiz = Database::get_course_table(TABLE_QUIZ_TEST); - $tbl_stats_exercise = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); + $tbl_course_quiz = Database::get_course_table(TABLE_QUIZ_TEST); + $tbl_stats_exercise = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); // Compose a filter based on optional exercise given $condition_quiz = ""; @@ -387,22 +387,25 @@ class Tracking { $sql = "SELECT SUM(exe_result/exe_weighting*100) as avg_score, COUNT(*) as num_attempts FROM $tbl_stats_exercise WHERE exe_exo_id IN ('".$exercise_id."') - $condition_user - AND orig_lp_id = 0 - AND exe_cours_id = '$course_code' - AND orig_lp_item_id = 0 $condition_session + $condition_user AND + orig_lp_id = 0 AND + status = '' AND + exe_cours_id = '$course_code' AND + orig_lp_item_id = 0 $condition_session ORDER BY exe_date DESC"; $res = Database::query($sql); $row = Database::fetch_array($res); $quiz_avg_score = 0; - if (!empty($row['avg_score'])) { - $quiz_avg_score = round($row['avg_score'],2); + + if (!empty($row['avg_score'])) { + $quiz_avg_score = round($row['avg_score'],2); } - if(!empty($row['num_attempts'])) { - $quiz_avg_score = round($quiz_avg_score / $row['num_attempts'], 2); + + if(!empty($row['num_attempts'])) { + $quiz_avg_score = round($quiz_avg_score / $row['num_attempts'], 2); } - if (is_array($student_id)) { + if (is_array($student_id)) { $quiz_avg_score = round($quiz_avg_score / count($student_id), 2); } return $quiz_avg_score; @@ -413,7 +416,7 @@ class Tracking { /** - * Get count student's exercise attempts + * Get count student's exercise COMPLETED attempts * @param int Student id * @param string Course code * @param int Exercise id @@ -437,6 +440,7 @@ class Tracking { $sql = "SELECT COUNT(ex.exe_id) as essais FROM $tbl_stats_exercices AS ex WHERE ex.exe_cours_id = '$course_code' AND ex.exe_exo_id = $exercise_id + AND status = '' AND orig_lp_id = $lp_id AND orig_lp_item_id = $lp_item_id AND exe_user_id= $student_id @@ -485,6 +489,23 @@ class Tracking { return $count; } + + function get_exercise_student_average_best_attempt($exercise_list, $user_id, $course_code, $session_id) { + $result = 0; + foreach($exercise_list as $exercise_data) { + $exercise_id = $exercise_data['id']; + $best_attempt = get_best_attempt_exercise_results_per_user($user_id, $exercise_id , $course_code, $session_id); + + if (!empty($best_attempt)) { + $result += $best_attempt['exe_result']/$best_attempt['exe_weighting']; + } + } + $result = $result/ count($exercise_list); + $result = round($result, 2)*100; + return $result.'%'; + + } + /** * Returns the average student progress in the learning paths of the given * course. @@ -3636,9 +3657,11 @@ class TrackingCourseLog { } $user['average_progress'] = $avg_student_progress.'%'; - $total_user_exercise = Tracking::get_exercise_student_progress($total_exercises, $user['user_id'], $course_code, $session_id); + $total_user_exercise = Tracking::get_exercise_student_progress($total_exercises, $user['user_id'], $course_code, $session_id); + $user['exercise_progress'] = $total_user_exercise; - $user['exercise_progress'] = $total_user_exercise; + $total_user_exercise = Tracking::get_exercise_student_average_best_attempt($total_exercises, $user['user_id'], $course_code, $session_id); + $user['exercise_average_best_attempt'] = $total_user_exercise; if (is_numeric($avg_student_score)) { @@ -3684,7 +3707,11 @@ class TrackingCourseLog { $user_row[]= $user['time']; //3 $user_row[]= $user['average_progress']; - $user_row[]= $user['exercise_progress']; + $user_row[]= $user['exercise_progress']; + + $user_row[]= $user['exercise_average_best_attempt']; + + $user_row[]= $user['student_score']; $user_row[]= $user['count_assignments']; $user_row[]= $user['count_messages']; //8 @@ -3703,15 +3730,15 @@ class TrackingCourseLog { if ($export_csv) { if (empty($session_id)) { - $user_row[10] = strip_tags($user_row[10]); - $user_row[11] = strip_tags($user_row[11]); - unset($user_row[13]); + $user_row[11] = strip_tags($user_row[11]); + $user_row[12] = strip_tags($user_row[12]); unset($user_row[14]); + unset($user_row[15]); } else { - $user_row[9] = strip_tags($user_row[9]); $user_row[10] = strip_tags($user_row[10]); - unset($user_row[12]); + $user_row[11] = strip_tags($user_row[11]); unset($user_row[13]); + unset($user_row[14]); } $csv_content[] = $user_row; diff --git a/main/mySpace/myStudents.php b/main/mySpace/myStudents.php index c99015cc4d..2e3e82ad2b 100644 --- a/main/mySpace/myStudents.php +++ b/main/mySpace/myStudents.php @@ -895,7 +895,14 @@ if (empty($_GET['details'])) { echo '