Merge pull request #1540 from dpalou/MOBILE-2600

Mobile 2600
main
Juan Leyva 2018-09-28 12:17:19 +02:00 committed by GitHub
commit a76ccaaa4f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 5 deletions

View File

@ -207,7 +207,9 @@ export class AddonModScormIndexComponent extends CoreCourseModuleMainActivityCom
this.scorm.numAttempts = this.attempts.total;
this.scorm.gradeMethodReadable = this.scormProvider.getScormGradeMethod(this.scorm);
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;
}

View File

@ -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.
* Otherwise, it will be the first valid SCO returned by $mmaModScorm#getScos.
* Get the first SCO to load in a SCORM: the first valid and incomplete SCO.
*
* @param {number} scormId Scorm ID.
* @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 {boolean} [offline] Whether the attempt is offline.
* @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++) {
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;
}
}

View File

@ -77,6 +77,10 @@ export class AddonModScormProvider {
static MODENORMAL = 'normal';
static MODEREVIEW = 'review';
static SCORM_FORCEATTEMPT_NO = 0;
static SCORM_FORCEATTEMPT_ONCOMPLETE = 1;
static SCORM_FORCEATTEMPT_ALWAYS = 2;
// Events.
static LAUNCH_NEXT_SCO_EVENT = 'addon_mod_scorm_launch_next_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.
if (attempt == 0) {
newAttempt = true;