[svn r19039] Fixing wrong score display in LP tests see FS#3805

skala
Julio Montoya 16 years ago
parent fcc82c04ae
commit a6302745c5
  1. 61
      main/inc/lib/tracking.lib.php

@ -336,8 +336,7 @@ class Tracking {
//We get the last view id of this LP //We get the last view id of this LP
$sql='SELECT max(id) as id FROM '.$lp_view_table.' WHERE lp_id='.$a_learnpath['id'].' AND user_id="'.intval($student_id).'"'; $sql='SELECT max(id) as id FROM '.$lp_view_table.' WHERE lp_id='.$a_learnpath['id'].' AND user_id="'.intval($student_id).'"';
$rs_last_lp_view_id = api_sql_query($sql, __FILE__, __LINE__); $rs_last_lp_view_id = api_sql_query($sql, __FILE__, __LINE__);
$lp_view_id = Database::result($rs_last_lp_view_id,0,'id'); $lp_view_id = Database::result($rs_last_lp_view_id,0,'id');
$sql='SELECT SUM(lp_iv.score)/count(lp_item_id) as score, SUM(lp_iv.max_score)/count(lp_item_id) as max_score $sql='SELECT SUM(lp_iv.score)/count(lp_item_id) as score, SUM(lp_iv.max_score)/count(lp_item_id) as max_score
FROM '.$lp_item_view_table.' as lp_iv FROM '.$lp_item_view_table.' as lp_iv
@ -380,17 +379,14 @@ class Tracking {
$lp_view_id = intval(Database::result($rs_last_lp_view_id,0,'id')); $lp_view_id = intval(Database::result($rs_last_lp_view_id,0,'id'));
$total_score = $total_weighting = 0; $total_score = $total_weighting = 0;
if($lp_view_id!=0) if ($lp_view_id!=0) {
{ while ($item = Database :: fetch_array($rsItems, 'ASSOC')) {
while($item = Database :: fetch_array($rsItems, 'ASSOC'))
{
// we take the score from a LP because we have lp_view_id // we take the score from a LP because we have lp_view_id
$sql = 'SELECT score as student_score $sql = 'SELECT score as student_score
FROM '.$lp_item_view_table.' as lp_view_item FROM '.$lp_item_view_table.' as lp_view_item
WHERE lp_view_item.lp_item_id = '.$item['item_id'].' WHERE lp_view_item.lp_item_id = '.$item['item_id'].'
AND lp_view_id = "'.$lp_view_id.'" AND lp_view_id = "'.$lp_view_id.'" ';
';
$rsScores = api_sql_query($sql, __FILE__, __LINE__); $rsScores = api_sql_query($sql, __FILE__, __LINE__);
// Real max score - this was implemented because of the random exercises // Real max score - this was implemented because of the random exercises
@ -405,36 +401,45 @@ class Tracking {
$id_last_attempt = $rowLA[0]; $id_last_attempt = $rowLA[0];
} }
} else { } else {
$id_last_attempt = Database :: result($resultLastAttempt, 0, 0); $id_last_attempt = Database :: result($resultLastAttempt, 0, 0);
} }
} }
$sql = "SELECT SUM(t.ponderation) as maxscore from ( SELECT distinct question_id, marks,ponderation FROM $tbl_stats_attempts as at " . $sql = "SELECT SUM(t.ponderation) as maxscore from ( SELECT distinct question_id, marks,ponderation FROM $tbl_stats_attempts as at " .
"INNER JOIN $tbl_quiz_questions as q on(q.id = at.question_id) where exe_id ='$id_last_attempt' ) as t"; "INNER JOIN $tbl_quiz_questions as q on(q.id = at.question_id) where exe_id ='$id_last_attempt' ) as t";
$result = api_sql_query($sql, __FILE__, __LINE__); $result = api_sql_query($sql, __FILE__, __LINE__);
$row_max_score = Database :: fetch_array($result); $row_max_score = Database :: fetch_array($result);
$maxscore = $row_max_score['maxscore']; $maxscore = $row_max_score['maxscore'];
if ($maxscore=='') if ($maxscore=='') {
{
$maxscore = $item['max_score']; $maxscore = $item['max_score'];
} }
// not right!
if(Database::num_rows($rsScores)>0) /*if(Database::num_rows($rsScores)>0) {
{
$total_score += Database::result($rsScores, 0, 0); $total_score += Database::result($rsScores, 0, 0);
//echo $total_weighting += $item['max_score']; //echo $total_weighting += $item['max_score'];
$total_weighting += $maxscore; $total_weighting += $maxscore;
if($total_weighting>0) if($total_weighting>0) {
{ //echo ($total_score/$total_weighting)*100;
$lp_scorm_score_total += ($total_score/$total_weighting)*100; $lp_scorm_score_total += ($total_score/$total_weighting)*100;
$lp_scorm_weighting_total+=100;
}
}*/
if(Database::num_rows($rsScores)>0) {
$total_score = Database::result($rsScores, 0, 0);
//echo $total_weighting += $item['max_score'];
$total_weighting += $maxscore;
if($total_weighting>0) {
//echo $total_score.' - '.$maxscore; echo '<br>';
//echo $lp_scorm_score_total += ($total_score/$total_weighting)*100;
$lp_scorm_score_total += ($total_score/$maxscore)*100;
$lp_scorm_weighting_total+=100; $lp_scorm_weighting_total+=100;
} }
} }
} }
} }
} }
} }
@ -445,14 +450,10 @@ class Tracking {
//i.e 10.52 //i.e 10.52
$pourcentageScore = round( (($totalScore * 100) / $lp_scorm_weighting_total),2); $pourcentageScore = round( (($totalScore * 100) / $lp_scorm_weighting_total),2);
return $pourcentageScore; return $pourcentageScore;
} } else {
else
{
return null; return null;
} }
} } else {
else
{
return null; return null;
} }
} }

Loading…
Cancel
Save