AND UMP.`user_id` = ?d"; $row = Database::get()->querySingle($sql, $_SESSION['path_id'], $_SESSION['lp_module_id'], $uid); $scormSessionTime = seconds_to_scorm_time($timeToCompleteExe); // build sql query $sqlupd = "UPDATE `lp_user_module_progress` SET "; // if recorded score is less then the new score => update raw, credit and status if ($row->raw < $totalScore) { // update raw $sqlupd .= "`raw` = $totalScore,"; // update credit and status if needed ( score is better than raw_to_pass ) if ($newRaw >= $row->raw_to_pass) { $sqlupd .= "`credit` = 'CREDIT',`lesson_status` = 'PASSED',"; } else { // minimum raw to pass needed to get credit $sqlupd .= "`credit` = 'NO-CREDIT',`lesson_status` = 'FAILED',"; } }// else don't change raw, credit and lesson_status // default query statements $sqlupd .= " `scoreMin` = ?d, `scoreMax` = ?d, `total_time` = ?s, `session_time` = ?s WHERE `learnPath_module_id` = ?d AND `user_id` = ?d"; Database::get()->query($sqlupd, $scoreMin, $scoreMax, addScormTime($row->total_time, $scormSessionTime), $scormSessionTime, $row->learnPath_module_id, $uid); } echo "</div></body></html>" . "\n";
if ($lesson_status_value == "COMPLETED" || $lesson_status_value == "PASSED") { if (strtoupper($_POST['credit']) == "CREDIT") { $credit_value = "CREDIT"; } } //set maxScore to 100 if the SCO didn't change it itself, but gave raw if (isset($raw_value) && isset($scoreMax_value) && $raw_value > 0 && $raw_value <= 100 && $scoreMax_value == 0) { $scoreMax_value = 100; } if (isScorm2004Time($_POST['session_time'])) { $total_time_value = addScorm2004Time($_POST['total_time'], $_POST['session_time']); $session_time_formatted = addScorm2004Time("0000:00:00.00", $_POST['session_time']); } else if (isScormTime($_POST['session_time'])) { $total_time_value = addScormTime($_POST['total_time'], $_POST['session_time']); $session_time_formatted = $_POST['session_time']; } else { $total_time_value = $_POST['total_time']; } $sql = "UPDATE `lp_user_module_progress` SET `lesson_location` = ?s, `lesson_status` = ?s, `entry` = ?s, `raw` = ?d, `scoreMin` = ?d, `scoreMax` = ?d, `total_time` = ?s, `session_time` = ?s,
$moduleImg = 'fa-info-circle'; } elseif ($module['contentType'] == CTMEDIA_ or $module['contentType'] == CTMEDIALINK_) { $moduleImg = 'fa-film'; } else { $moduleImg = choose_image(basename($module['path'])); } $contentType_alt = selectAlt($module['contentType']); $tool_content .= icon($moduleImg, $contentType_alt) . q($module['name']) . '</small>'; } $tool_content .= '</td>' . "\n"; if ($module['contentType'] == CTSCORM_) { $session_time = preg_replace("/\.[0-9]{0,2}/", "", $module['session_time']); $total_time = preg_replace("/\.[0-9]{0,2}/", "", $module['total_time']); $global_time = addScormTime($global_time, $total_time); } elseif ($module['contentType'] == CTLABEL_ || $module['contentType'] == CTEXERCISE_) { $session_time = $module['session_time']; $total_time = $module['total_time']; } else { // if no progression has been recorded for this module // leave if ($module['lesson_status'] == "") { $session_time = " "; $total_time = " "; } else { // columns are n/a $session_time = "-"; $total_time = "-"; } } //-- session_time
function set_learning_path_progression($totalResult, $totalGrade, $timeToCompleteExe, $_uid) { $tbl_cdb_names = get_module_course_tbl(array('lp_rel_learnPath_module', 'lp_user_module_progress'), claro_get_current_course_id()); $tbl_lp_rel_learnPath_module = $tbl_cdb_names['lp_rel_learnPath_module']; $tbl_lp_user_module_progress = $tbl_cdb_names['lp_user_module_progress']; // update raw in DB to keep the best one, so update only if new raw is better AND if user NOT anonymous if ($_uid) { // exercices can have a negative score, but we don't accept that in LP // so if totalScore is negative use 0 as result $totalResult = max($totalResult, 0); if ($totalGrade != 0) { $newRaw = @round($totalResult / $totalGrade * 100); } else { $newRaw = 0; } $scoreMin = 0; $scoreMax = $totalGrade; $scormSessionTime = seconds_to_scorm_time($timeToCompleteExe); // need learningPath_module_id and raw_to_pass value $sql = "SELECT LPM.`raw_to_pass`, LPM.`learnPath_module_id`, UMP.`total_time`, UMP.`raw`\n FROM `" . $tbl_lp_rel_learnPath_module . "` AS LPM, `" . $tbl_lp_user_module_progress . "` AS UMP\n WHERE LPM.`learnPath_id` = '" . (int) $_SESSION['path_id'] . "'\n AND LPM.`module_id` = '" . (int) $_SESSION['module_id'] . "'\n AND LPM.`learnPath_module_id` = UMP.`learnPath_module_id`\n AND UMP.`user_id` = " . (int) $_uid; $lastProgression = claro_sql_query_get_single_row($sql); if ($lastProgression) { // build sql query $sql = "UPDATE `" . $tbl_lp_user_module_progress . "` SET "; // if recorded score is more than the new score => update raw, credit and status if ($lastProgression['raw'] < $totalResult) { // update raw $sql .= "`raw` = " . $totalResult . ","; // update credit and statut if needed ( score is better than raw_to_pass ) if ($newRaw >= $lastProgression['raw_to_pass']) { $sql .= " `credit` = 'CREDIT',\n `lesson_status` = 'PASSED',"; } else { $sql .= " `credit` = 'NO-CREDIT',\n `lesson_status` = 'FAILED',"; } } // else don't change raw, credit and lesson_status // default query statements $sql .= " `scoreMin` = " . (int) $scoreMin . ",\n `scoreMax` = " . (int) $scoreMax . ",\n `total_time` = '" . addScormTime($lastProgression['total_time'], $scormSessionTime) . "',\n `session_time` = '" . $scormSessionTime . "'\n WHERE `learnPath_module_id` = " . (int) $lastProgression['learnPath_module_id'] . "\n AND `user_id` = " . (int) $_uid . ""; // Generate an event to notify that the exercise has been completed $learnPathEventArgs = array('userId' => (int) $_uid, 'courseCode' => claro_get_current_course_id(), 'scoreRaw' => (int) $totalResult, 'scoreMin' => (int) $scoreMin, 'scoreMax' => (int) $scoreMax, 'sessionTime' => $scormSessionTime, 'learnPathModuleId' => (int) $lastProgression['learnPath_module_id'], 'type' => "update"); if ($newRaw >= $lastProgression['raw_to_pass']) { $learnPathEventArgs['status'] = "PASSED"; } else { $learnPathEventArgs['status'] = "FAILED"; } $learnPathEvent = new Event('lp_user_module_progress_modified', $learnPathEventArgs); EventManager::notify($learnPathEvent); return claro_sql_query($sql); } else { return false; } } }