Actualización
This commit is contained in:
231
main/inc/lib/GamificationUtils.php
Normal file
231
main/inc/lib/GamificationUtils.php
Normal file
@@ -0,0 +1,231 @@
|
||||
<?php
|
||||
/* For licensing terms, see /license.txt */
|
||||
|
||||
/**
|
||||
* GamificationUtils class
|
||||
* Functions to manage the gamification mode.
|
||||
*
|
||||
* @author Angel Fernando Quiroz Campos <angel.quiroz@beeznest.com>
|
||||
*/
|
||||
class GamificationUtils
|
||||
{
|
||||
/**
|
||||
* Get the calculated points on session with gamification mode.
|
||||
*
|
||||
* @param int $userId The user ID
|
||||
* @param int $userStatus The user Status
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public static function getTotalUserPoints($userId, $userStatus)
|
||||
{
|
||||
$points = 0;
|
||||
|
||||
$sessions = SessionManager::getSessionsFollowedByUser(
|
||||
$userId,
|
||||
$userStatus
|
||||
);
|
||||
|
||||
if (empty($sessions)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
foreach ($sessions as $session) {
|
||||
$points += self::getSessionPoints($session['id'], $userId);
|
||||
}
|
||||
|
||||
return round($points / count($sessions), 2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the achieved points for an user in a session.
|
||||
*
|
||||
* @param int $sessionId The session ID
|
||||
* @param int $userId The user ID
|
||||
*
|
||||
* @return int The count of points
|
||||
*/
|
||||
public static function getSessionPoints($sessionId, $userId)
|
||||
{
|
||||
$totalPoints = 0;
|
||||
$courses = SessionManager::get_course_list_by_session_id($sessionId);
|
||||
|
||||
if (empty($courses)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
foreach ($courses as $course) {
|
||||
$learnPathListObject = new LearnpathList(
|
||||
$userId,
|
||||
api_get_course_info($course['code']),
|
||||
$sessionId
|
||||
);
|
||||
$learnPaths = $learnPathListObject->get_flat_list();
|
||||
|
||||
if (empty($learnPaths)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$score = 0;
|
||||
|
||||
foreach ($learnPaths as $learnPathId => $learnPathInfo) {
|
||||
if (empty($learnPathInfo['seriousgame_mode'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$learnPath = new learnpath(
|
||||
$course['code'],
|
||||
$learnPathId,
|
||||
$userId
|
||||
);
|
||||
$score += $learnPath->getCalculateScore($sessionId);
|
||||
}
|
||||
$totalPoints += round($score / count($learnPaths), 2);
|
||||
}
|
||||
|
||||
return round($totalPoints / count($courses), 2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the calculated progress for an user in a session.
|
||||
*
|
||||
* @param int $sessionId The session ID
|
||||
* @param int $userId The user ID
|
||||
*
|
||||
* @return float The progress
|
||||
*/
|
||||
public static function getSessionProgress($sessionId, $userId)
|
||||
{
|
||||
$courses = SessionManager::get_course_list_by_session_id($sessionId);
|
||||
$progress = 0;
|
||||
|
||||
if (empty($courses)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
foreach ($courses as $course) {
|
||||
$courseProgress = Tracking::get_avg_student_progress(
|
||||
$userId,
|
||||
$course['code'],
|
||||
[],
|
||||
$sessionId,
|
||||
false,
|
||||
true
|
||||
);
|
||||
|
||||
if (false === $courseProgress) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$progress += $courseProgress;
|
||||
}
|
||||
|
||||
return round($progress / count($courses), 2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of stars achieved for an user in a session.
|
||||
*
|
||||
* @param int $sessionId The session ID
|
||||
* @param int $userId The user ID
|
||||
*
|
||||
* @return int The number of stars
|
||||
*/
|
||||
public static function getSessionStars($sessionId, $userId)
|
||||
{
|
||||
$totalStars = 0;
|
||||
$courses = SessionManager::get_course_list_by_session_id($sessionId);
|
||||
|
||||
if (empty($courses)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
foreach ($courses as $course) {
|
||||
$learnPathListObject = new LearnpathList(
|
||||
$userId,
|
||||
api_get_course_info($course['code']),
|
||||
$sessionId
|
||||
);
|
||||
$learnPaths = $learnPathListObject->get_flat_list();
|
||||
|
||||
if (empty($learnPaths)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$stars = 0;
|
||||
|
||||
foreach ($learnPaths as $learnPathId => $learnPathInfo) {
|
||||
if (empty($learnPathInfo['seriousgame_mode'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$learnPath = new learnpath(
|
||||
$course['code'],
|
||||
$learnPathId,
|
||||
$userId
|
||||
);
|
||||
|
||||
$stars += $learnPath->getCalculateStars($sessionId);
|
||||
}
|
||||
|
||||
$totalStars += round($stars / count($learnPaths));
|
||||
}
|
||||
|
||||
return round($totalStars / count($courses));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the stars on sessions with gamification mode.
|
||||
*
|
||||
* @param int $userId The user ID
|
||||
* @param int $userStatus The user Status
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public static function getTotalUserStars($userId, $userStatus)
|
||||
{
|
||||
$stars = 0;
|
||||
$sessions = SessionManager::getSessionsFollowedByUser(
|
||||
$userId,
|
||||
$userStatus
|
||||
);
|
||||
|
||||
if (empty($sessions)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
foreach ($sessions as $session) {
|
||||
$stars += self::getSessionStars($session['id'], $userId);
|
||||
}
|
||||
|
||||
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 float
|
||||
*/
|
||||
public static function getTotalUserProgress($userId, $userStatus)
|
||||
{
|
||||
$progress = 0;
|
||||
|
||||
$sessions = SessionManager::getSessionsFollowedByUser(
|
||||
$userId,
|
||||
$userStatus
|
||||
);
|
||||
|
||||
if (empty($sessions)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
foreach ($sessions as $session) {
|
||||
$progress += self::getSessionProgress($session['id'], $userId);
|
||||
}
|
||||
|
||||
return round($progress / count($sessions), 2);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user