commit
a76ccaaa4f
|
@ -207,7 +207,9 @@ export class AddonModScormIndexComponent extends CoreCourseModuleMainActivityCom
|
||||||
this.scorm.numAttempts = this.attempts.total;
|
this.scorm.numAttempts = this.attempts.total;
|
||||||
this.scorm.gradeMethodReadable = this.scormProvider.getScormGradeMethod(this.scorm);
|
this.scorm.gradeMethodReadable = this.scormProvider.getScormGradeMethod(this.scorm);
|
||||||
this.scorm.attemptsLeft = this.scormProvider.countAttemptsLeft(this.scorm, this.attempts.lastAttempt.number);
|
this.scorm.attemptsLeft = this.scormProvider.countAttemptsLeft(this.scorm, this.attempts.lastAttempt.number);
|
||||||
if (this.scorm.forceattempt && this.scorm.incomplete) {
|
|
||||||
|
if (this.scorm.forcenewattempt == AddonModScormProvider.SCORM_FORCEATTEMPT_ALWAYS ||
|
||||||
|
(this.scorm.forcenewattempt && !this.scorm.incomplete)) {
|
||||||
this.scormOptions.newAttempt = true;
|
this.scormOptions.newAttempt = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -193,12 +193,11 @@ export class AddonModScormHelperProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the first SCO to load in a SCORM. If a non-empty TOC is provided, it will be the first valid SCO in the TOC.
|
* Get the first SCO to load in a SCORM: the first valid and incomplete SCO.
|
||||||
* Otherwise, it will be the first valid SCO returned by $mmaModScorm#getScos.
|
|
||||||
*
|
*
|
||||||
* @param {number} scormId Scorm ID.
|
* @param {number} scormId Scorm ID.
|
||||||
* @param {number} attempt Attempt number.
|
* @param {number} attempt Attempt number.
|
||||||
* @param {any[]} [toc] SCORM's TOC.
|
* @param {any[]} [toc] SCORM's TOC. If not provided, it will be calculated.
|
||||||
* @param {string} [organization] Organization to use.
|
* @param {string} [organization] Organization to use.
|
||||||
* @param {boolean} [offline] Whether the attempt is offline.
|
* @param {boolean} [offline] Whether the attempt is offline.
|
||||||
* @param {string} [siteId] Site ID. If not defined, current site.
|
* @param {string} [siteId] Site ID. If not defined, current site.
|
||||||
|
@ -220,7 +219,8 @@ export class AddonModScormHelperProvider {
|
||||||
for (let i = 0; i < scos.length; i++) {
|
for (let i = 0; i < scos.length; i++) {
|
||||||
const sco = scos[i];
|
const sco = scos[i];
|
||||||
|
|
||||||
if (sco.isvisible && sco.prereq && sco.launch) {
|
// Return the first valid and incomplete SCO.
|
||||||
|
if (sco.isvisible && sco.prereq && sco.launch && this.scormProvider.isStatusIncomplete(sco.status)) {
|
||||||
return sco;
|
return sco;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,6 +77,10 @@ export class AddonModScormProvider {
|
||||||
static MODENORMAL = 'normal';
|
static MODENORMAL = 'normal';
|
||||||
static MODEREVIEW = 'review';
|
static MODEREVIEW = 'review';
|
||||||
|
|
||||||
|
static SCORM_FORCEATTEMPT_NO = 0;
|
||||||
|
static SCORM_FORCEATTEMPT_ONCOMPLETE = 1;
|
||||||
|
static SCORM_FORCEATTEMPT_ALWAYS = 2;
|
||||||
|
|
||||||
// Events.
|
// Events.
|
||||||
static LAUNCH_NEXT_SCO_EVENT = 'addon_mod_scorm_launch_next_sco';
|
static LAUNCH_NEXT_SCO_EVENT = 'addon_mod_scorm_launch_next_sco';
|
||||||
static LAUNCH_PREV_SCO_EVENT = 'addon_mod_scorm_launch_prev_sco';
|
static LAUNCH_PREV_SCO_EVENT = 'addon_mod_scorm_launch_prev_sco';
|
||||||
|
@ -233,6 +237,15 @@ export class AddonModScormProvider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (scorm.forcenewattempt == AddonModScormProvider.SCORM_FORCEATTEMPT_ALWAYS) {
|
||||||
|
// This SCORM is configured to force a new attempt on every re-entry.
|
||||||
|
return {
|
||||||
|
mode: AddonModScormProvider.MODENORMAL,
|
||||||
|
attempt: attempt + 1,
|
||||||
|
newAttempt: true
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
// Validate user request to start a new attempt.
|
// Validate user request to start a new attempt.
|
||||||
if (attempt == 0) {
|
if (attempt == 0) {
|
||||||
newAttempt = true;
|
newAttempt = true;
|
||||||
|
|
Loading…
Reference in New Issue