|
|
|
@ -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; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|