Skip to content

Commit 0449c63

Browse files
committed
MOBILE-2915 course: Fix title not displayed for guest courses
1 parent 0d46a6a commit 0449c63

File tree

3 files changed

+73
-4
lines changed

3 files changed

+73
-4
lines changed

src/core/course/pages/section/section.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,9 @@ export class CoreCourseSectionPage implements OnDestroy {
169169
*/
170170
protected loadData(refresh?: boolean, sync?: boolean): Promise<any> {
171171
// First of all, get the course because the data might have changed.
172-
return this.coursesProvider.getUserCourse(this.course.id).catch(() => {
172+
return this.courseHelper.getCourse(this.course.id).then((result) => {
173+
return result.course;
174+
}).catch(() => {
173175
// Error getting the course, probably guest access.
174176
}).then((course) => {
175177
if (course) {

src/core/course/providers/helper.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -767,6 +767,33 @@ export class CoreCourseHelperProvider {
767767
});
768768
}
769769

770+
/**
771+
* Get a course. It will first check the user courses, and fallback to another WS if not enrolled.
772+
*
773+
* @param {number} courseId Course ID.
774+
* @param {string} [siteId] Site ID. If not defined, current site.
775+
* @return {Promise<{enrolled: boolean, course: any}>} Promise resolved with the course.
776+
*/
777+
getCourse(courseId: number, siteId?: string): Promise<{enrolled: boolean, course: any}> {
778+
siteId = siteId || this.sitesProvider.getCurrentSiteId();
779+
780+
// Try with enrolled courses first.
781+
return this.coursesProvider.getUserCourse(courseId, false, siteId).then((course) => {
782+
return { enrolled: true, course: course };
783+
}).catch(() => {
784+
// Not enrolled or an error happened. Try to use another WebService.
785+
return this.coursesProvider.isGetCoursesByFieldAvailableInSite(siteId).then((available) => {
786+
if (available) {
787+
return this.coursesProvider.getCourseByField('id', courseId, siteId);
788+
} else {
789+
return this.coursesProvider.getCourse(courseId, siteId);
790+
}
791+
}).then((course) => {
792+
return { enrolled: false, course: course };
793+
});
794+
});
795+
}
796+
770797
/**
771798
* Check if the course has a block with that name.
772799
*

src/core/courses/providers/courses.ts

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,30 @@ export class CoreCoursesProvider {
389389
}
390390
}
391391

392+
/**
393+
* Get the first course returned by getCoursesByField.
394+
*
395+
* @param {string} [field] The field to search. Can be left empty for all courses or:
396+
* id: course id.
397+
* ids: comma separated course ids.
398+
* shortname: course short name.
399+
* idnumber: course id number.
400+
* category: category id the course belongs to.
401+
* @param {any} [value] The value to match.
402+
* @param {string} [siteId] Site ID. If not defined, use current site.
403+
* @return {Promise<any>} Promise resolved with the first course.
404+
* @since 3.2
405+
*/
406+
getCourseByField(field?: string, value?: any, siteId?: string): Promise<any> {
407+
return this.getCoursesByField(field, value, siteId).then((courses) => {
408+
if (courses && courses.length > 0) {
409+
return courses[0];
410+
}
411+
412+
return Promise.reject(null);
413+
});
414+
}
415+
392416
/**
393417
* Get courses. They can be filtered by field.
394418
*
@@ -482,13 +506,29 @@ export class CoreCoursesProvider {
482506
}
483507

484508
/**
485-
* Check if get courses by field WS is available.
509+
* Check if get courses by field WS is available in a certain site.
486510
*
511+
* @param {CoreSite} [site] Site to check.
487512
* @return {boolean} Whether get courses by field is available.
488513
* @since 3.2
489514
*/
490-
isGetCoursesByFieldAvailable(): boolean {
491-
return this.sitesProvider.wsAvailableInCurrentSite('core_course_get_courses_by_field');
515+
isGetCoursesByFieldAvailable(site?: CoreSite): boolean {
516+
site = site || this.sitesProvider.getCurrentSite();
517+
518+
return site.wsAvailable('core_course_get_courses_by_field');
519+
}
520+
521+
/**
522+
* Check if get courses by field WS is available in a certain site, by site ID.
523+
*
524+
* @param {string} [siteId] Site ID. If not defined, current site.
525+
* @return {Promise<boolean>} Promise resolved with boolean: whether get courses by field is available.
526+
* @since 3.2
527+
*/
528+
isGetCoursesByFieldAvailableInSite(siteId?: string): Promise<boolean> {
529+
return this.sitesProvider.getSite(siteId).then((site) => {
530+
return this.isGetCoursesByFieldAvailable(site);
531+
});
492532
}
493533

494534
/**

0 commit comments

Comments
 (0)