diff --git a/main/inc/lib/banner.lib.php b/main/inc/lib/banner.lib.php index 77b5181af2..9b2053004d 100755 --- a/main/inc/lib/banner.lib.php +++ b/main/inc/lib/banner.lib.php @@ -215,6 +215,7 @@ function returnNotificationMenu() } $user_id = api_get_user_id(); + $sessionId = api_get_session_id(); $html = ''; @@ -250,11 +251,15 @@ function returnNotificationMenu() .' '.$number_online_in_course.' '; } - if (isset($user_id) && api_get_session_id() != 0) { + + if (isset($user_id) && $sessionId != 0) { + $numberOnlineInSession = getOnlineUsersInSessionCount($sessionId); + $html .= '
  • ' .Display::return_icon('session.png', get_lang('UsersConnectedToMySessions'), array(), ICON_SIZE_TINY) + .' '.$numberOnlineInSession .'
  • '; } } @@ -887,3 +892,38 @@ function getOnlineUsersInCourseCount($userId, $_course) return $numberOnlineInCourse; } + +/** + * Helper function to get the number of users online in a session, using cache if available + * @param int $sessionId The session ID + * @return int The number of users currently online + */ +function getOnlineUsersInSessionCount($sessionId) +{ + $cacheAvailable = api_get_configuration_value('apc'); + + if (!$sessionId) { + return 0; + } + + if ($cacheAvailable === true) { + $apcVar = api_get_configuration_value('apc_prefix').'my_campus_whoisonline_session_count_simple_'.$sessionId; + + if (apcu_exists($apcVar)) { + return apcu_fetch($apcVar); + } + + $numberOnlineInCourse = whoIsOnlineInIhisSessionCount( + api_get_setting('time_limit_whosonline'), + $sessionId + ); + apcu_store($apcVar, $numberOnlineInCourse, 15); + + return $numberOnlineInCourse; + } + + return whoIsOnlineInIhisSessionCount( + api_get_setting('time_limit_whosonline'), + $sessionId + ); +} diff --git a/main/inc/lib/online.inc.php b/main/inc/lib/online.inc.php index 5532823063..166fcad830 100755 --- a/main/inc/lib/online.inc.php +++ b/main/inc/lib/online.inc.php @@ -461,6 +461,38 @@ function who_is_online_in_this_course_count($uid, $time_limit, $coursecode = nul } } +/** + * @param string $timeLimit + * @param int $sessionId + * @return bool + * @internal param int $uid + */ +function whoIsOnlineInIhisSessionCount($timeLimit, $sessionId) +{ + if (!$sessionId) { + return 0; + } + + $tblTrackOnline = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ONLINE); + $timeLimit = Database::escape_string($timeLimit); + + $online_time = time() - $timeLimit * 60; + $current_date = api_get_utc_datetime($online_time); + + $query = "SELECT count(login_user_id) as count + FROM $tblTrackOnline + WHERE login_user_id <> 2 AND session_id = $sessionId AND login_date >= '$current_date' "; + $result = Database::query($query); + + if (Database::num_rows($result) > 0) { + $row = Database::fetch_assoc($result); + + return $row['count']; + } + + return 0; +} + /** * Register the logout of the course (usually when logging out of the platform) * from the track_e_course_access table