diff --git a/src/addons/competency/services/competency.ts b/src/addons/competency/services/competency.ts index 07f70f915..d6b3ca689 100644 --- a/src/addons/competency/services/competency.ts +++ b/src/addons/competency/services/competency.ts @@ -42,18 +42,34 @@ export class AddonCompetencyProvider { static readonly REVIEW_STATUS_WAITING_FOR_REVIEW = 1; static readonly REVIEW_STATUS_IN_REVIEW = 2; + /** + * Check if competencies are enabled in a certain site. + * + * @param options Site ID or site object. + * @returns Whether competencies are enabled. + */ + async areCompetenciesEnabled(options?: {siteId?: string; site?: CoreSite}): Promise { + const site = options?.site ? options.site : await CoreSites.getSite(options?.siteId); + + if (!site) { + return false; + } + + return site.canUseAdvancedFeature('enablecompetencies') && + !(site.isFeatureDisabled('CoreMainMenuDelegate_AddonCompetency') && + site.isFeatureDisabled('CoreCourseOptionsDelegate_AddonCompetency') && + site.isFeatureDisabled('CoreUserDelegate_AddonCompetency')); + } + /** * Check if all competencies features are disabled. * * @param siteId Site ID. If not defined, current site. * @returns Promise resolved with boolean: whether all competency features are disabled. + * @deprecated since 4.4. Use areCompetenciesEnabled instead. */ async allCompetenciesDisabled(siteId?: string): Promise { - const site = await CoreSites.getSite(siteId); - - return site.isFeatureDisabled('CoreMainMenuDelegate_AddonCompetency') && - site.isFeatureDisabled('CoreCourseOptionsDelegate_AddonCompetency') && - site.isFeatureDisabled('CoreUserDelegate_AddonCompetency'); + return !(await this.areCompetenciesEnabled({ siteId })); } /** @@ -69,6 +85,11 @@ export class AddonCompetencyProvider { return false; } + const enabled = await this.areCompetenciesEnabled({ siteId }); + if (!enabled) { + return false; + } + try { const response = await this.getCourseCompetenciesPage(courseId, siteId); diff --git a/src/addons/competency/services/handlers/competency-link.ts b/src/addons/competency/services/handlers/competency-link.ts index c1ae3bfc5..5e4deea3c 100644 --- a/src/addons/competency/services/handlers/competency-link.ts +++ b/src/addons/competency/services/handlers/competency-link.ts @@ -70,10 +70,7 @@ export class AddonCompetencyCompetencyLinkHandlerService extends CoreContentLink * @inheritdoc */ async isEnabled(siteId: string): Promise { - // Handler is disabled if all competency features are disabled. - const disabled = await AddonCompetency.allCompetenciesDisabled(siteId); - - return !disabled; + return AddonCompetency.areCompetenciesEnabled({ siteId }); } } diff --git a/src/addons/competency/services/handlers/course-option.ts b/src/addons/competency/services/handlers/course-option.ts index e46b49b78..ac611c4d8 100644 --- a/src/addons/competency/services/handlers/course-option.ts +++ b/src/addons/competency/services/handlers/course-option.ts @@ -39,7 +39,7 @@ export class AddonCompetencyCourseOptionHandlerService implements CoreCourseOpti * @inheritdoc */ async isEnabled(): Promise { - return true; + return AddonCompetency.areCompetenciesEnabled(); } /** diff --git a/src/addons/competency/services/handlers/plan-link.ts b/src/addons/competency/services/handlers/plan-link.ts index 01aa234e3..48646ab8a 100644 --- a/src/addons/competency/services/handlers/plan-link.ts +++ b/src/addons/competency/services/handlers/plan-link.ts @@ -48,10 +48,7 @@ export class AddonCompetencyPlanLinkHandlerService extends CoreContentLinksHandl * @inheritdoc */ async isEnabled(siteId: string): Promise { - // Handler is disabled if all competency features are disabled. - const disabled = await AddonCompetency.allCompetenciesDisabled(siteId); - - return !disabled; + return AddonCompetency.areCompetenciesEnabled({ siteId }); } } diff --git a/src/addons/competency/services/handlers/plans-link.ts b/src/addons/competency/services/handlers/plans-link.ts index b88e76723..7b042f14c 100644 --- a/src/addons/competency/services/handlers/plans-link.ts +++ b/src/addons/competency/services/handlers/plans-link.ts @@ -49,10 +49,7 @@ export class AddonCompetencyPlansLinkHandlerService extends CoreContentLinksHand * @inheritdoc */ async isEnabled(siteId: string): Promise { - // Handler is disabled if all competency features are disabled. - const disabled = await AddonCompetency.allCompetenciesDisabled(siteId); - - return !disabled; + return AddonCompetency.areCompetenciesEnabled({ siteId }); } } diff --git a/src/addons/competency/services/handlers/push-click.ts b/src/addons/competency/services/handlers/push-click.ts index 8172821e2..ec3b3d493 100644 --- a/src/addons/competency/services/handlers/push-click.ts +++ b/src/addons/competency/services/handlers/push-click.ts @@ -39,7 +39,7 @@ export class AddonCompetencyPushClickHandlerService implements CorePushNotificat if (CoreUtils.isTrueOrOne(notification.notif) && notification.moodlecomponent == 'moodle' && (notification.name == 'competencyplancomment' || notification.name == 'competencyusercompcomment')) { // If all competency features are disabled, don't handle the click. - return AddonCompetency.allCompetenciesDisabled(notification.site).then((disabled) => !disabled); + return AddonCompetency.areCompetenciesEnabled({ siteId: notification.site }); } return false; diff --git a/src/addons/competency/services/handlers/user-competency-link.ts b/src/addons/competency/services/handlers/user-competency-link.ts index d6ddc5210..5cd22e079 100644 --- a/src/addons/competency/services/handlers/user-competency-link.ts +++ b/src/addons/competency/services/handlers/user-competency-link.ts @@ -48,10 +48,7 @@ export class AddonCompetencyUserCompetencyLinkHandlerService extends CoreContent * @inheritdoc */ async isEnabled(siteId: string): Promise { - // Handler is disabled if all competency features are disabled. - const disabled = await AddonCompetency.allCompetenciesDisabled(siteId); - - return !disabled; + return AddonCompetency.areCompetenciesEnabled({ siteId }); } } diff --git a/src/addons/competency/services/handlers/user.ts b/src/addons/competency/services/handlers/user.ts index 9cd7df793..bfbce8765 100644 --- a/src/addons/competency/services/handlers/user.ts +++ b/src/addons/competency/services/handlers/user.ts @@ -43,7 +43,7 @@ export class AddonCompetencyUserHandlerService implements CoreUserProfileHandler * @inheritdoc */ async isEnabled(): Promise { - return true; + return AddonCompetency.areCompetenciesEnabled(); } /** diff --git a/src/addons/competency/tests/behat/navigation.feature b/src/addons/competency/tests/behat/navigation.feature index e6f833b08..2913696df 100644 --- a/src/addons/competency/tests/behat/navigation.feature +++ b/src/addons/competency/tests/behat/navigation.feature @@ -175,6 +175,15 @@ Feature: Test competency navigation Then I should find "Desserts are important" in the app But I should not find "Cakes" in the app + Given the following config values are set as admin: + | enabled | 0 | core_competency | + When I entered the course "Course 1" as "student1" in the app + Then I should not find "Competencies" in the app + + When I press the back button in the app + And I press the user menu button in the app + And I should not find "Learning plans" in the app + Scenario: Mobile navigation (teacher) Given I entered the course "Course 1" as "teacher1" in the app