Преглед на файлове

Trying to get rid of platform and course time tracking issues.

jkbockstael преди 15 години
родител
ревизия
79c8a9fee9
променени са 4 файла, в които са добавени 40 реда и са изтрити 5 реда
  1. 11 0
      main/inc/global.inc.php
  2. 7 3
      main/inc/lib/events.lib.inc.php
  3. 5 0
      main/inc/lib/main_api.lib.php
  4. 17 2
      main/inc/local.inc.php

+ 11 - 0
main/inc/global.inc.php

@@ -499,6 +499,17 @@ if ($_configuration['tracking_enabled'] && !isset($_SESSION['login_as']) && isse
 	$q_last_connection = Database::query($sql_last_connection);
 	if (Database::num_rows($q_last_connection) > 0) {
 		$i_id_last_connection = Database::result($q_last_connection, 0, 'login_id');
+        // jeankarim@cblue.be -- is the latest logout_date still relevant?
+        $sql_logout_date = "SELECT logout_date FROM $tbl_track_login WHERE login_id=$i_id_last_connection";
+        $q_logout_date = Database::query($sql_logout_date);
+        $res_logout_date = convert_mysql_date(Database::result($q_logout_date,0,'logout_date'));
+        if ($res_logout_date < time() - $_configuration['session_lifetime']) {
+            // it isn't, we should create a fresh entry
+            event_login();
+            // now that it's created, we can get its ID and carry on
+	        $q_last_connection = Database::query($sql_last_connection);
+		    $i_id_last_connection = Database::result($q_last_connection, 0, 'login_id');
+            }
 		$s_sql_update_logout_date = "UPDATE $tbl_track_login SET logout_date=NOW() WHERE login_id='$i_id_last_connection'";
 		Database::query($s_sql_update_logout_date);
 	}

+ 7 - 3
main/inc/lib/events.lib.inc.php

@@ -100,15 +100,19 @@ function event_login()
 		return 0;
 	}
 	$reallyNow = time();
+    // jeankarim@cblue.be -- making sure that logout_date doesn't stay at its default NULL value
 	$sql = "INSERT INTO ".$TABLETRACK_LOGIN."
 				(login_user_id,
 				 login_ip,
-				 login_date)
+				 login_date,
+                 logout_date)
 				 VALUES
 					('".$_user['user_id']."',
 					'".Database::escape_string($_SERVER['REMOTE_ADDR'])."',
-					FROM_UNIXTIME(".$reallyNow."))";
-	$res = Database::query($sql,__FILE__,__LINE__);
+					FROM_UNIXTIME(".$reallyNow."),
+                    FROM_UNIXTIME(".$reallyNow."))";
+	
+    $res = Database::query($sql,__FILE__,__LINE__);
 }
 
 /**

+ 5 - 0
main/inc/lib/main_api.lib.php

@@ -1025,6 +1025,11 @@ function api_session_start($already_installed = true) {
 			api_session_clear();
 		}
 	}
+
+    // jeankarim@cblue.be -- Keeping track of session startdates and cleaning startdates on old sessions that should have expired
+    if ( isset($_SESSION['starttime']) && $SESSION['starttime'] < time() - $_configuration['session_lifetime'] ) {
+        $_SESSION['starttime'] = time();
+        }
 }
 
 /**

+ 17 - 2
main/inc/local.inc.php

@@ -856,11 +856,26 @@ if (isset($cidReset) && $cidReset) { // course session data refresh requested or
        	    $course_tracking_table = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
             $time = api_get_datetime();
 	   		//We select the last record for the current course in the course tracking table
-	   		$sql="SELECT course_access_id FROM $course_tracking_table WHERE user_id=".intval($_user ['user_id'])." ORDER BY login_course_date DESC LIMIT 0,1";
+            // jeankarim@cblue.be -- More restrictive SELECT, to make sure we're updating for the right course
+	   		$sql="SELECT course_access_id FROM $course_tracking_table WHERE user_id=".intval($_user ['user_id'])." AND course_code=".$_course['sysCode']." ORDER BY login_course_date DESC LIMIT 0,1";
 	   		$result=Database::query($sql,__FILE__,__LINE__);
 	   		if (Database::num_rows($result)>0) {
 		   		$i_course_access_id = Database::result($result,0,0);
+                // jeankarim@cblue.be -- Is the latest logout_date still relevant?
+                $sql_logout_date = "SELECT logout_date FROM $course_tracking_table WHERE user_id=".$_user['user_id']." AND course_code=".$_course['sysCode']." ORDER BY course_access_id DESC LIMIT 0,1";
+                $q_logout_date = Database::query($sql_logout_date);
+                $res_logout_date = convert_mysql_date(database::results($q_logout_date,0,'logout_date'));
+                if ($res_logout_date < time() - $_configuration['session_lifetime']) {
+                    // looks like it isn't, we should create a fresh entry
+		            $sql="INSERT INTO $course_tracking_table(course_code, user_id, login_course_date, logout_course_date, counter)" .
+							"VALUES('".$_course['sysCode']."', '".$_user['user_id']."', '$time', '$time', '1')";
 
+				    Database::query($sql,__FILE__,__LINE__);
+                    // now that it's created, we can get its ID and carry on
+                    $sql="SELECT course_access_id FROM $course_tracking_table WHERE user_id=".intval($_user ['user_id'])." AND course_code=     ".$_course['sysCode']." ORDER BY course_access_id DESC LIMIT 0,1";
+                    $result=Database::query($sql,__FILE__,__LINE__);
+                    $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', " .
@@ -1147,4 +1162,4 @@ if (isset($_cid)) {
     $time = api_get_datetime();
 	$sql="UPDATE $tbl_course SET last_visit= '$time' WHERE code='$_cid'";
 	Database::query($sql,__FILE__,__LINE__);
-}
+}