Fixing some function names, showing only the best results and NOT the latest attempt in the exercise tracking see BT#2070

skala
Julio Montoya 14 years ago
parent 527d406d68
commit 7364d984ac
  1. 12
      main/exercice/exercise.lib.php
  2. 132
      main/inc/lib/events.lib.inc.php
  3. 68
      main/inc/lib/tracking.lib.php
  4. 2
      main/session/index.php

@ -1260,7 +1260,7 @@ function get_exercise_result_ranking($my_score, $my_exe_id, $exercise_id, $cours
foreach($user_list as $user_data) {
$user_id = $user_data['user_id'];
$best_attempts[$user_id]= get_best_attempt_score_by_user($user_id,$exercise_id,$course_code,$session_id);
$best_attempts[$user_id]= get_best_attempt_by_user($user_id,$exercise_id,$course_code,$session_id);
}
$position_data = array();
@ -1307,7 +1307,7 @@ function get_exercise_result_ranking($my_score, $my_exe_id, $exercise_id, $cours
/**
* Gets the position of the score based in a given score (result/weight) and the exe_id based in all attempts
* (NO Exercises in LPs ) old funcionality
* (NO Exercises in LPs ) old funcionality by attempt
* @param float user score to be compared attention => score/weight
* @param int exe id of the exercise (this is necesary because if 2 students have the same score the one with the minor exe_id will have a best position, just to be fair and FIFO)
* @param int exercise id
@ -1368,7 +1368,7 @@ function get_exercise_result_ranking_by_attempt($my_score, $my_exe_id, $exercise
* Get the best score in a exercise (NO Exercises in LPs )
*/
function get_best_attempt_score($exercise_id, $course_code, $session_id) {
function get_best_attempt_in_course($exercise_id, $course_code, $session_id) {
$user_results = get_all_exercise_results($exercise_id, $course_code, $session_id);
$best_score_data = array();
$best_score = 0;
@ -1376,7 +1376,7 @@ function get_best_attempt_score($exercise_id, $course_code, $session_id) {
foreach($user_results as $result) {
if (!empty($result['exe_weighting']) && intval($result['exe_weighting']) != 0) {
$score = $result['exe_result']/$result['exe_weighting'];
if ($score > $best_score) {
if ($score >= $best_score) {
$best_score = $score;
$best_score_data = $result;
}
@ -1389,7 +1389,7 @@ function get_best_attempt_score($exercise_id, $course_code, $session_id) {
/*
* Get the best score in a exercise (NO Exercises in LPs )
*/
function get_best_attempt_score_by_user($user_id, $exercise_id, $course_code, $session_id) {
function get_best_attempt_by_user($user_id, $exercise_id, $course_code, $session_id) {
$user_results = get_all_exercise_results($exercise_id, $course_code, $session_id);
$best_score_data = array();
$best_score = 0;
@ -1398,7 +1398,7 @@ function get_best_attempt_score_by_user($user_id, $exercise_id, $course_code, $s
if ($result['exe_user_id'] != $user_id) continue;
if (!empty($result['exe_weighting']) && intval($result['exe_weighting']) != 0) {
$score = $result['exe_result']/$result['exe_weighting'];
if ($score > $best_score) {
if ($score >= $best_score) {
$best_score = $score;
$best_score_data = $result;
}

@ -675,7 +675,6 @@ function get_all_exercise_results($exercise_id, $course_code, $session_id = 0) {
$session_id = intval($session_id);
$sql = "SELECT * FROM $TABLETRACK_EXERCICES WHERE status = '' AND exe_cours_id = '$course_code' AND exe_exo_id = '$exercise_id' AND session_id = $session_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')) {
@ -686,60 +685,9 @@ function get_all_exercise_results($exercise_id, $course_code, $session_id = 0) {
$list[$row['exe_id']]['question_list'][$row_q['question_id']] = $row_q;
}
}
//echo '<pre>'; print_r($list);
return $list;
}
/**
* Gets all exercise BEST results attempts (NO Exercises in LPs ) from a given exercise id, course, session per user
* @param int exercise id
* @param string course code
* @param int session id
* @return array with the results
*
*/
function get_all_best_exercise_results_by_user($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);
$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 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;
}
}
/*
echo count($list);
echo '<br>';
echo '<pre>'; print_r($list);*/
//Getting the best results of every student
$best_score_return = array();
foreach($list as $student_result) {
$user_id = $student_result['exe_user_id'];
$current_best_score[$user_id] = $student_result['exe_result'];
//echo $current_best_score[$user_id].' - '.$best_score_return[$user_id]['exe_result'].'<br />';
if ($current_best_score[$user_id] > $best_score_return[$user_id]['exe_result']) {
$best_score_return[$user_id] = $student_result;
}
}
/*
echo count($best_score_return);
echo '<pre>'; print_r($best_score_return);*/
return $best_score_return;
}
/**
* Gets all exercise results (NO Exercises in LPs ) from a given exercise id, course, session
@ -795,7 +743,7 @@ function get_all_exercise_results_by_user($user_id, $exercise_id, $course_code,
$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 orig_lp_id = 0 AND orig_lp_item_id = 0 AND exe_user_id = $user_id ORDER by exe_id";
$sql = "SELECT * FROM $table_track_exercises WHERE status = '' AND exe_user_id = $user_id AND exe_cours_id = '$course_code' AND exe_exo_id = $exercise_id AND session_id = $session_id AND orig_lp_id = 0 AND orig_lp_item_id = 0 ORDER by exe_id";
$res = Database::query($sql);
$list = array();
@ -812,6 +760,84 @@ function get_all_exercise_results_by_user($user_id, $exercise_id, $course_code,
}
/**
* Count exercise attempts (NO Exercises in LPs ) from a given exercise id, course, session
* @param int exercise id
* @param string course code
* @param int session id
* @return array with the results
*
*/
function count_exercise_attempts_by_user($user_id, $exercise_id, $course_code, $session_id = 0) {
$TABLETRACK_EXERCICES = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
$TBL_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 count(*) as count FROM $TABLETRACK_EXERCICES WHERE status = '' AND exe_user_id = '$user_id' AND exe_cours_id = '$course_code' AND exe_exo_id = '$exercise_id' AND session_id = $session_id AND orig_lp_id =0 AND orig_lp_item_id = 0 ORDER BY exe_id";
//echo '<br >';
$res = Database::query($sql);
$result = 0;
if (Database::num_rows($res) > 0 ) {
$row = Database::fetch_array($res,'ASSOC');
$result = $row['count'];
}
return $result;
}
/**
* Gets all exercise BEST results attempts (NO Exercises in LPs ) from a given exercise id, course, session per user
* @param int exercise id
* @param string course code
* @param int session id
* @return array with the results
*
*/
function get_best_exercise_results_by_user($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);
$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 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;
}
}
/*
echo count($list);
echo '<br>';
echo '<pre>'; print_r($list);*/
//Getting the best results of every student
$best_score_return = array();
foreach($list as $student_result) {
$user_id = $student_result['exe_user_id'];
$current_best_score[$user_id] = $student_result['exe_result'];
//echo $current_best_score[$user_id].' - '.$best_score_return[$user_id]['exe_result'].'<br />';
if ($current_best_score[$user_id] > $best_score_return[$user_id]['exe_result']) {
$best_score_return[$user_id] = $student_result;
}
}
/*
echo count($best_score_return);
echo '<pre>'; print_r($best_score_return);*/
return $best_score_return;
}
/**
* Gets all exercise events from a Learning Path within a Course nd Session
* @param int exercise id

@ -2198,7 +2198,7 @@ class Tracking {
$html .= '<tr>
<th class="head" style="color:#000">'.get_lang('Exercices').'</th>
<th class="head" style="color:#000">'.get_lang('Attempts').'</th>
<th class="head" style="color:#000">'.get_lang('LatestAttempt').'</th>
<th class="head" style="color:#000">'.get_lang('BestAttempt').'</th>
<th class="head" style="color:#000">'.get_lang('Ranking').'</th>
<th class="head" style="color:#000">'.get_lang('BestResultInCourse').'</th>
<th class="head" style="color:#000">'.get_lang('Statistics').' '.Display :: return_icon('info3.gif', get_lang('OnlyBestResultsPerStudent'), array('align' => 'absmiddle', 'hspace' => '3px')).'</th>
@ -2212,39 +2212,14 @@ class Tracking {
$result_exercices = Database::query($sql_exercices);
$to_graph_exercise_result = array();
if (Database::num_rows($result_exercices) > 0) {
$score = $weighting = $exe_id = 0;
while ($exercices = Database::fetch_array($result_exercices)) {
//if ($exercices['id'] != 3) continue;
$score = $weighting = $attempts = 0;
$exercise_stats = get_all_exercise_results($exercices['id'], $course_info['code'], $session_id);
$best_exercise_stats = get_all_best_exercise_results_by_user($exercices['id'], $course_info['code'], $session_id);
//User attempts we assume the latest item in the loop is the latest attempt
if (!empty($exercise_stats)) {
//$best_score = 0; $best_score_array = array();
foreach($exercise_stats as $exercise_stat) {
if ($exercise_stat['exe_user_id'] == $user_id) {
//Always getting the latest attempt
$score = $exercise_stat['exe_result'];
$weighting = $exercise_stat['exe_weighting'];
$exe_id = $exercise_stat['exe_id'];
//Use this to take the average
//$score = $score + $exercise_stat['exe_result'];
//$weighting = $weighting + $exercise_stat['exe_weighting'];
//Getting my best score
/*
if ($score > $best_score ) {
$best_score = $score;
$best_score_array = $exercise_stat;
}*/
$attempts++;
}
}
}
//Getting count of attempts by user
$attempts = count_exercise_attempts_by_user(api_get_user_id(), $exercices['id'], $course_info['code'], $session_id);
//For graphics
$best_exercise_stats = get_best_exercise_results_by_user($exercices['id'], $course_info['code'], $session_id);
$to_graph_exercise_result[$exercices['id']] = array('title'=>$exercices['title'], 'data'=>$best_exercise_stats);
$html .= '<tr class="row_even">';
@ -2259,21 +2234,30 @@ class Tracking {
$graph = $normal_graph = null;
//Getting best results
$best_score_data = get_best_attempt_score($exercices['id'], $course_info['code'], $session_id);
$best_score_data = get_best_attempt_in_course($exercices['id'], $course_info['code'], $session_id);
$best_score = show_score($best_score_data['exe_result'], $best_score_data['exe_weighting']);
if ($attempts > 0) {
//$latest_attempt_url .= '<a href="../exercice/exercise_show.php?origin=myprogress&id='.$exe_id.'&cidReq='.$course_info['code'].'&id_session='.$session_id.'"> '.Display::return_icon('quiz.gif', get_lang('Quiz')).' </a>';
$latest_attempt_url .= '../exercice/exercise_show.php?origin=myprogress&id='.$exe_id.'&cidReq='.$course_info['code'].'&id_session='.$session_id;
$percentage_score_result = Display::url(show_score($score, $weighting), $latest_attempt_url);
$my_score = 0;
if (!empty($weighting)) {
$my_score = $score/$weighting;
}
$position = get_exercise_result_ranking($my_score, $exe_id, $exercices['id'], $course_info['code'], $session_id);
$exercise_stat = get_best_attempt_by_user(api_get_user_id(), $exercices['id'], $course_info['code'], $session_id);
if (!empty($exercise_stat)) {
//Always getting the BEST attempt
$score = $exercise_stat['exe_result'];
$weighting = $exercise_stat['exe_weighting'];
$exe_id = $exercise_stat['exe_id'];
//$latest_attempt_url .= '<a href="../exercice/exercise_show.php?origin=myprogress&id='.$exe_id.'&cidReq='.$course_info['code'].'&id_session='.$session_id.'"> '.Display::return_icon('quiz.gif', get_lang('Quiz')).' </a>';
$latest_attempt_url .= '../exercice/exercise_show.php?origin=myprogress&id='.$exe_id.'&cidReq='.$course_info['code'].'&id_session='.$session_id;
$percentage_score_result = Display::url(show_score($score, $weighting), $latest_attempt_url);
$my_score = 0;
if (!empty($weighting) && intval($weighting) != 0) {
$my_score = $score/$weighting;
}
$position = get_exercise_result_ranking($my_score, $exe_id, $exercices['id'], $course_info['code'], $session_id);
$graph = self::generate_exercise_result_thumbnail_graph($to_graph_exercise_result[$exercices['id']]);
$normal_graph = self::generate_exercise_result_graph($to_graph_exercise_result[$exercices['id']]);
$graph = self::generate_exercise_result_thumbnail_graph($to_graph_exercise_result[$exercices['id']]);
$normal_graph = self::generate_exercise_result_graph($to_graph_exercise_result[$exercices['id']]);
}
}
echo Display::div($normal_graph, array('id'=>'main_graph_'.$exercices['id'],'class'=>'dialog', 'style'=>'display:none') );

@ -155,7 +155,7 @@ foreach($final_array as $session_data) {
if (!empty($course_data['exercises'])) {
//Exercises
foreach ($course_data['exercises'] as $my_exercise_id => $exercise_data) {
$best_score_data = get_best_attempt_score($my_exercise_id, $my_course_code, $session_id);
$best_score_data = get_best_attempt_in_course($my_exercise_id, $my_course_code, $session_id);
$best_score = show_score($best_score_data['exe_result'], $best_score_data['exe_weighting']);
//Exercise results
$counter = 1;

Loading…
Cancel
Save