From 0123998ca97d5e1b79bdf32c1e7cf3549715c84a Mon Sep 17 00:00:00 2001 From: jmontoyaa Date: Thu, 5 May 2016 10:10:54 +0200 Subject: [PATCH] Fix logout course time see BT#11177 --- main/inc/local.inc.php | 110 ++++++++++++++++++++--------------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/main/inc/local.inc.php b/main/inc/local.inc.php index 94a1c77152..e5d1b76d45 100755 --- a/main/inc/local.inc.php +++ b/main/inc/local.inc.php @@ -835,8 +835,62 @@ if (isset($uidReset) && $uidReset) { $is_allowedCreateCourse = isset($_SESSION['is_allowedCreateCourse']) ? $_SESSION['is_allowedCreateCourse'] : false; } -/* COURSE INIT */ +if (!isset($_SESSION['login_as'])) { + $save_course_access = true; + $_course = Session::read('_course'); + //The value $_dont_save_user_course_access should be added before the call of global.inc.php see the main/inc/chat.ajax.php file + //Disables the updates in the TRACK_E_COURSE_ACCESS table + if (isset($_dont_save_user_course_access) && $_dont_save_user_course_access == true) { + $save_course_access = false; + } + + if ($save_course_access) { + $course_tracking_table = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS); + + /* + * When $_configuration['session_lifetime'] is too big 100 hours (in order to let users take exercises with no problems) + * the function Tracking::get_time_spent_on_the_course() returns big values (200h) due the condition: + * login_course_date > now() - INTERVAL $session_lifetime SECOND + * + */ + /* + if (isset($_configuration['session_lifetime'])) { + $session_lifetime = $_configuration['session_lifetime']; + } else { + $session_lifetime = 3600; // 1 hour + }*/ + + $session_lifetime = 3600; // 1 hour + $course_code = $_course['sysCode']; + $time = api_get_utc_datetime(); + + if (isset($_user['user_id']) && !empty($_user['user_id'])) { + + //We select the last record for the current course in the course tracking table + //But only if the login date is < than now + max_life_time + $sql = "SELECT course_access_id FROM $course_tracking_table + WHERE user_id = ".intval($_user ['user_id'])." AND + course_code = '$course_code' AND + session_id = ".api_get_session_id()." AND + login_course_date > '$time' - INTERVAL $session_lifetime SECOND + ORDER BY login_course_date DESC LIMIT 0,1"; + $result = Database::query($sql); + if (Database::num_rows($result) > 0) { + $i_course_access_id = Database::result($result, 0, 0); + //We update the course tracking table + $sql = "UPDATE $course_tracking_table SET logout_course_date = '$time', counter = counter+1 + WHERE course_access_id = ".intval($i_course_access_id)." AND session_id = ".api_get_session_id(); + Database::query($sql); + } else { + $sql="INSERT INTO $course_tracking_table (course_code, user_id, login_course_date, logout_course_date, counter, session_id)" . + "VALUES('".$course_code."', '".$_user['user_id']."', '$time', '$time', '1','".api_get_session_id()."')"; + Database::query($sql); + } + } + } +} +/* COURSE INIT */ if (isset($cidReset) && $cidReset) { // Course session data refresh requested or empty data if ($cidReq) { @@ -964,61 +1018,7 @@ if (isset($cidReset) && $cidReset) { } } - if (!isset($_SESSION['login_as'])) { - $save_course_access = true; - - //The value $_dont_save_user_course_access should be added before the call of global.inc.php see the main/inc/chat.ajax.php file - //Disables the updates in the TRACK_E_COURSE_ACCESS table - if (isset($_dont_save_user_course_access) && $_dont_save_user_course_access == true) { - $save_course_access = false; - } - - if ($save_course_access) { - $course_tracking_table = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS); - /* - * When $_configuration['session_lifetime'] is too big 100 hours (in order to let users take exercises with no problems) - * the function Tracking::get_time_spent_on_the_course() returns big values (200h) due the condition: - * login_course_date > now() - INTERVAL $session_lifetime SECOND - * - */ - /* - if (isset($_configuration['session_lifetime'])) { - $session_lifetime = $_configuration['session_lifetime']; - } else { - $session_lifetime = 3600; // 1 hour - }*/ - - $session_lifetime = 3600; // 1 hour - - $course_code = $_course['sysCode']; - $time = api_get_utc_datetime(); - - if (isset($_user['user_id']) && !empty($_user['user_id'])) { - - //We select the last record for the current course in the course tracking table - //But only if the login date is < than now + max_life_time - $sql = "SELECT course_access_id FROM $course_tracking_table - WHERE user_id = ".intval($_user ['user_id'])." AND - course_code = '$course_code' AND - session_id = ".api_get_session_id()." AND - login_course_date > '$time' - INTERVAL $session_lifetime SECOND - ORDER BY login_course_date DESC LIMIT 0,1"; - $result = Database::query($sql); - if (Database::num_rows($result) > 0) { - $i_course_access_id = Database::result($result, 0, 0); - //We update the course tracking table - $sql = "UPDATE $course_tracking_table SET logout_course_date = '$time', counter = counter+1 - WHERE course_access_id = ".intval($i_course_access_id)." AND session_id = ".api_get_session_id(); - Database::query($sql); - } else { - $sql="INSERT INTO $course_tracking_table (course_code, user_id, login_course_date, logout_course_date, counter, session_id)" . - "VALUES('".$course_code."', '".$_user['user_id']."', '$time', '$time', '1','".api_get_session_id()."')"; - Database::query($sql); - } - } - } - } } }