Merge pull request #2586 from dpalou/MOBILE-3578
MOBILE-3578 competency: Fix multiple requests when view user profilemain
commit
08b3dc4723
|
@ -62,6 +62,39 @@ export class AddonCompetencyProvider {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether current user can see another user competencies in a course.
|
||||||
|
*
|
||||||
|
* @param courseId Course ID.
|
||||||
|
* @param userId User ID.
|
||||||
|
* @param siteId Site ID. If not defined, current site.
|
||||||
|
* @return Promise resolved with boolean: whether the user can view the competencies.
|
||||||
|
*/
|
||||||
|
canViewUserCompetenciesInCourse(courseId: number, userId?: number, siteId?: string): Promise<boolean> {
|
||||||
|
if (!this.sitesProvider.isLoggedIn()) {
|
||||||
|
return Promise.resolve(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.getCourseCompetenciesPage(courseId, siteId).then((response) => {
|
||||||
|
if (!response.competencies.length) {
|
||||||
|
// No competencies.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!userId || userId == this.sitesProvider.getCurrentSiteUserId()) {
|
||||||
|
// Current user.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if current user can view any competency of the user.
|
||||||
|
return this.getCompetencyInCourse(courseId, response.competencies[0].competency.id, userId, siteId).then(() => {
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}).catch(() => {
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get cache key for user learning plans data WS calls.
|
* Get cache key for user learning plans data WS calls.
|
||||||
*
|
*
|
||||||
|
@ -333,7 +366,7 @@ export class AddonCompetencyProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all competencies in a course.
|
* Get all competencies in a course for a certain user.
|
||||||
*
|
*
|
||||||
* @param courseId ID of the course.
|
* @param courseId ID of the course.
|
||||||
* @param userId ID of the user.
|
* @param userId ID of the user.
|
||||||
|
@ -344,6 +377,39 @@ export class AddonCompetencyProvider {
|
||||||
getCourseCompetencies(courseId: number, userId?: number, siteId?: string, ignoreCache?: boolean)
|
getCourseCompetencies(courseId: number, userId?: number, siteId?: string, ignoreCache?: boolean)
|
||||||
: Promise<AddonCompetencyDataForCourseCompetenciesPageResult> {
|
: Promise<AddonCompetencyDataForCourseCompetenciesPageResult> {
|
||||||
|
|
||||||
|
return this.getCourseCompetenciesPage(courseId, siteId, ignoreCache).then((response) => {
|
||||||
|
|
||||||
|
if (!userId || userId == this.sitesProvider.getCurrentSiteUserId()) {
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
let promises: Promise<AddonCompetencyUserCompetencySummaryInCourse>[];
|
||||||
|
|
||||||
|
promises = response.competencies.map((competency) =>
|
||||||
|
this.getCompetencyInCourse(courseId, competency.competency.id, userId, siteId)
|
||||||
|
);
|
||||||
|
|
||||||
|
return Promise.all(promises).then((responses: AddonCompetencyUserCompetencySummaryInCourse[]) => {
|
||||||
|
responses.forEach((resp, index) => {
|
||||||
|
response.competencies[index].usercompetencycourse = resp.usercompetencysummary.usercompetencycourse;
|
||||||
|
});
|
||||||
|
|
||||||
|
return response;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all competencies in a course.
|
||||||
|
*
|
||||||
|
* @param courseId ID of the course.
|
||||||
|
* @param siteId Site ID. If not defined, current site.
|
||||||
|
* @param ignoreCache True if it should ignore cached data (it will always fail in offline or server down).
|
||||||
|
* @return Promise to be resolved when the course competencies are retrieved.
|
||||||
|
*/
|
||||||
|
getCourseCompetenciesPage(courseId: number, siteId?: string, ignoreCache?: boolean)
|
||||||
|
: Promise<AddonCompetencyDataForCourseCompetenciesPageResult> {
|
||||||
|
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
|
|
||||||
this.logger.debug('Get course competencies for course ' + courseId);
|
this.logger.debug('Get course competencies for course ' + courseId);
|
||||||
|
@ -370,26 +436,6 @@ export class AddonCompetencyProvider {
|
||||||
|
|
||||||
return Promise.reject(null);
|
return Promise.reject(null);
|
||||||
});
|
});
|
||||||
|
|
||||||
}).then((response) => {
|
|
||||||
|
|
||||||
if (!userId || userId == this.sitesProvider.getCurrentSiteUserId()) {
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
let promises: Promise<AddonCompetencyUserCompetencySummaryInCourse>[];
|
|
||||||
|
|
||||||
promises = response.competencies.map((competency) =>
|
|
||||||
this.getCompetencyInCourse(courseId, competency.competency.id, userId, siteId)
|
|
||||||
);
|
|
||||||
|
|
||||||
return Promise.all(promises).then((responses: AddonCompetencyUserCompetencySummaryInCourse[]) => {
|
|
||||||
responses.forEach((resp, index) => {
|
|
||||||
response.competencies[index].usercompetencycourse = resp.usercompetencysummary.usercompetencycourse;
|
|
||||||
});
|
|
||||||
|
|
||||||
return response;
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -71,15 +71,10 @@ export class AddonCompetencyUserHandler implements CoreUserProfileHandler {
|
||||||
return this.participantsNavEnabledCache[cacheKey];
|
return this.participantsNavEnabledCache[cacheKey];
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.competencyProvider.getCourseCompetencies(courseId, user.id).then((response) => {
|
return this.competencyProvider.canViewUserCompetenciesInCourse(courseId, user.id).then((enabled) => {
|
||||||
const enabled = response.competencies.length > 0;
|
|
||||||
this.participantsNavEnabledCache[cacheKey] = enabled;
|
this.participantsNavEnabledCache[cacheKey] = enabled;
|
||||||
|
|
||||||
return enabled;
|
return enabled;
|
||||||
}).catch((message) => {
|
|
||||||
this.participantsNavEnabledCache[cacheKey] = false;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// Link on a user site profile.
|
// Link on a user site profile.
|
||||||
|
|
Loading…
Reference in New Issue