Fix calculate stars and points - refs BT#9886 #TMI

1.10.x
Angel Fernando Quiroz Campos 10 years ago
parent 2ca853b514
commit 11bd03b49b
  1. 12
      main/gamification/my_progress.php
  2. 16
      main/inc/lib/GamificationUtils.php
  3. 88
      main/newscorm/learnpath.class.php
  4. 8
      main/template/default/gamification/my_progress.tpl

@ -34,11 +34,15 @@ $sessionList = [];
foreach ($sessionCourseSubscriptions as $subscription) {
$session = $subscription->getSession();
if (array_key_exists($session->getId(), $sessionList)) {
continue;
}
if ($currentSession && $currentSession->getId() === $session->getId()) {
$allowAccess = true;
}
$sessionList[] = $session;
$sessionList[$session->getId()] = $session;
}
if ($currentSession && !$allowAccess) {
@ -53,15 +57,15 @@ $template->assign(
);
$template->assign(
'gamification_stars',
GamificationUtils::getTotalUserStars($user->getId(), $user->getStatus())
GamificationUtils::getTotalUserStars($user->getId(), $user->getStatus())
);
$template->assign(
'gamification_points',
GamificationUtils::getTotalUserPoints($user->getId(), $user->getStatus())
GamificationUtils::getTotalUserPoints($user->getId(), $user->getStatus())
);
$template->assign(
'gamification_progress',
GamificationUtils::getTotalUserProgress($user->getId(), $user->getStatus())
GamificationUtils::getTotalUserProgress($user->getId(), $user->getStatus())
);
$template->assign('sessions', $sessionList);
$template->assign('current_session', $currentSession);

@ -13,7 +13,7 @@ class GamificationUtils
* Get the calculated points on session with gamification mode
* @param int $userId The user ID
* @param int $userStatus The user Status
* @return int
* @return float
*/
public static function getTotalUserPoints($userId, $userStatus)
{
@ -32,7 +32,7 @@ class GamificationUtils
$points += self::getSessionPoints($session['id'], $userId);
}
return $points;
return round($points / count($sessions), 2);
}
/**
@ -77,7 +77,7 @@ class GamificationUtils
$totalPoints += $score;
}
return $totalPoints / count($courses);
return round($totalPoints / count($courses), 2);
}
/**
@ -112,7 +112,7 @@ class GamificationUtils
$progress += $courseProgress;
}
return $progress / count($courses);
return round($progress / count($courses), 2);
}
/**
@ -157,7 +157,7 @@ class GamificationUtils
$totalStars += $stars;
}
return $totalStars / count($courses);
return round($totalStars / count($courses));
}
/**
@ -183,14 +183,14 @@ class GamificationUtils
$stars += self::getSessionStars($session['id'], $userId);
}
return $stars;
return round($stars / count($sessions));
}
/**
* Get the total progress on sessions with gamification mode
* @param int $userId The user ID
* @param int $userStatus The user Status
* @return int
* @return float
*/
public static function getTotalUserProgress($userId, $userStatus)
{
@ -209,7 +209,7 @@ class GamificationUtils
$progress += self::getSessionProgress($session['id'], $userId);
}
return $progress;
return round($progress / count($sessions), 2);
}
}

@ -10202,69 +10202,67 @@ EOD;
// Calculate stars chapters evaluation
$exercisesItems = $this->getExercisesItems();
if ($exercisesItems === false) {
return $stars;
}
$totalResult = 0;
if (!empty($exercisesItems)) {
$totalResult = 0;
foreach ($exercisesItems as $exerciseItem) {
$exerciseResultInfo = Event::getExerciseResultsByUser(
$this->user_id,
$exerciseItem->ref,
$this->course_int_id,
$sessionId,
$this->lp_id,
$exerciseItem->db_id
);
foreach ($exercisesItems as $exerciseItem) {
$exerciseResultInfo = Event::getExerciseResultsByUser(
$this->user_id,
$exerciseItem->path,
$this->course_int_id,
$sessionId,
$this->lp_id,
$exerciseItem->db_id
);
$exerciseResult = 0;
$exerciseResult = 0;
foreach ($exerciseResultInfo as $result) {
$exerciseResult += $result['exe_result'] * 100 / $result['exe_weighting'];
}
foreach ($exerciseResultInfo as $result) {
$exerciseResult += $result['exe_result'] * 100 / $result['exe_weighting'];
}
$exerciseAverage = $exerciseResult / (count($exerciseResultInfo) > 0 ? count($exerciseResultInfo) : 1);
$exerciseAverage = $exerciseResult / (count($exerciseResultInfo) > 0 ? count($exerciseResultInfo) : 1);
$totalResult += $exerciseAverage;
}
$totalResult += $exerciseAverage;
}
$totalExerciseAverage = $totalResult / (count($exercisesItems) > 0 ? count($exercisesItems) : 1);
$totalExerciseAverage = $totalResult / (count($exercisesItems) > 0 ? count($exercisesItems) : 1);
if ($totalExerciseAverage >= 50) {
$stars++;
}
if ($totalExerciseAverage >= 50) {
$stars++;
}
if ($totalExerciseAverage >= 80) {
$stars++;
if ($totalExerciseAverage >= 80) {
$stars++;
}
}
// Calculate star for final evaluation
$finalEvaluationItem = $this->getFinalEvaluationItem();
if (empty($finalEvaluationItem)) {
return $stars;
}
if (!empty($finalEvaluationItem)) {
$evaluationResultInfo = Event::getExerciseResultsByUser(
$this->user_id,
$finalEvaluationItem->path,
$this->course_int_id,
$sessionId,
$this->lp_id,
$finalEvaluationItem->db_id
);
$evaluationResultInfo = Event::getExerciseResultsByUser(
$this->user_id,
$finalEvaluationItem->ref,
$this->course_int_id,
$sessionId,
$this->lp_id,
$finalEvaluationItem->db_id
);
$evaluationResult = 0;
$evaluationResult = 0;
foreach ($evaluationResultInfo as $result) {
$evaluationResult += $result['exe_result'] * 100 / $result['exe_weighting'];
}
foreach ($evaluationResultInfo as $result) {
$evaluationResult += $result['exe_result'] * 100 / $result['exe_weighting'];
}
$averageDivisor = count($evaluationResultInfo) > 0 ? count($evaluationResultInfo) : 1;
$evaluationAverage = $evaluationResult / (count($evaluationResultInfo) > 0 ? count($evaluationResultInfo) : 1);
$evaluationAverage = $evaluationResult / $averageDivisor;
if ($evaluationAverage >= 80) {
$stars++;
if ($evaluationAverage >= 80) {
$stars++;
}
}
return $stars;

@ -14,9 +14,11 @@
{% endfor %}
{% endif %}
{% for i in 1..(5 - gamification_stars) %}
<i class="fa fa-star in"></i>
{% endfor %}
{% if 4 - gamification_stars > 0 %}
{% for i in 1..(4 - gamification_stars) %}
<i class="fa fa-star in"></i>
{% endfor %}
{% endif %}
</div>
<div class="progress">

Loading…
Cancel
Save