@@ -62,6 +62,39 @@ export class AddonCompetencyProvider {
6262 } ) ;
6363 }
6464
65+ /**
66+ * Returns whether current user can see another user competencies in a course.
67+ *
68+ * @param courseId Course ID.
69+ * @param userId User ID.
70+ * @param siteId Site ID. If not defined, current site.
71+ * @return Promise resolved with boolean: whether the user can view the competencies.
72+ */
73+ canViewUserCompetenciesInCourse ( courseId : number , userId ?: number , siteId ?: string ) : Promise < boolean > {
74+ if ( ! this . sitesProvider . isLoggedIn ( ) ) {
75+ return Promise . resolve ( false ) ;
76+ }
77+
78+ return this . getCourseCompetenciesPage ( courseId , siteId ) . then ( ( response ) => {
79+ if ( ! response . competencies . length ) {
80+ // No competencies.
81+ return false ;
82+ }
83+
84+ if ( ! userId || userId == this . sitesProvider . getCurrentSiteUserId ( ) ) {
85+ // Current user.
86+ return true ;
87+ }
88+
89+ // Check if current user can view any competency of the user.
90+ return this . getCompetencyInCourse ( courseId , response . competencies [ 0 ] . competency . id , userId , siteId ) . then ( ( ) => {
91+ return true ;
92+ } ) ;
93+ } ) . catch ( ( ) => {
94+ return false ;
95+ } ) ;
96+ }
97+
6598 /**
6699 * Get cache key for user learning plans data WS calls.
67100 *
@@ -333,7 +366,7 @@ export class AddonCompetencyProvider {
333366 }
334367
335368 /**
336- * Get all competencies in a course.
369+ * Get all competencies in a course for a certain user .
337370 *
338371 * @param courseId ID of the course.
339372 * @param userId ID of the user.
@@ -344,6 +377,39 @@ export class AddonCompetencyProvider {
344377 getCourseCompetencies ( courseId : number , userId ?: number , siteId ?: string , ignoreCache ?: boolean )
345378 : Promise < AddonCompetencyDataForCourseCompetenciesPageResult > {
346379
380+ return this . getCourseCompetenciesPage ( courseId , siteId , ignoreCache ) . then ( ( response ) => {
381+
382+ if ( ! userId || userId == this . sitesProvider . getCurrentSiteUserId ( ) ) {
383+ return response ;
384+ }
385+
386+ let promises : Promise < AddonCompetencyUserCompetencySummaryInCourse > [ ] ;
387+
388+ promises = response . competencies . map ( ( competency ) =>
389+ this . getCompetencyInCourse ( courseId , competency . competency . id , userId , siteId )
390+ ) ;
391+
392+ return Promise . all ( promises ) . then ( ( responses : AddonCompetencyUserCompetencySummaryInCourse [ ] ) => {
393+ responses . forEach ( ( resp , index ) => {
394+ response . competencies [ index ] . usercompetencycourse = resp . usercompetencysummary . usercompetencycourse ;
395+ } ) ;
396+
397+ return response ;
398+ } ) ;
399+ } ) ;
400+ }
401+
402+ /**
403+ * Get all competencies in a course.
404+ *
405+ * @param courseId ID of the course.
406+ * @param siteId Site ID. If not defined, current site.
407+ * @param ignoreCache True if it should ignore cached data (it will always fail in offline or server down).
408+ * @return Promise to be resolved when the course competencies are retrieved.
409+ */
410+ getCourseCompetenciesPage ( courseId : number , siteId ?: string , ignoreCache ?: boolean )
411+ : Promise < AddonCompetencyDataForCourseCompetenciesPageResult > {
412+
347413 return this . sitesProvider . getSite ( siteId ) . then ( ( site ) => {
348414
349415 this . logger . debug ( 'Get course competencies for course ' + courseId ) ;
@@ -370,26 +436,6 @@ export class AddonCompetencyProvider {
370436
371437 return Promise . reject ( null ) ;
372438 } ) ;
373-
374- } ) . then ( ( response ) => {
375-
376- if ( ! userId || userId == this . sitesProvider . getCurrentSiteUserId ( ) ) {
377- return response ;
378- }
379-
380- let promises : Promise < AddonCompetencyUserCompetencySummaryInCourse > [ ] ;
381-
382- promises = response . competencies . map ( ( competency ) =>
383- this . getCompetencyInCourse ( courseId , competency . competency . id , userId , siteId )
384- ) ;
385-
386- return Promise . all ( promises ) . then ( ( responses : AddonCompetencyUserCompetencySummaryInCourse [ ] ) => {
387- responses . forEach ( ( resp , index ) => {
388- response . competencies [ index ] . usercompetencycourse = resp . usercompetencysummary . usercompetencycourse ;
389- } ) ;
390-
391- return response ;
392- } ) ;
393439 } ) ;
394440 }
395441
0 commit comments