MOBILE-2149 course: Show section progress only if enabled

main
Pau Ferrer Ocaña 2018-11-14 11:51:20 +01:00
parent 3f7dde49d0
commit f5dd07a1bd
4 changed files with 38 additions and 18 deletions

View File

@ -246,7 +246,7 @@ export class CoreCourseFormatComponent implements OnInit, OnChanges, OnDestroy {
*/
showSectionSelector(): void {
const modal = this.modalCtrl.create('CoreCourseSectionSelectorPage',
{sections: this.sections, selected: this.selectedSection});
{course: this.course, sections: this.sections, selected: this.selectedSection});
modal.onDidDismiss((newSection) => {
if (newSection) {
this.sectionChanged(newSection);

View File

@ -13,7 +13,7 @@
<a ion-item *ngIf="!section.hiddenbynumsections && section.id != stealthModulesSectionId" text-wrap (click)="selectSection(section)" [class.core-primary-selected-item]="selected.id == section.id" [class.item-dimmed]="section.visible === 0 || section.uservisible === false" detail-none>
<core-icon name="fa-folder" item-start></core-icon>
<h2><core-format-text [text]="section.formattedName || section.name"></core-format-text></h2>
<core-progress-bar *ngIf="section.progress" [progress]="section.progress"></core-progress-bar>
<core-progress-bar *ngIf="section.progress >= 0" [progress]="section.progress"></core-progress-bar>
<ion-badge color="secondary" *ngIf="section.visible === 0 && section.uservisible !== false">{{ 'core.course.hiddenfromstudents' | translate }}</ion-badge>
<ion-badge color="secondary" *ngIf="section.availabilityinfo"><core-format-text [text]=" section.availabilityinfo"></core-format-text></ion-badge>
</a>

View File

@ -34,24 +34,28 @@ export class CoreCourseSectionSelectorPage {
constructor(navParams: NavParams, courseHelper: CoreCourseHelperProvider, private viewCtrl: ViewController) {
this.sections = navParams.get('sections');
this.selected = navParams.get('selected');
this.sections.forEach((section) => {
let complete = 0,
total = 0;
section.modules && section.modules.forEach((module) => {
if (typeof module.completiondata != 'undefined' &&
module.completiondata.tracking > CoreCourseProvider.COMPLETION_TRACKING_NONE) {
total++;
if (module.completiondata.state == CoreCourseProvider.COMPLETION_COMPLETE ||
module.completiondata.state == CoreCourseProvider.COMPLETION_COMPLETE_PASS) {
complete++;
const course = navParams.get('course');
if (course && course.enablecompletion && course.courseformatoptions && course.courseformatoptions.coursedisplay == 1) {
this.sections.forEach((section) => {
let complete = 0,
total = 0;
section.modules && section.modules.forEach((module) => {
if (module.uservisible && typeof module.completiondata != 'undefined' &&
module.completiondata.tracking > CoreCourseProvider.COMPLETION_TRACKING_NONE) {
total++;
if (module.completiondata.state == CoreCourseProvider.COMPLETION_COMPLETE ||
module.completiondata.state == CoreCourseProvider.COMPLETION_COMPLETE_PASS) {
complete++;
}
}
});
if (total > 0) {
section.progress = complete / total * 100;
}
});
if (total > 0) {
section.progress = complete / total * 100;
}
});
}
}
/**

View File

@ -19,6 +19,7 @@ import { CoreEventsProvider } from '@providers/events';
import { CoreSitesProvider } from '@providers/sites';
import { CoreDomUtilsProvider } from '@providers/utils/dom';
import { CoreTextUtilsProvider } from '@providers/utils/text';
import { CoreUtilsProvider } from '@providers/utils/utils';
import { CoreCourseProvider } from '../../providers/course';
import { CoreCourseHelperProvider } from '../../providers/helper';
import { CoreCourseFormatDelegate } from '../../providers/format-delegate';
@ -72,7 +73,8 @@ export class CoreCourseSectionPage implements OnDestroy {
private translate: TranslateService, private courseHelper: CoreCourseHelperProvider, eventsProvider: CoreEventsProvider,
private textUtils: CoreTextUtilsProvider, private coursesProvider: CoreCoursesProvider,
sitesProvider: CoreSitesProvider, private navCtrl: NavController, private injector: Injector,
private prefetchDelegate: CoreCourseModulePrefetchDelegate, private syncProvider: CoreCourseSyncProvider) {
private prefetchDelegate: CoreCourseModulePrefetchDelegate, private syncProvider: CoreCourseSyncProvider,
private utils: CoreUtilsProvider) {
this.course = navParams.get('course');
this.sectionId = navParams.get('sectionId');
this.sectionNumber = navParams.get('sectionNumber');
@ -275,6 +277,20 @@ export class CoreCourseSectionPage implements OnDestroy {
}
}));
// Load the course format options when course completion is enabled to show completion progress on sections.
if (this.course.enablecompletion && this.coursesProvider.isGetCoursesByFieldAvailable()) {
promises.push(this.coursesProvider.getCoursesByField('id', this.course.id).catch(() => {
// Ignore errors.
}).then((courses) => {
courses && courses[0] && Object.assign(this.course, courses[0]);
if (this.course.courseformatoptions) {
this.course.courseformatoptions = this.utils.objectToKeyValueMap(this.course.courseformatoptions,
'name', 'value');
}
}));
}
return Promise.all(promises).catch((error) => {
this.domUtils.showErrorModalDefault(error, 'core.course.couldnotloadsectioncontent', true);
});