Update course user session tracking every 5 minutes see BT#13267

pull/2487/head
jmontoyaa 8 years ago
parent efd26b0365
commit e6b7eb95c3
  1. 106
      main/inc/lib/events.lib.php
  2. 8
      main/inc/lib/login.lib.php
  3. 8
      main/inc/local.inc.php

@ -2,6 +2,7 @@
/* See license terms in /license.txt */
//use Chamilo\UserBundle\Entity\User;
use ChamiloSession as Session;
use Chamilo\CoreBundle\Component\Utils\ChamiloApi;
/**
@ -1803,34 +1804,103 @@ class Event
* Registers in track_e_course_access when user logs in for the first time to a course
* @param int $courseId ID of the course
* @param int $user_id ID of the user
* @param int $session_id ID of the session (if any)
* @param int $sessionId ID of the session (if any)
*
* @return bool
*/
public static function event_course_login($courseId, $user_id, $session_id)
public static function eventCourseLogin($courseId, $user_id, $sessionId)
{
$course_tracking_table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
if (Session::read('login_as')) {
return false;
}
$table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
$loginDate = $logoutDate = api_get_utc_datetime();
//$counter represents the number of time this record has been refreshed
// $counter represents the number of time this record has been refreshed
$counter = 1;
$courseId = intval($courseId);
$user_id = intval($user_id);
$session_id = intval($session_id);
$sessionId = intval($sessionId);
$ip = api_get_real_ip();
$sql = "INSERT INTO $course_tracking_table(c_id, user_ip, user_id, login_course_date, logout_course_date, counter, session_id)
VALUES('".$courseId."', '".$ip."', '".$user_id."', '$loginDate', '$logoutDate', $counter, '".$session_id."')";
Database::query($sql);
$sql = "INSERT INTO $table(c_id, user_ip, user_id, login_course_date, logout_course_date, counter, session_id)
VALUES('".$courseId."', '".$ip."', '".$user_id."', '$loginDate', '$logoutDate', $counter, '".$sessionId."')";
$courseAccessId = Database::query($sql);
// Course catalog stats modifications see #4191
CourseManager::update_course_ranking(
null,
null,
null,
null,
true,
false
);
if ($courseAccessId) {
// Course catalog stats modifications see #4191
CourseManager::update_course_ranking(
null,
null,
null,
null,
true,
false
);
return true;
}
}
/**
* Updates the user - course - session every X minutes
* In order to avoid
* @param int $courseId
* @param int $userId
* @param int $sessionId
* @param int $minutes
*
* @return bool
*/
public static function eventCourseUpdate(
$courseId,
$userId,
$sessionId,
$minutes = 1
) {
if (Session::read('login_as')) {
return false;
}
if (empty($courseId) || empty($userId)) {
return false;
}
$courseId = intval($courseId);
$userId = intval($userId);
$sessionId = intval($sessionId);
$table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
$sql = "SELECT course_access_id, logout_course_date
FROM $table
WHERE
c_id = $courseId AND
session_id = $sessionId AND
user_id = $userId
ORDER BY login_course_date DESC
LIMIT 1";
$result = Database::query($sql);
// Save every 5 minutes by default
$seconds = $minutes * 60;
if (Database::num_rows($result)) {
$row = Database::fetch_array($result);
$id = $row['course_access_id'];
$logout = $row['logout_course_date'];
$now = time();
$logout = api_strtotime($logout, 'UTC');
if ($now - $logout > $seconds) {
$now = api_get_utc_datetime();
$sql = "UPDATE $table SET
logout_course_date = '$now',
counter = counter + 1
WHERE course_access_id = $id";
Database::query($sql);
}
return true;
}
return false;
}
/**

@ -448,9 +448,13 @@ class Login
}
if (!isset($_SESSION['login_as'])) {
//Course login
// Course login
if (isset($_user['user_id'])) {
Event::event_course_login(api_get_course_int_id(), $_user['user_id'], api_get_session_id());
Event::eventCourseLogin(
api_get_course_int_id(),
$_user['user_id'],
api_get_session_id()
);
}
}
} else {

@ -958,7 +958,7 @@ if (isset($cidReset) && $cidReset) {
if (!isset($_SESSION['login_as'])) {
//Course login
if (isset($_user['user_id'])) {
Event::event_course_login(
Event::eventCourseLogin(
api_get_course_int_id(),
api_get_user_id(),
api_get_session_id()
@ -1507,6 +1507,12 @@ if ((isset($cas_login) && $cas_login && exist_firstpage_parameter()) ||
}
}
Event::eventCourseUpdate(
api_get_course_int_id(),
api_get_user_id(),
api_get_session_id()
);
Redirect::session_request_uri($logging_in, $user_id);
if (!ChamiloApi::isAjaxRequest() && api_get_configuration_value('allow_mandatory_survey')) {

Loading…
Cancel
Save