diff --git a/main/exercice/exercice_submit.php b/main/exercice/exercice_submit.php
index 6779804469..7bc3416173 100755
--- a/main/exercice/exercice_submit.php
+++ b/main/exercice/exercice_submit.php
@@ -166,6 +166,9 @@ if ($origin == 'builder') {
}
}
+$course_code = api_get_course_id();
+$session_id = api_get_session_id();
+
$safe_lp_id = ($learnpath_id == '') ? 0 : (int) $learnpath_id;
$safe_lp_item_id = ($learnpath_item_id == '') ? 0 : (int) $learnpath_item_id;
$condition = ' WHERE ' .
@@ -175,7 +178,7 @@ $condition = ' WHERE ' .
'status = ' . "'incomplete'" . ' AND ' .
'orig_lp_id = ' . "'" . $safe_lp_id . "'" . ' AND ' .
'orig_lp_item_id = ' . "'" . $safe_lp_item_id . "'" . ' AND ' .
- 'session_id = ' . "'" . (int) $_SESSION['id_session'] . "'";
+ 'session_id = ' . "'" . (int) $session_id . "'";
$TBL_EXERCICES = Database :: get_course_table(TABLE_QUIZ_TEST);
$sql_track_exercice = "SELECT type,feedback_type,expired_time FROM $TBL_EXERCICES WHERE id=$exerciseId";
@@ -196,9 +199,11 @@ $total_minutes = $exercise_row["expired_time"];
$total_seconds = $total_minutes*60;
$current_timestamp = time();
+$current_expired_time_key = $course_code.'_'.$session_id.'_'.$exerciseId;
+
//Disable for learning path
if ($exercise_row['expired_time'] != 0 && $origin != 'learnpath') {
- if (!isset($_SESSION['expired_time'])) {
+ if (!isset($_SESSION['expired_time'][$current_expired_time_key])) {
//In case that the current session php is broken
//Timer - Get expired_time for a student
$condition = ' WHERE ' .
@@ -206,7 +211,7 @@ if ($exercise_row['expired_time'] != 0 && $origin != 'learnpath') {
'exe_user_id = '."'".api_get_user_id()."'".' AND ' .
'exe_cours_id = '."'".api_get_course_id()."'".' AND ' .
'status = '."'incomplete'".' AND '.
- 'session_id = '."'".api_get_session_id()."'";
+ 'session_id = '."'".$session_id."'";
$sql_track = 'SELECT exe_id,expired_time_control FROM '.$stat_table.$condition;
$rs_sql = Database::query($sql_track,__FILE__,__LINE__);
@@ -244,8 +249,8 @@ if ($exercise_row['expired_time'] != 0 && $origin != 'learnpath') {
Database::query($sql_track_e_exe,__FILE__,__LINE__);
//Sessions that contain the expired time
- $_SESSION['expired_time'] = $clock_expired_time;
- $_SESSION['end_expired_time'] = date('M d, Y H:i:s',$expected_time);
+ $_SESSION['expired_time'][$current_expired_time_key] = $clock_expired_time;
+ $_SESSION['end_expired_time'][$current_expired_time_key] = date('M d, Y H:i:s',$expected_time);
} else {
$expected_time = $current_timestamp + $total_seconds;
@@ -253,12 +258,12 @@ if ($exercise_row['expired_time'] != 0 && $origin != 'learnpath') {
$clock_expired_time = date('Y-m-d H:i:s',$expected_time);
//Sessions that contain the expired time
- $_SESSION['expired_time'] = $clock_expired_time;
- $_SESSION['end_expired_time'] = date('M d, Y H:i:s',$expected_time);
+ $_SESSION['expired_time'][$current_expired_time_key] = $clock_expired_time;
+ $_SESSION['end_expired_time'][$current_expired_time_key] = date('M d, Y H:i:s',$expected_time);
}
} else {
- $plugin_expired_time = $_SESSION['end_expired_time'];
+ $plugin_expired_time = $_SESSION['end_expired_time'][$current_expired_time_key];
}
}
@@ -743,8 +748,8 @@ if ($formSent) {
//Verify if the current test is fraudulent
$current_time = time();
- if (isset($_SESSION['expired_time']) && $exercise_row['expired_time'] != 0) {
- $expired_date = $_SESSION['expired_time'];
+ if (isset($_SESSION['expired_time'][$current_expired_time_key]) && $exercise_row['expired_time'][$exerciseId] != 0) {
+ $expired_date = $_SESSION['expired_time'][$current_expired_time_key];
$expired_time = strtotime($expired_date);
//Validation in case of fraud
@@ -1040,13 +1045,12 @@ echo "
" . $exerciseTitle . "
";
if ($exerciseAttempts > 0) {
$user_id = api_get_user_id();
- $course_code = api_get_course_id();
$sql = "SELECT count(*) FROM $stat_table WHERE exe_exo_id = '$quizID'
AND exe_user_id = '$user_id'
AND status != 'incomplete'
AND orig_lp_id = $safe_lp_id
AND orig_lp_item_id = $safe_lp_item_id
- AND exe_cours_id = '$course_code' AND session_id = '" . (int) $_SESSION['id_session'] . "'";
+ AND exe_cours_id = '$course_code' AND session_id = '" . (int) $session_id . "'";
$aquery = Database::query($sql, __FILE__, __LINE__);
$attempt = Database :: fetch_array($aquery);
@@ -1248,12 +1252,12 @@ if ($_configuration['live_exercise_tracking'] == true && $exerciseFeedbackType !
if ($exerciseType == ONE_PER_PAGE) {
$sql = "INSERT INTO $stat_table($sql_fields exe_exo_id,exe_user_id,exe_cours_id,status,session_id,data_tracking,start_date,orig_lp_id,orig_lp_item_id)
- VALUES($sql_fields_values '$exerciseId','" . api_get_user_id() . "','" . $_course['id'] . "','incomplete','" . api_get_session_id() . "','" . implode(',', $questionList) . "','" . date('Y-m-d H:i:s') . "',$safe_lp_id,$safe_lp_item_id)";
+ VALUES($sql_fields_values '$exerciseId','" . api_get_user_id() . "','" . $_course['id'] . "','incomplete','" . $session_id . "','" . implode(',', $questionList) . "','" . date('Y-m-d H:i:s') . "',$safe_lp_id,$safe_lp_item_id)";
Database::query($sql, __FILE__, __LINE__);
} else {
echo $sql = "INSERT INTO $stat_table ($sql_fields exe_exo_id,exe_user_id,exe_cours_id,status,session_id,start_date,orig_lp_id,orig_lp_item_id)
- VALUES($sql_fields_values '$exerciseId','" . api_get_user_id() . "','" . $_course['id'] . "','incomplete','" . api_get_session_id() . "','" . date('Y-m-d H:i:s') . "',$safe_lp_id,$safe_lp_item_id)";
+ VALUES($sql_fields_values '$exerciseId','" . api_get_user_id() . "','" . $_course['id'] . "','incomplete','" . $session_id . "','" . date('Y-m-d H:i:s') . "',$safe_lp_id,$safe_lp_item_id)";
Database::query($sql, __FILE__, __LINE__);
}
diff --git a/main/exercice/exercise_show.php b/main/exercice/exercise_show.php
index 90d4c36fd6..debb1eabdc 100755
--- a/main/exercice/exercise_show.php
+++ b/main/exercice/exercise_show.php
@@ -95,8 +95,25 @@ $current_attempt = $_SESSION['current_exercice_attempt'][$current_user_id];
//Is fraudulent exercice
$current_time = time();
-if (isset($_SESSION['expired_time'])) { //Only for exercice of type "One page"
- $expired_date = $_SESSION['expired_time'];
+$emailId = $_REQUEST['email'];
+$user_name = $_REQUEST['user'];
+$test = $_REQUEST['test'];
+$dt = $_REQUEST['dt'];
+$marks = $_REQUEST['res'];
+$id = $_REQUEST['id'];
+
+$sql_fb_type='SELECT feedback_type, exercises.id FROM '.$TBL_EXERCICES.' as exercises, '.$TBL_TRACK_EXERCICES.' as track_exercises WHERE exercises.id=track_exercises.exe_exo_id AND track_exercises.exe_id="'.Database::escape_string($id).'"';
+$res_fb_type=Database::query($sql_fb_type,__FILE__,__LINE__);
+$row_fb_type=Database::fetch_row($res_fb_type);
+$feedback_type = $row_fb_type[0];
+$exercise_id = intval($row_fb_type[1]);
+
+$course_code = api_get_course_id();
+$session_id = api_get_session_id();
+$current_expired_time_key = $course_code.'_'.$session_id.'_'.$exercise_id;
+
+if (isset($_SESSION['expired_time'][$current_expired_time_key])) { //Only for exercice of type "One page"
+ $expired_date = $_SESSION['expired_time'][$current_expired_time_key];
$expired_time = strtotime($expired_date);
//Validation in case of fraud
@@ -106,10 +123,11 @@ if (isset($_SESSION['expired_time'])) { //Only for exercice of type "One page"
Database::query($sql_fraud,__FILE__,__LINE__);
}
}
+
//Unset session for clock time
unset($_SESSION['current_exercice_attempt'][$current_user_id]);
-unset($_SESSION['expired_time']);
-unset($_SESSION['end_expired_time']);
+unset($_SESSION['expired_time'][$current_expired_time_key]);
+unset($_SESSION['end_expired_time'][$current_expired_time_key]);
$is_allowedToEdit=api_is_allowed_to_edit(null,true) || $is_courseTutor;
$nameTools=get_lang('CorrectTest');
@@ -157,17 +175,6 @@ if ($origin != 'learnpath') {
} else {
Display::display_reduced_header();
}
-$emailId = $_REQUEST['email'];
-$user_name = $_REQUEST['user'];
-$test = $_REQUEST['test'];
-$dt = $_REQUEST['dt'];
-$marks = $_REQUEST['res'];
-$id = $_REQUEST['id'];
-
-$sql_fb_type='SELECT feedback_type FROM '.$TBL_EXERCICES.' as exercises, '.$TBL_TRACK_EXERCICES.' as track_exercises WHERE exercises.id=track_exercises.exe_exo_id AND track_exercises.exe_id="'.Database::escape_string($id).'"';
-$res_fb_type=Database::query($sql_fb_type,__FILE__,__LINE__);
-$row_fb_type=Database::fetch_row($res_fb_type);
-$feedback_type = $row_fb_type[0];
?>