Example #1
0
    } 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
Example #2
0
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;
        }
    }
}