mirror of
https://github.com/moodle/moodle.git
synced 2025-08-07 01:46:45 +02:00
MDL-43222 SCORM: correct check for list of attempts and make correct check for current attempt in scorm_get_toc
This commit is contained in:
parent
8a0667a994
commit
aafb7a5b95
1 changed files with 31 additions and 15 deletions
|
@ -716,7 +716,7 @@ function scorm_grade_user($scorm, $userid) {
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case AVERAGEATTEMPT:
|
case AVERAGEATTEMPT:
|
||||||
$attemptcount = scorm_get_attempt_count($userid, $scorm, true);
|
$attemptcount = scorm_get_attempt_count($userid, $scorm, true, true);
|
||||||
if (empty($attemptcount)) {
|
if (empty($attemptcount)) {
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1217,27 +1217,43 @@ function scorm_get_attempt_status($user, $scorm, $cm='') {
|
||||||
*
|
*
|
||||||
* @param object $user Current context user
|
* @param object $user Current context user
|
||||||
* @param object $scorm a moodle scrom object - mdl_scorm
|
* @param object $scorm a moodle scrom object - mdl_scorm
|
||||||
* @param bool $attempts return the list of attempts
|
* @param bool $returnobjects if true returns a object with attempts, if false returns count of attempts.
|
||||||
|
* @param bool $ignoremissingcompletion - ignores attempts that haven't reported a grade/completion.
|
||||||
* @return int - no. of attempts so far
|
* @return int - no. of attempts so far
|
||||||
*/
|
*/
|
||||||
function scorm_get_attempt_count($userid, $scorm, $attempts_only=false) {
|
function scorm_get_attempt_count($userid, $scorm, $returnobjects = false, $ignoremissingcompletion = false) {
|
||||||
global $DB;
|
global $DB;
|
||||||
$attemptcount = 0;
|
|
||||||
$element = 'cmi.core.score.raw';
|
// Historically attempts that don't report these elements haven't been included in the average attempts grading method
|
||||||
if ($scorm->grademethod == GRADESCOES) {
|
// we may want to change this in future, but to avoid unexpected grade decreases we're leaving this in. MDL-43222
|
||||||
$element = 'cmi.core.lesson_status';
|
|
||||||
}
|
|
||||||
if (scorm_version_check($scorm->version, SCORM_13)) {
|
if (scorm_version_check($scorm->version, SCORM_13)) {
|
||||||
$element = 'cmi.score.raw';
|
$element = 'cmi.score.raw';
|
||||||
|
} else if ($scorm->grademethod == GRADESCOES) {
|
||||||
|
$element = 'cmi.core.lesson_status';
|
||||||
|
} else {
|
||||||
|
$element = 'cmi.core.score.raw';
|
||||||
}
|
}
|
||||||
$attempts = $DB->get_records_select('scorm_scoes_track', "element=? AND userid=? AND scormid=?", array($element, $userid, $scorm->id), 'attempt', 'DISTINCT attempt AS attemptnumber');
|
|
||||||
if ($attempts_only) {
|
if ($returnobjects) {
|
||||||
|
$params = array('userid' => $userid, 'scormid' => $scorm->id);
|
||||||
|
if ($ignoremissingcompletion) { // Exclude attempts that don't have the completion element requested.
|
||||||
|
$params['element'] = $element;
|
||||||
|
}
|
||||||
|
$attempts = $DB->get_records('scorm_scoes_track', $params, 'attempt', 'DISTINCT attempt AS attemptnumber');
|
||||||
return $attempts;
|
return $attempts;
|
||||||
|
} else {
|
||||||
|
$params = array($userid, $scorm->id);
|
||||||
|
$sql = "SELECT COUNT(DISTINCT attempt)
|
||||||
|
FROM {scorm_scoes_track}
|
||||||
|
WHERE 'userid' = ? AND 'scormid' = ?";
|
||||||
|
if ($ignoremissingcompletion) { // Exclude attempts that don't have the completion element requested.
|
||||||
|
$sql .= ' AND element = ?';
|
||||||
|
$params[] = $element;
|
||||||
}
|
}
|
||||||
if (!empty($attempts)) {
|
|
||||||
$attemptcount = count($attempts);
|
$attemptscount = $DB->count_records_sql($sql, $params);
|
||||||
|
return $attemptscount;
|
||||||
}
|
}
|
||||||
return $attemptcount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1730,7 +1746,7 @@ function scorm_get_toc($user, $scorm, $cmid, $toclink=TOCJSLINK, $currentorg='',
|
||||||
global $CFG, $DB, $OUTPUT;
|
global $CFG, $DB, $OUTPUT;
|
||||||
|
|
||||||
if (empty($attempt)) {
|
if (empty($attempt)) {
|
||||||
$attempt = scorm_get_attempt_count($user->id, $scorm);
|
$attempt = scorm_get_last_attempt($scorm->id, $user->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = new stdClass();
|
$result = new stdClass();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue