From 04d30c87d98bdfa90d2fb1bc3966c7d94e253bb9 Mon Sep 17 00:00:00 2001 From: jmontoyaa Date: Fri, 6 Apr 2018 10:56:05 +0200 Subject: [PATCH] Fix wrong duration time when doing an exercise inside a LP see BT#14149 Changes come from ofaj_dev branch: - Fix firefox issue when loading events during "unload" - Add ajax call to save exercise duration when page unload - --- main/exercise/exercise.php | 2 + main/exercise/exercise_result.php | 4 + main/exercise/exercise_submit.php | 87 ++++++++++---- main/exercise/fill_blanks.class.php | 1 - main/exercise/overview.php | 2 + main/inc/ajax/exercise.ajax.php | 140 +++++++++++++++++++++- main/inc/lib/internationalization.lib.php | 5 +- main/inc/lib/tracking.lib.php | 5 +- main/lp/learnpath.class.php | 18 +-- main/lp/learnpathItem.class.php | 9 ++ main/lp/lp_edit_item_prereq.php | 1 + main/lp/lp_list.php | 6 + main/lp/lp_view.php | 2 + main/session/index.php | 2 + 14 files changed, 240 insertions(+), 44 deletions(-) diff --git a/main/exercise/exercise.php b/main/exercise/exercise.php index f119297eaa..f580f9cfbd 100644 --- a/main/exercise/exercise.php +++ b/main/exercise/exercise.php @@ -73,6 +73,8 @@ Session::erase('questionList'); Session::erase('exerciseResult'); Session::erase('firstTime'); Session::erase('calculatedAnswerId'); +Session::erase('duration_time_previous'); +Session::erase('duration_time'); //General POST/GET/SESSION/COOKIES parameters recovery $origin = api_get_origin(); diff --git a/main/exercise/exercise_result.php b/main/exercise/exercise_result.php index 11be70fa31..ed8355d9d1 100755 --- a/main/exercise/exercise_result.php +++ b/main/exercise/exercise_result.php @@ -202,6 +202,8 @@ if ($origin != 'learnpath') { Session::erase('objExercise'); Session::erase('exe_id'); Session::erase('calculatedAnswerId'); + Session::erase('duration_time_previous'); + Session::erase('duration_time'); } Display::display_footer(); } else { @@ -213,6 +215,8 @@ if ($origin != 'learnpath') { Session::erase('objExercise'); Session::erase('exe_id'); Session::erase('calculatedAnswerId'); + Session::erase('duration_time_previous'); + Session::erase('duration_time'); } Session::write('attempt_remaining', $remainingMessage); diff --git a/main/exercise/exercise_submit.php b/main/exercise/exercise_submit.php index 9f7c6eae71..89bffacfec 100755 --- a/main/exercise/exercise_submit.php +++ b/main/exercise/exercise_submit.php @@ -186,7 +186,15 @@ $current_expired_time_key = ExerciseLib::get_time_control_key( $learnpath_item_id ); -$_SESSION['duration_time'][$current_expired_time_key] = $current_timestamp; +Session::write('duration_time_previous', [$current_expired_time_key => $current_timestamp]); +$durationTime = Session::read('duration_time'); +if (!empty($durationTime) && isset($durationTime[$current_expired_time_key])) { + Session::write( + 'duration_time_previous', + [$current_expired_time_key => $durationTime[$current_expired_time_key]] + ); +} +Session::write('duration_time', [$current_expired_time_key => $current_timestamp]); if ($time_control) { // Get the expired time of the current exercise in track_e_exercises @@ -412,6 +420,7 @@ if (empty($exercise_stat_info)) { } } +$saveDurationUrl = api_get_path(WEB_AJAX_PATH).'exercise.ajax.php?a=update_duration&exe_id='.$exe_id.'&'.api_get_cidreq(); $questionListInSession = Session::read('questionList'); if (!isset($questionListInSession)) { @@ -1032,18 +1041,49 @@ if (!empty($error)) { $onsubmit = "onsubmit=\"return validateFlashVar('".$number_of_hotspot_questions."', '".get_lang('HotspotValidateError1')."', '".get_lang('HotspotValidateError2')."');\""; } + $saveIcon = Display::return_icon( + 'save.png', + get_lang('Saved'), + [], + ICON_SIZE_SMALL, + false, + true + ); + echo '