fixed expired time when you are inside several exercises - CT#555

skala
Cristian Fasanando 16 years ago
parent 2b007385b6
commit 2a22537d76
  1. 32
      main/exercice/exercice_submit.php
  2. 37
      main/exercice/exercise_show.php
  3. 46
      main/inc/lib/events.lib.inc.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 "<h3>" . $exerciseTitle . "</h3>";
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__);
}

@ -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];
?>
<style type="text/css">

@ -397,11 +397,13 @@ function event_link($link_id)
function update_event_exercice($exeid,$exo_id, $score, $weighting,$session_id,$learnpath_id=0,$learnpath_item_id=0, $duration)
{
if ($exeid!='') {
// Validation in case of fraud with actived control time
if (isset($_SESSION['expired_time'])) { //Only for exercice of type "One page"
$course_code = api_get_course_id();
$current_expired_time_key = $course_code.'_'.$session_id.'_'.$exeid;
if (isset($_SESSION['expired_time'][$current_expired_time_key])) { //Only for exercice of type "One page"
$current_time = time();
$expired_date = $_SESSION['expired_time'];
$expired_date = $_SESSION['expired_time'][$current_expired_time_key];
$expired_time = strtotime($expired_date);
$total_time_allowed = $expired_time + 30;
if ($total_time_allowed < $current_time) {
@ -433,7 +435,7 @@ function update_event_exercice($exeid,$exo_id, $score, $weighting,$session_id,$l
WHERE exe_id = '".Database::escape_string($exeid)."'";
$res = @Database::query($sql,__FILE__,__LINE__);
unset($_SESSION['expired_time']);
unset($_SESSION['expired_time'][$current_expired_time_key]);
return $res;
} else
return false;
@ -450,6 +452,7 @@ function create_event_exercice($exo_id)
{
global $_user, $_cid, $_configuration;
$TABLETRACK_EXERCICES = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
$TBL_EXERCICES = Database::get_course_table(TABLE_QUIZ);
$reallyNow = time();
if (isset($_user['user_id']) && $_user['user_id']!='') {
$user_id = "'".$_user['user_id']."'";
@ -469,8 +472,19 @@ function create_event_exercice($exo_id)
$row = Database::fetch_array($sql);
return $row['exe_id'];
}
if (isset($_SESSION['expired_time'])) { //Only for exercice of type "One page"
$expired_date = $_SESSION['expired_time'];
// get exercise id
$sql_exe_id='SELECT exercises.id FROM '.$TBL_EXERCICES.' as exercises, '.$TABLETRACK_EXERCICES.' as track_exercises WHERE exercises.id=track_exercises.exe_exo_id AND track_exercises.exe_id="'.Database::escape_string($exo_id).'"';
$res_exe_id=Database::query($sql_exe_id,__FILE__,__LINE__);
$row_exe_id=Database::fetch_row($res_exe_id);
$exercise_id = intval($row_exe_id[0]);
// get expired_date
$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];
} else {
$expired_date = '0000-00-00 00:00:00';
}
@ -504,10 +518,13 @@ function exercise_attempt($score,$answer,$quesId,$exeId,$j)
global $_configuration, $_user, $_cid;
$TBL_TRACK_ATTEMPT = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
//Validation in case of fraud with actived control time
if (isset($_SESSION['expired_time'])) { //Only for exercice of type "One page"
//Validation in case of fraud with actived control time
$course_code = api_get_course_id();
$session_id = api_get_session_id();
$current_expired_time_key = $course_code.'_'.$session_id.'_'.$exeId;
if (isset($_SESSION['expired_time'][$current_expired_time_key])) { //Only for exercice of type "One page"
$current_time = time();
$expired_date = $_SESSION['expired_time'];
$expired_date = $_SESSION['expired_time'][$current_expired_time_key];
$expired_time = strtotime($expired_date);
$total_time_allowed = $expired_time + 30;
if ($total_time_allowed < $current_time) {
@ -593,10 +610,15 @@ function exercise_attempt_hotspot($exe_id, $question_id, $answer_id, $correct, $
return 0;
}
//Validation in case of fraud with actived control time
if (isset($_SESSION['expired_time'])) { //Only for exercice of type "One page"
//Validation in case of fraud with actived control time
$course_code = api_get_course_id();
$session_id = api_get_session_id();
$current_expired_time_key = $course_code.'_'.$session_id.'_'.$exe_id;
if (isset($_SESSION['expired_time'][$current_expired_time_key])) { //Only for exercice of type "One page"
$current_time = time();
$expired_date = $_SESSION['expired_time'];
$expired_date = $_SESSION['expired_time'][$current_expired_time_key];
$expired_time = strtotime($expired_date);
$total_time_allowed = $expired_time + 30;
if ($total_time_allowed < $current_time) {

Loading…
Cancel
Save