Adding new column in course reporting: Exercise average (best students results) see BT#3374 + some fixes when listing the exercise results (now we only show the exercises that are finished)

skala
Julio Montoya 14 years ago
parent cc97835cec
commit 25d84ebf05
  1. 47
      main/inc/lib/events.lib.inc.php
  2. 67
      main/inc/lib/tracking.lib.php
  3. 9
      main/mySpace/myStudents.php
  4. 20
      main/tracking/courseLog.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);

@ -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;

@ -895,7 +895,14 @@ if (empty($_GET['details'])) {
echo '<td align="center">'.$count_attempts.'</td>';
echo '<td align="center">';
$sql_last_attempt = 'SELECT exe_id FROM ' . $tbl_stats_exercices . ' WHERE exe_exo_id="'.$exercise_id.'" AND exe_user_id="'.$student_id.'" AND exe_cours_id="'.$course_code.'" AND orig_lp_id = 0 AND orig_lp_item_id = 0 ORDER BY exe_date DESC LIMIT 1';
$sql_last_attempt = 'SELECT exe_id FROM ' . $tbl_stats_exercices . '
WHERE exe_exo_id="'.$exercise_id.'" AND
exe_user_id="'.$student_id.'" AND
exe_cours_id="'.$course_code.'" AND
status = "" AND
orig_lp_id = 0 AND
orig_lp_item_id = 0
ORDER BY exe_date DESC LIMIT 1';
$result_last_attempt = Database::query($sql_last_attempt);
if (Database :: num_rows($result_last_attempt) > 0) {
$id_last_attempt = Database :: result($result_last_attempt, 0, 0);

@ -525,21 +525,22 @@ if ($_GET['studentlist'] == 'false') {
$table->set_header(4, get_lang('CourseProgress').'&nbsp;'.Display::return_icon('info3.gif', get_lang('ScormAndLPProgressTotalAverage'), array('align' => 'absmiddle', 'hspace' => '3px')), false, array('style' => 'width:110px;'));
$table->set_header(5, get_lang('ExerciseProgress'), false);
$table->set_header(6, get_lang('Score').'&nbsp;'.Display::return_icon('info3.gif', get_lang('ScormAndLPTestTotalAverage'), array('align' => 'absmiddle', 'hspace' => '3px')), false, array('style' => 'width:110px;'));
$table->set_header(7, get_lang('Student_publication'), false);
$table->set_header(8, get_lang('Messages'), false);
$table->set_header(6, get_lang('ExerciseAverage'), false);
$table->set_header(7, get_lang('Score').'&nbsp;'.Display::return_icon('info3.gif', get_lang('ScormAndLPTestTotalAverage'), array('align' => 'absmiddle', 'hspace' => '3px')), false, array('style' => 'width:110px;'));
$table->set_header(8, get_lang('Student_publication'), false);
$table->set_header(9, get_lang('Messages'), false);
if (empty($session_id)) {
$table->set_header(9, get_lang('Survey'), false);
$table->set_header(10, get_lang('Survey'), false);
$table->set_header(11, get_lang('FirstLogin'), false, 'align="center"');
$table->set_header(12, get_lang('LatestLogin'), false, 'align="center"');
$table->set_header(13, get_lang('AdditionalProfileField'), false);
$table->set_header(14, get_lang('Details'), false);
} else {
$table->set_header(10, get_lang('FirstLogin'), false, 'align="center"');
$table->set_header(11, get_lang('LatestLogin'), false, 'align="center"');
$table->set_header(12, get_lang('AdditionalProfileField'), false);
$table->set_header(13, get_lang('Details'), false);
} else {
$table->set_header(9, get_lang('FirstLogin'), false, 'align="center"');
$table->set_header(10, get_lang('LatestLogin'), false, 'align="center"');
$table->set_header(11, get_lang('AdditionalProfileField'), false);
$table->set_header(12, get_lang('Details'), false);
}
$table->display();
} else {
@ -561,6 +562,7 @@ if ($_GET['studentlist'] == 'false') {
$csv_headers[] = get_lang('TrainingTime', '');
$csv_headers[] = get_lang('CourseProgress', '');
$csv_headers[] = get_lang('ExerciseProgress','');
$csv_headers[] = get_lang('ExerciseAverage','');
$csv_headers[] = get_lang('Score', '');
$csv_headers[] = get_lang('Student_publication', '');
$csv_headers[] = get_lang('Messages', '');

Loading…
Cancel
Save