} else { $newRaw = 0; } $scoreMin = 0; $scoreMax = $totalWeighting; // need learningPath_module_id and raw_to_pass value $sql = "SELECT LPM.`raw_to_pass`, LPM.`learnPath_module_id`, UMP.`total_time`, UMP.`raw` FROM `lp_rel_learnPath_module` AS LPM, `lp_user_module_progress` AS UMP WHERE LPM.`learnPath_id` = ?d AND LPM.`module_id` = ?d AND LPM.`learnPath_module_id` = UMP.`learnPath_module_id` 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
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; } } }