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