Save 5 minutes if total time is bigger than session lifetime

See BT#13552
pull/2487/head
jmontoyaa 7 years ago
parent bffe61fe2a
commit e31e926965
  1. 61
      main/lp/learnpathItem.class.php

@ -76,6 +76,7 @@ class learnpathItem
private $last_scorm_session_time = 0;
private $prerequisiteMaxScore;
private $prerequisiteMinScore;
public $oldTotalTime;
/**
* Prepares the learning path item for later launch.
@ -141,6 +142,7 @@ class learnpathItem
$this->max_time_allowed = $row['max_time_allowed'];
$this->setPrerequisiteMaxScore($row['prerequisite_max_score']);
$this->setPrerequisiteMinScore($row['prerequisite_min_score']);
$this->oldTotalTime = 0;
if (isset($row['launch_data'])) {
$this->launch_data = $row['launch_data'];
@ -1786,8 +1788,10 @@ class learnpathItem
}
$this->current_start_time = time();
}
//$this->current_stop_time=time();
if (time() < $this->current_stop_time || $this->current_stop_time == 0) {
if (time() < $this->current_stop_time ||
$this->current_stop_time == 0
) {
if (self::DEBUG > 2) {
error_log(
'learnpathItem::get_total_time() - Current stop time was '
@ -1800,7 +1804,9 @@ class learnpathItem
// might be used in some unknown goal.
$this->current_stop_time = time();
}
$time = $this->current_stop_time - $this->current_start_time;
if ($time < 0) {
if (self::DEBUG > 2) {
error_log(
@ -1810,12 +1816,25 @@ class learnpathItem
}
return 0;
} else {
// Code based from Event::courseLogout
$sessionLifetime = api_get_configuration_value('session_lifetime');
// If session life time too big use 1 hour
if (empty($sessionLifetime) || $sessionLifetime > 86400) {
$sessionLifetime = 3600;
}
$fixedAddedMinute = 5 * 60; // Add only 5 minutes
if ($time > $sessionLifetime) {
if (self::DEBUG > 2) {
error_log("Total time is too big: $time replaced with: $fixedAddedMinute");
}
$time = $fixedAddedMinute;
}
if (self::DEBUG > 2) {
error_log(
'learnpathItem::get_total_time() - Current start time = '.
$this->current_start_time.', current stop time = '.
$this->current_stop_time.' Returning '.$time."-----------\n",
0
'Current start time = '.$this->current_start_time.', current stop time = '.
$this->current_stop_time.' Returning '.$time."-----------\n"
);
}
return $time;
@ -2701,7 +2720,6 @@ class learnpathItem
}
// First check if parameters passed via GET can be saved here
// in case it's a SCORM, we should get:
if ($this->type == 'sco' || $this->type == 'au') {
$status = $this->get_status(true);
if ($this->prevent_reinit == 1 &&
@ -3443,7 +3461,7 @@ class learnpathItem
public function scorm_update_time($total_sec = 0)
{
if (self::DEBUG > 0) {
error_log('Funcion called: scorm_update_time');
error_log('learnpathItem::scorm_update_time()');
error_log("total_sec: $total_sec");
}
@ -3467,7 +3485,7 @@ class learnpathItem
$total_time = $row['total_time'];
}
if (self::DEBUG > 0) {
error_log("total_time: $total_time");
error_log("Original total_time: $total_time");
}
$lp_table = Database::get_course_table(TABLE_LP_MAIN);
@ -3494,6 +3512,11 @@ class learnpathItem
}
}
if (self::DEBUG > 0) {
error_log("accumulate_scorm_time: $accumulateScormTime");
error_log("total_time modified: $total_time");
}
// Step 3 update db only if status != completed, passed, browsed or seriousgamemode not activated
// @todo complete
$case_completed = array(
@ -3645,12 +3668,12 @@ class learnpathItem
$my_status = ' ';
$item_view_table = Database::get_course_table(TABLE_LP_ITEM_VIEW);
$sql = 'SELECT status FROM '.$item_view_table.'
$sql = 'SELECT status, total_time FROM '.$item_view_table.'
WHERE
c_id = ' . $course_id.' AND
lp_item_id="' . $this->db_id.'" AND
lp_view_id="' . $this->view_id.'" AND
view_count="' . $this->get_attempt_id().'" ';
c_id = '.$course_id.' AND
lp_item_id="'.$this->db_id.'" AND
lp_view_id="'.$this->view_id.'" AND
view_count="'.$this->get_attempt_id().'" ';
$rs_verified = Database::query($sql);
$row_verified = Database::fetch_array($rs_verified);
@ -3661,8 +3684,10 @@ class learnpathItem
'failed'
);
$save = true;
$oldTotalTime = $row_verified['total_time'];
$this->oldTotalTime = $oldTotalTime;
$save = true;
if (isset($row_verified) && isset($row_verified['status'])) {
if (in_array($row_verified['status'], $my_case_completed)) {
$save = false;
@ -3671,7 +3696,7 @@ class learnpathItem
if ((($save === false && $this->type == 'sco') ||
($this->type == 'sco' && ($credit == 'no-credit' || $mode == 'review' || $mode == 'browse'))) &&
($this->seriousgame_mode != 1 && $this->type == 'sco')
($this->seriousgame_mode != 1 && $this->type == 'sco')
) {
if (self::DEBUG > 1) {
error_log(
@ -3686,7 +3711,6 @@ class learnpathItem
} else {
// Check the row exists.
$inserted = false;
// This a special case for multiple attempts and Chamilo exercises.
if ($this->type == 'quiz' &&
$this->get_prevent_reinit() == 0 &&
@ -3764,7 +3788,6 @@ class learnpathItem
}
$this->db_item_view_id = Database::insert($item_view_table, $params);
if ($this->db_item_view_id) {
$sql = "UPDATE $item_view_table SET id = iid
WHERE iid = ".$this->db_item_view_id;
@ -3902,7 +3925,7 @@ class learnpathItem
$my_status = '';
$total_time = '';
} else {
$total_time = " total_time = total_time +".$this->get_total_time().", ";
$total_time = " total_time = total_time + ".$this->get_total_time().", ";
}
}
}

Loading…
Cancel
Save