diff --git a/src/addon/badges/providers/mybadges-link-handler.ts b/src/addon/badges/providers/mybadges-link-handler.ts index 59a3025da..8c58e384d 100644 --- a/src/addon/badges/providers/mybadges-link-handler.ts +++ b/src/addon/badges/providers/mybadges-link-handler.ts @@ -24,7 +24,7 @@ import { AddonBadgesProvider } from './badges'; @Injectable() export class AddonBadgesMyBadgesLinkHandler extends CoreContentLinksHandlerBase { name = 'AddonBadgesMyBadgesLinkHandler'; - featureName = '$mmUserDelegate_mmaBadges'; + featureName = 'CoreUserDelegate_AddonBadges'; pattern = /\/badges\/mybadges\.php/; constructor(private badgesProvider: AddonBadgesProvider, private loginHelper: CoreLoginHelperProvider) { diff --git a/src/addon/badges/providers/user-handler.ts b/src/addon/badges/providers/user-handler.ts index 8e8ea9340..fb34cd633 100644 --- a/src/addon/badges/providers/user-handler.ts +++ b/src/addon/badges/providers/user-handler.ts @@ -21,7 +21,7 @@ import { AddonBadgesProvider } from './badges'; */ @Injectable() export class AddonBadgesUserHandler implements CoreUserProfileHandler { - name = 'mmaBadges'; + name = 'AddonBadges'; priority = 50; type = CoreUserDelegate.TYPE_NEW_PAGE; diff --git a/src/addon/calendar/providers/calendar.ts b/src/addon/calendar/providers/calendar.ts index 318800396..210923dae 100644 --- a/src/addon/calendar/providers/calendar.ts +++ b/src/addon/calendar/providers/calendar.ts @@ -343,7 +343,7 @@ export class AddonCalendarProvider { isCalendarDisabledInSite(site?: CoreSite): boolean { site = site || this.sitesProvider.getCurrentSite(); - return site.isFeatureDisabled('$mmSideMenuDelegate_mmaCalendar'); + return site.isFeatureDisabled('CoreMainMenuDelegate_AddonCalendar'); } /** diff --git a/src/addon/competency/providers/user-handler.ts b/src/addon/competency/providers/user-handler.ts index ffc4a7c51..3b04349f6 100644 --- a/src/addon/competency/providers/user-handler.ts +++ b/src/addon/competency/providers/user-handler.ts @@ -25,7 +25,7 @@ import { AddonCompetencyProvider } from './competency'; */ @Injectable() export class AddonCompetencyUserHandler implements CoreUserProfileHandler { - name = 'AddonCompetency'; + name = 'AddonCompetency:learningPlan'; priority = 900; type = CoreUserDelegate.TYPE_NEW_PAGE; participantsNavEnabledCache = {}; @@ -58,8 +58,8 @@ export class AddonCompetencyUserHandler implements CoreUserProfileHandler { * * @param {any} user User to check. * @param {number} courseId Course ID. - * @param {any} [navOptions] Course navigation options for current user. See $mmCourses#getUserNavigationOptions. - * @param {any} [admOptions] Course admin options for current user. See $mmCourses#getUserAdministrationOptions. + * @param {any} [navOptions] Course navigation options for current user. See CoreCoursesProvider.getUserNavigationOptions. + * @param {any} [admOptions] Course admin options for current user. See CoreCoursesProvider.getUserAdministrationOptions. * @return {boolean|Promise} Promise resolved with true if enabled, resolved with false otherwise. */ isEnabledForUser(user: any, courseId: number, navOptions?: any, admOptions?: any): boolean | Promise { diff --git a/src/addon/files/providers/files.ts b/src/addon/files/providers/files.ts index 039241412..8cad3e251 100644 --- a/src/addon/files/providers/files.ts +++ b/src/addon/files/providers/files.ts @@ -295,7 +295,7 @@ export class AddonFilesProvider { isDisabledInSite(site: CoreSite): boolean { site = site || this.sitesProvider.getCurrentSite(); - return site.isFeatureDisabled('$mmSideMenuDelegate_mmaFiles'); + return site.isFeatureDisabled('CoreMainMenuDelegate_AddonFiles'); } /** @@ -328,7 +328,7 @@ export class AddonFilesProvider { isPrivateFilesDisabledInSite(site?: CoreSite): boolean { site = site || this.sitesProvider.getCurrentSite(); - return site.isFeatureDisabled('files_privatefiles'); + return site.isFeatureDisabled('AddonFilesPrivateFiles'); } /** @@ -352,7 +352,7 @@ export class AddonFilesProvider { isSiteFilesDisabledInSite(site?: CoreSite): boolean { site = site || this.sitesProvider.getCurrentSite(); - return site.isFeatureDisabled('files_sitefiles'); + return site.isFeatureDisabled('AddonFilesSiteFiles'); } /** @@ -376,7 +376,7 @@ export class AddonFilesProvider { isUploadDisabledInSite(site?: CoreSite): boolean { site = site || this.sitesProvider.getCurrentSite(); - return site.isFeatureDisabled('files_upload'); + return site.isFeatureDisabled('AddonFilesUpload'); } /** diff --git a/src/addon/messages/messages.module.ts b/src/addon/messages/messages.module.ts index c05d03a90..31e009d6f 100644 --- a/src/addon/messages/messages.module.ts +++ b/src/addon/messages/messages.module.ts @@ -85,7 +85,7 @@ export class AddonMessagesModule { const notificationClicked = (notification: any): void => { messagesProvider.isMessagingEnabledForSite(notification.site).then(() => { - sitesProvider.isFeatureDisabled('$mmSideMenuDelegate_mmaMessages', notification.site).then((disabled) => { + sitesProvider.isFeatureDisabled('CoreMainMenuDelegate_AddonMessages', notification.site).then((disabled) => { if (disabled) { // Messages are disabled, stop. return; diff --git a/src/addon/messages/providers/user-add-contact-handler.ts b/src/addon/messages/providers/user-add-contact-handler.ts index 85a3f75ae..8c1e8241e 100644 --- a/src/addon/messages/providers/user-add-contact-handler.ts +++ b/src/addon/messages/providers/user-add-contact-handler.ts @@ -62,8 +62,8 @@ export class AddonMessagesAddContactUserHandler implements CoreUserProfileHandle * * @param {any} user User to check. * @param {number} courseId Course ID. - * @param {any} [navOptions] Course navigation options for current user. See $mmCourses#getUserNavigationOptions. - * @param {any} [admOptions] Course admin options for current user. See $mmCourses#getUserAdministrationOptions. + * @param {any} [navOptions] Course navigation options for current user. See CoreCoursesProvider.getUserNavigationOptions. + * @param {any} [admOptions] Course admin options for current user. See CoreCoursesProvider.getUserAdministrationOptions. * @return {boolean|Promise} Promise resolved with true if enabled, resolved with false otherwise. */ isEnabledForUser(user: any, courseId: number, navOptions?: any, admOptions?: any): boolean | Promise { diff --git a/src/addon/messages/providers/user-block-contact-handler.ts b/src/addon/messages/providers/user-block-contact-handler.ts index 2af38b44f..1693dd538 100644 --- a/src/addon/messages/providers/user-block-contact-handler.ts +++ b/src/addon/messages/providers/user-block-contact-handler.ts @@ -62,8 +62,8 @@ export class AddonMessagesBlockContactUserHandler implements CoreUserProfileHand * * @param {any} user User to check. * @param {number} courseId Course ID. - * @param {any} [navOptions] Course navigation options for current user. See $mmCourses#getUserNavigationOptions. - * @param {any} [admOptions] Course admin options for current user. See $mmCourses#getUserAdministrationOptions. + * @param {any} [navOptions] Course navigation options for current user. See CoreCoursesProvider.getUserNavigationOptions. + * @param {any} [admOptions] Course admin options for current user. See CoreCoursesProvider.getUserAdministrationOptions. * @return {boolean|Promise} Promise resolved with true if enabled, resolved with false otherwise. */ isEnabledForUser(user: any, courseId: number, navOptions?: any, admOptions?: any): boolean | Promise { diff --git a/src/addon/messages/providers/user-send-message-handler.ts b/src/addon/messages/providers/user-send-message-handler.ts index 1d1838c50..e42a2ca67 100644 --- a/src/addon/messages/providers/user-send-message-handler.ts +++ b/src/addon/messages/providers/user-send-message-handler.ts @@ -44,8 +44,8 @@ export class AddonMessagesSendMessageUserHandler implements CoreUserProfileHandl * * @param {any} user User to check. * @param {number} courseId Course ID. - * @param {any} [navOptions] Course navigation options for current user. See $mmCourses#getUserNavigationOptions. - * @param {any} [admOptions] Course admin options for current user. See $mmCourses#getUserAdministrationOptions. + * @param {any} [navOptions] Course navigation options for current user. See CoreCoursesProvider.getUserNavigationOptions. + * @param {any} [admOptions] Course admin options for current user. See CoreCoursesProvider.getUserAdministrationOptions. * @return {boolean|Promise} Promise resolved with true if enabled, resolved with false otherwise. */ isEnabledForUser(user: any, courseId: number, navOptions?: any, admOptions?: any): boolean | Promise { diff --git a/src/addon/mod/book/providers/link-handler.ts b/src/addon/mod/book/providers/link-handler.ts index 1dc92ac85..1035ef3f9 100644 --- a/src/addon/mod/book/providers/link-handler.ts +++ b/src/addon/mod/book/providers/link-handler.ts @@ -15,7 +15,6 @@ import { Injectable } from '@angular/core'; import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler'; import { CoreCourseHelperProvider } from '@core/course/providers/helper'; -import { AddonModBookProvider } from './book'; /** * Handler to treat links to book. @@ -25,6 +24,6 @@ export class AddonModBookLinkHandler extends CoreContentLinksModuleIndexHandler name = 'AddonModBookLinkHandler'; constructor(courseHelper: CoreCourseHelperProvider) { - super(courseHelper, AddonModBookProvider.COMPONENT, 'book'); + super(courseHelper, 'AddonModBook', 'book'); } } diff --git a/src/addon/mod/book/providers/module-handler.ts b/src/addon/mod/book/providers/module-handler.ts index e440fcf33..7cae479c6 100644 --- a/src/addon/mod/book/providers/module-handler.ts +++ b/src/addon/mod/book/providers/module-handler.ts @@ -24,7 +24,8 @@ import { CoreCourseProvider } from '@core/course/providers/course'; */ @Injectable() export class AddonModBookModuleHandler implements CoreCourseModuleHandler { - name = 'book'; + name = 'AddonModBook'; + modName = 'book'; constructor(protected bookProvider: AddonModBookProvider, private courseProvider: CoreCourseProvider) { } diff --git a/src/addon/mod/book/providers/prefetch-handler.ts b/src/addon/mod/book/providers/prefetch-handler.ts index 17aa4b636..aa0b5d8a5 100644 --- a/src/addon/mod/book/providers/prefetch-handler.ts +++ b/src/addon/mod/book/providers/prefetch-handler.ts @@ -21,7 +21,8 @@ import { AddonModBookProvider } from './book'; */ @Injectable() export class AddonModBookPrefetchHandler extends CoreCourseModulePrefetchHandlerBase { - name = 'book'; + name = 'AddonModBook'; + modName = 'book'; component = AddonModBookProvider.COMPONENT; updatesNames = /^configuration$|^.*files$|^entries$/; isResource = true; diff --git a/src/addon/mod/folder/providers/folder.ts b/src/addon/mod/folder/providers/folder.ts index 0e7d80d33..63c5767bd 100644 --- a/src/addon/mod/folder/providers/folder.ts +++ b/src/addon/mod/folder/providers/folder.ts @@ -30,7 +30,7 @@ export class AddonModFolderProvider { constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private courseProvider: CoreCourseProvider, private utils: CoreUtilsProvider) { - this.logger = logger.getInstance('mmaModFolderProvider'); + this.logger = logger.getInstance('AddonModFolderProvider'); } /** diff --git a/src/addon/mod/folder/providers/link-handler.ts b/src/addon/mod/folder/providers/link-handler.ts index 6de6b010c..30db9d341 100644 --- a/src/addon/mod/folder/providers/link-handler.ts +++ b/src/addon/mod/folder/providers/link-handler.ts @@ -15,7 +15,6 @@ import { Injectable } from '@angular/core'; import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler'; import { CoreCourseHelperProvider } from '@core/course/providers/helper'; -import { AddonModFolderProvider } from './folder'; /** * Handler to treat links to resource. @@ -25,6 +24,6 @@ export class AddonModFolderLinkHandler extends CoreContentLinksModuleIndexHandle name = 'AddonModFolderLinkHandler'; constructor(courseHelper: CoreCourseHelperProvider) { - super(courseHelper, AddonModFolderProvider.COMPONENT, 'folder'); + super(courseHelper, 'AddonModFolder', 'folder'); } } diff --git a/src/addon/mod/folder/providers/module-handler.ts b/src/addon/mod/folder/providers/module-handler.ts index e30a9b890..54899cb35 100644 --- a/src/addon/mod/folder/providers/module-handler.ts +++ b/src/addon/mod/folder/providers/module-handler.ts @@ -23,7 +23,8 @@ import { CoreCourseProvider } from '@core/course/providers/course'; */ @Injectable() export class AddonModFolderModuleHandler implements CoreCourseModuleHandler { - name = 'folder'; + name = 'AddonModFolder'; + modName = 'folder'; constructor(private courseProvider: CoreCourseProvider) { } diff --git a/src/addon/mod/folder/providers/prefetch-handler.ts b/src/addon/mod/folder/providers/prefetch-handler.ts index e764111d5..2b443ae83 100644 --- a/src/addon/mod/folder/providers/prefetch-handler.ts +++ b/src/addon/mod/folder/providers/prefetch-handler.ts @@ -21,7 +21,8 @@ import { AddonModFolderProvider } from './folder'; */ @Injectable() export class AddonModFolderPrefetchHandler extends CoreCourseModulePrefetchHandlerBase { - name = 'folder'; + name = 'AddonModFolder'; + modName = 'folder'; component = AddonModFolderProvider.COMPONENT; isResource = true; diff --git a/src/addon/mod/label/providers/link-handler.ts b/src/addon/mod/label/providers/link-handler.ts index 72ed0d615..c1ef6fd67 100644 --- a/src/addon/mod/label/providers/link-handler.ts +++ b/src/addon/mod/label/providers/link-handler.ts @@ -24,6 +24,6 @@ export class AddonModLabelLinkHandler extends CoreContentLinksModuleIndexHandler name = 'AddonModLabelLinkHandler'; constructor(courseHelper: CoreCourseHelperProvider) { - super(courseHelper, 'mmaModLabel', 'label'); + super(courseHelper, 'AddonModLabel', 'label'); } } diff --git a/src/addon/mod/label/providers/module-handler.ts b/src/addon/mod/label/providers/module-handler.ts index 06ab1e7f7..f54871597 100644 --- a/src/addon/mod/label/providers/module-handler.ts +++ b/src/addon/mod/label/providers/module-handler.ts @@ -20,7 +20,8 @@ import { CoreCourseModuleHandler, CoreCourseModuleHandlerData } from '@core/cour */ @Injectable() export class AddonModLabelModuleHandler implements CoreCourseModuleHandler { - name = 'label'; + name = 'AddonModLabel'; + modName = 'label'; constructor() { // Nothing to do. diff --git a/src/addon/mod/page/providers/link-handler.ts b/src/addon/mod/page/providers/link-handler.ts index 73f2ca507..339a6e202 100644 --- a/src/addon/mod/page/providers/link-handler.ts +++ b/src/addon/mod/page/providers/link-handler.ts @@ -15,7 +15,6 @@ import { Injectable } from '@angular/core'; import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler'; import { CoreCourseHelperProvider } from '@core/course/providers/helper'; -import { AddonModPageProvider } from './page'; /** * Handler to treat links to resource. @@ -25,6 +24,6 @@ export class AddonModPageLinkHandler extends CoreContentLinksModuleIndexHandler name = 'AddonModPageLinkHandler'; constructor(courseHelper: CoreCourseHelperProvider) { - super(courseHelper, AddonModPageProvider.COMPONENT, 'page'); + super(courseHelper, 'AddonModPage', 'page'); } } diff --git a/src/addon/mod/page/providers/module-handler.ts b/src/addon/mod/page/providers/module-handler.ts index 88d14ebd5..69e04dd5d 100644 --- a/src/addon/mod/page/providers/module-handler.ts +++ b/src/addon/mod/page/providers/module-handler.ts @@ -24,7 +24,8 @@ import { CoreCourseProvider } from '@core/course/providers/course'; */ @Injectable() export class AddonModPageModuleHandler implements CoreCourseModuleHandler { - name = 'page'; + name = 'AddonModPage'; + modName = 'page'; constructor(private courseProvider: CoreCourseProvider, protected pageProvider: AddonModPageProvider) { } diff --git a/src/addon/mod/page/providers/page.ts b/src/addon/mod/page/providers/page.ts index aa9e68a18..11647e68b 100644 --- a/src/addon/mod/page/providers/page.ts +++ b/src/addon/mod/page/providers/page.ts @@ -31,7 +31,7 @@ export class AddonModPageProvider { constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private courseProvider: CoreCourseProvider, private utils: CoreUtilsProvider, private filepoolProvider: CoreFilepoolProvider) { - this.logger = logger.getInstance('mmaModPageProvider'); + this.logger = logger.getInstance('AddonModPageProvider'); } /** diff --git a/src/addon/mod/page/providers/prefetch-handler.ts b/src/addon/mod/page/providers/prefetch-handler.ts index 8ee99b75a..32f6627e6 100644 --- a/src/addon/mod/page/providers/prefetch-handler.ts +++ b/src/addon/mod/page/providers/prefetch-handler.ts @@ -23,7 +23,8 @@ import { AddonModPageHelperProvider } from './helper'; */ @Injectable() export class AddonModPagePrefetchHandler extends CoreCourseModulePrefetchHandlerBase { - name = 'page'; + name = 'AddonModPage'; + modName = 'page'; component = AddonModPageProvider.COMPONENT; updatesNames = /^configuration$|^.*files$/; isResource = true; diff --git a/src/addon/mod/resource/providers/link-handler.ts b/src/addon/mod/resource/providers/link-handler.ts index 86ae7acc9..2a84bbf49 100644 --- a/src/addon/mod/resource/providers/link-handler.ts +++ b/src/addon/mod/resource/providers/link-handler.ts @@ -15,7 +15,6 @@ import { Injectable } from '@angular/core'; import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler'; import { CoreCourseHelperProvider } from '@core/course/providers/helper'; -import { AddonModResourceProvider } from './resource'; /** * Handler to treat links to resource. @@ -25,6 +24,6 @@ export class AddonModResourceLinkHandler extends CoreContentLinksModuleIndexHand name = 'AddonModResourceLinkHandler'; constructor(courseHelper: CoreCourseHelperProvider) { - super(courseHelper, AddonModResourceProvider.COMPONENT, 'resource'); + super(courseHelper, 'AddonModResource', 'resource'); } } diff --git a/src/addon/mod/resource/providers/module-handler.ts b/src/addon/mod/resource/providers/module-handler.ts index f952695a0..a531d8029 100644 --- a/src/addon/mod/resource/providers/module-handler.ts +++ b/src/addon/mod/resource/providers/module-handler.ts @@ -26,7 +26,8 @@ import { CoreMimetypeUtilsProvider } from '@providers/utils/mimetype'; */ @Injectable() export class AddonModResourceModuleHandler implements CoreCourseModuleHandler { - name = 'resource'; + name = 'AddonModResource'; + modName = 'resource'; constructor(protected resourceProvider: AddonModResourceProvider, private courseProvider: CoreCourseProvider, protected mimetypeUtils: CoreMimetypeUtilsProvider, private resourceHelper: AddonModResourceHelperProvider) { } diff --git a/src/addon/mod/resource/providers/prefetch-handler.ts b/src/addon/mod/resource/providers/prefetch-handler.ts index a17dc360e..d6d9db96f 100644 --- a/src/addon/mod/resource/providers/prefetch-handler.ts +++ b/src/addon/mod/resource/providers/prefetch-handler.ts @@ -23,7 +23,8 @@ import { CoreFilepoolProvider } from '@providers/filepool'; */ @Injectable() export class AddonModResourcePrefetchHandler extends CoreCourseModulePrefetchHandlerBase { - name = 'resource'; + name = 'AddonModResource'; + modName = 'resource'; component = AddonModResourceProvider.COMPONENT; isResource = true; diff --git a/src/addon/mod/survey/providers/link-handler.ts b/src/addon/mod/survey/providers/link-handler.ts index 5db79d39b..0189bcc4a 100644 --- a/src/addon/mod/survey/providers/link-handler.ts +++ b/src/addon/mod/survey/providers/link-handler.ts @@ -15,7 +15,6 @@ import { Injectable } from '@angular/core'; import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler'; import { CoreCourseHelperProvider } from '@core/course/providers/helper'; -import { AddonModSurveyProvider } from './survey'; /** * Handler to treat links to survey. @@ -25,6 +24,6 @@ export class AddonModSurveyLinkHandler extends CoreContentLinksModuleIndexHandle name = 'AddonModSurveyLinkHandler'; constructor(courseHelper: CoreCourseHelperProvider) { - super(courseHelper, AddonModSurveyProvider.COMPONENT, 'survey'); + super(courseHelper, 'AddonModSurvey', 'survey'); } } diff --git a/src/addon/mod/survey/providers/module-handler.ts b/src/addon/mod/survey/providers/module-handler.ts index a2255adde..4cefa0b32 100644 --- a/src/addon/mod/survey/providers/module-handler.ts +++ b/src/addon/mod/survey/providers/module-handler.ts @@ -23,7 +23,8 @@ import { CoreCourseProvider } from '@core/course/providers/course'; */ @Injectable() export class AddonModSurveyModuleHandler implements CoreCourseModuleHandler { - name = 'survey'; + name = 'AddonModSurvey'; + modName = 'survey'; constructor(private courseProvider: CoreCourseProvider) { } diff --git a/src/addon/mod/survey/providers/prefetch-handler.ts b/src/addon/mod/survey/providers/prefetch-handler.ts index 1dce26b38..6b1c998dc 100644 --- a/src/addon/mod/survey/providers/prefetch-handler.ts +++ b/src/addon/mod/survey/providers/prefetch-handler.ts @@ -22,7 +22,8 @@ import { AddonModSurveyHelperProvider } from './helper'; */ @Injectable() export class AddonModSurveyPrefetchHandler extends CoreCourseModulePrefetchHandlerBase { - name = 'survey'; + name = 'AddonModSurvey'; + modName = 'survey'; component = AddonModSurveyProvider.COMPONENT; updatesNames = /^configuration$|^.*files$|^answers$/; diff --git a/src/addon/mod/url/providers/link-handler.ts b/src/addon/mod/url/providers/link-handler.ts index c9ad1c24b..d880a0b9a 100644 --- a/src/addon/mod/url/providers/link-handler.ts +++ b/src/addon/mod/url/providers/link-handler.ts @@ -15,7 +15,6 @@ import { Injectable } from '@angular/core'; import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler'; import { CoreCourseHelperProvider } from '@core/course/providers/helper'; -import { AddonModUrlProvider } from './url'; /** * Handler to treat links to url. @@ -25,6 +24,6 @@ export class AddonModUrlLinkHandler extends CoreContentLinksModuleIndexHandler { name = 'AddonModUrlLinkHandler'; constructor(courseHelper: CoreCourseHelperProvider) { - super(courseHelper, AddonModUrlProvider.COMPONENT, 'url'); + super(courseHelper, 'AddonModUrl', 'url'); } } diff --git a/src/addon/mod/url/providers/module-handler.ts b/src/addon/mod/url/providers/module-handler.ts index 7bc5e1166..f1162e636 100644 --- a/src/addon/mod/url/providers/module-handler.ts +++ b/src/addon/mod/url/providers/module-handler.ts @@ -25,7 +25,8 @@ import { AddonModUrlHelperProvider } from './helper'; */ @Injectable() export class AddonModUrlModuleHandler implements CoreCourseModuleHandler { - name = 'url'; + name = 'AddonModUrl'; + modName = 'url'; constructor(private courseProvider: CoreCourseProvider, private urlProvider: AddonModUrlProvider, private urlHelper: AddonModUrlHelperProvider) { } diff --git a/src/addon/notes/providers/user-handler.ts b/src/addon/notes/providers/user-handler.ts index ad48c0f06..ffa1c367c 100644 --- a/src/addon/notes/providers/user-handler.ts +++ b/src/addon/notes/providers/user-handler.ts @@ -25,7 +25,7 @@ import { AddonNotesProvider } from './notes'; */ @Injectable() export class AddonNotesUserHandler implements CoreUserProfileHandler { - name = 'AddonNotes'; + name = 'AddonNotes:addNote'; priority = 200; type = CoreUserDelegate.TYPE_COMMUNICATION; addNoteEnabledCache = {}; @@ -65,8 +65,8 @@ export class AddonNotesUserHandler implements CoreUserProfileHandler { * * @param {any} user User to check. * @param {number} courseId Course ID. - * @param {any} [navOptions] Course navigation options for current user. See $mmCourses#getUserNavigationOptions. - * @param {any} [admOptions] Course admin options for current user. See $mmCourses#getUserAdministrationOptions. + * @param {any} [navOptions] Course navigation options for current user. See CoreCoursesProvider.getUserNavigationOptions. + * @param {any} [admOptions] Course admin options for current user. See CoreCoursesProvider.getUserAdministrationOptions. * @return {boolean|Promise} Promise resolved with true if enabled, resolved with false otherwise. */ isEnabledForUser(user: any, courseId: number, navOptions?: any, admOptions?: any): boolean | Promise { diff --git a/src/addon/userprofilefield/checkbox/providers/handler.ts b/src/addon/userprofilefield/checkbox/providers/handler.ts index 4383da420..42297a1a2 100644 --- a/src/addon/userprofilefield/checkbox/providers/handler.ts +++ b/src/addon/userprofilefield/checkbox/providers/handler.ts @@ -21,7 +21,8 @@ import { AddonUserProfileFieldCheckboxComponent } from '../component/checkbox'; */ @Injectable() export class AddonUserProfileFieldCheckboxHandler implements CoreUserProfileFieldHandler { - name = 'checkbox'; + name = 'AddonUserProfileFieldCheckbox'; + type = 'checkbox'; constructor() { // Nothing to do. diff --git a/src/addon/userprofilefield/datetime/providers/handler.ts b/src/addon/userprofilefield/datetime/providers/handler.ts index 2f2ae2513..65a7a6f66 100644 --- a/src/addon/userprofilefield/datetime/providers/handler.ts +++ b/src/addon/userprofilefield/datetime/providers/handler.ts @@ -21,7 +21,8 @@ import { AddonUserProfileFieldDatetimeComponent } from '../component/datetime'; */ @Injectable() export class AddonUserProfileFieldDatetimeHandler implements CoreUserProfileFieldHandler { - name = 'datetime'; + name = 'AddonUserProfileFieldDatetime'; + type = 'datetime'; constructor() { // Nothing to do. diff --git a/src/addon/userprofilefield/menu/providers/handler.ts b/src/addon/userprofilefield/menu/providers/handler.ts index 89d536561..6516c0559 100644 --- a/src/addon/userprofilefield/menu/providers/handler.ts +++ b/src/addon/userprofilefield/menu/providers/handler.ts @@ -21,7 +21,8 @@ import { AddonUserProfileFieldMenuComponent } from '../component/menu'; */ @Injectable() export class AddonUserProfileFieldMenuHandler implements CoreUserProfileFieldHandler { - name = 'menu'; + name = 'AddonUserProfileFieldMenu'; + type = 'menu'; constructor() { // Nothing to do. diff --git a/src/addon/userprofilefield/text/providers/handler.ts b/src/addon/userprofilefield/text/providers/handler.ts index 5c4ce7d9f..2cdcac9ee 100644 --- a/src/addon/userprofilefield/text/providers/handler.ts +++ b/src/addon/userprofilefield/text/providers/handler.ts @@ -22,7 +22,8 @@ import { CoreTextUtilsProvider } from '@providers/utils/text'; */ @Injectable() export class AddonUserProfileFieldTextHandler implements CoreUserProfileFieldHandler { - name = 'text'; + name = 'AddonUserProfileFieldText'; + type = 'text'; constructor(private textUtils: CoreTextUtilsProvider) { } diff --git a/src/addon/userprofilefield/textarea/providers/handler.ts b/src/addon/userprofilefield/textarea/providers/handler.ts index b2bffda4e..fc079ffb7 100644 --- a/src/addon/userprofilefield/textarea/providers/handler.ts +++ b/src/addon/userprofilefield/textarea/providers/handler.ts @@ -22,7 +22,8 @@ import { CoreTextUtilsProvider } from '@providers/utils/text'; */ @Injectable() export class AddonUserProfileFieldTextareaHandler implements CoreUserProfileFieldHandler { - name = 'textarea'; + name = 'AddonUserProfileFieldTextarea'; + type = 'textarea'; constructor(private textUtils: CoreTextUtilsProvider) { } diff --git a/src/classes/delegate.ts b/src/classes/delegate.ts index 7f19b8c00..953de9ac0 100644 --- a/src/classes/delegate.ts +++ b/src/classes/delegate.ts @@ -20,6 +20,7 @@ import { CoreEventsProvider } from '@providers/events'; export interface CoreDelegateHandler { /** * Name of the handler, or name and sub context (AddonMessages, AddonMessages:blockContact, ...). + * This name will be used to check if the feature is disabled. * @type {string} */ name: string; @@ -74,6 +75,14 @@ export class CoreDelegate { */ protected featurePrefix: string; + /** + * Name of the property to be used to index the handlers. By default, the handler's name will be used. + * If your delegate uses a Moodle component name to identify the handlers, please override this property. + * E.g. CoreCourseModuleDelegate uses 'modName' to index the handlers. + * @type {string} + */ + protected handlerNameProperty = 'name'; + /** * Constructor of the Delegate. * @@ -182,14 +191,14 @@ export class CoreDelegate { * @return {boolean} True when registered, false if already registered. */ registerHandler(handler: CoreDelegateHandler): boolean { - if (typeof this.handlers[handler.name] !== 'undefined') { - this.logger.log(`Addon '${handler.name}' already registered`); + if (typeof this.handlers[handler[this.handlerNameProperty]] !== 'undefined') { + this.logger.log(`Handler '${handler[this.handlerNameProperty]}' already registered`); return false; } - this.logger.log(`Registered addon '${handler.name}'`); - this.handlers[handler.name] = handler; + this.logger.log(`Registered handler '${handler[this.handlerNameProperty]}'`); + this.handlers[handler[this.handlerNameProperty]] = handler; return true; } @@ -222,9 +231,9 @@ export class CoreDelegate { // Check that site hasn't changed since the check started. if (this.isLastUpdateCall(time) && this.sitesProvider.getCurrentSiteId() === siteId) { if (enabled) { - this.enabledHandlers[handler.name] = handler; + this.enabledHandlers[handler[this.handlerNameProperty]] = handler; } else { - delete this.enabledHandlers[handler.name]; + delete this.enabledHandlers[handler[this.handlerNameProperty]]; } } }); diff --git a/src/classes/site.ts b/src/classes/site.ts index 3846ae746..d01a31ac2 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -146,18 +146,18 @@ export interface LocalMobileResponse { */ export class CoreSite { // List of injected services. This class isn't injectable, so it cannot use DI. - protected appProvider; - protected dbProvider; - protected domUtils; - protected eventsProvider; - protected fileProvider; - protected http; - protected textUtils; - protected timeUtils; - protected translate; - protected utils; - protected urlUtils; - protected wsProvider; + protected appProvider: CoreAppProvider; + protected dbProvider: CoreDbProvider; + protected domUtils: CoreDomUtilsProvider; + protected eventsProvider: CoreEventsProvider; + protected fileProvider: CoreFileProvider; + protected http: HttpClient; + protected textUtils: CoreTextUtilsProvider; + protected timeUtils: CoreTimeUtilsProvider; + protected translate: TranslateService; + protected utils: CoreUtilsProvider; + protected urlUtils: CoreUrlUtilsProvider; + protected wsProvider: CoreWSProvider; // Variables for the database. protected WS_CACHE_TABLE = 'wscache'; @@ -184,18 +184,20 @@ export class CoreSite { ] }; - // Rest of variables. - protected logger; - protected db: SQLiteDB; - protected cleanUnicode = false; - protected lastAutoLogin = 0; - protected moodleReleases = { + // Versions of Moodle releases. + protected MOODLE_RELEASES = { 3.1: 2016052300, 3.2: 2016120500, 3.3: 2017051503, 3.4: 2017111300 }; + // Rest of variables. + protected logger; + protected db: SQLiteDB; + protected cleanUnicode = false; + protected lastAutoLogin = 0; + /** * Create a site. * @@ -366,6 +368,7 @@ export class CoreSite { * @param {any} Config. */ setConfig(config: any): void { + config.tool_mobile_disabledfeatures = this.textUtils.treatDisabledFeatures(config.tool_mobile_disabledfeatures); this.config = config; } @@ -935,7 +938,7 @@ export class CoreSite { const siteFolder = this.fileProvider.getSiteFolder(this.id); return this.fileProvider.removeDir(siteFolder).catch(() => { - // Ignore any errors, $mmFS.removeDir fails if folder doesn't exists. + // Ignore any errors, CoreFileProvider.removeDir fails if folder doesn't exists. }); } else { return Promise.resolve(); @@ -1133,9 +1136,9 @@ export class CoreSite { * @param {string} url The URL to open. * @param {any} [options] Override default options passed to InAppBrowser. * @param {string} [alertMessage] If defined, an alert will be shown before opening the inappbrowser. - * @return {Promise} Promise resolved when done. + * @return {Promise} Promise resolved when done. */ - openInAppWithAutoLogin(url: string, options?: any, alertMessage?: string): Promise { + openInAppWithAutoLogin(url: string, options?: any, alertMessage?: string): Promise { return this.openWithAutoLogin(true, url, options, alertMessage); } @@ -1145,9 +1148,9 @@ export class CoreSite { * @param {string} url The URL to open. * @param {object} [options] Override default options passed to inappbrowser. * @param {string} [alertMessage] If defined, an alert will be shown before opening the inappbrowser. - * @return {Promise} Promise resolved when done. + * @return {Promise} Promise resolved when done. */ - openInAppWithAutoLoginIfSameSite(url: string, options?: any, alertMessage?: string): Promise { + openInAppWithAutoLoginIfSameSite(url: string, options?: any, alertMessage?: string): Promise { return this.openWithAutoLoginIfSameSite(true, url, options, alertMessage); } @@ -1158,12 +1161,12 @@ export class CoreSite { * @param {string} url The URL to open. * @param {object} [options] Override default options passed to $cordovaInAppBrowser#open. * @param {string} [alertMessage] If defined, an alert will be shown before opening the browser/inappbrowser. - * @return {Promise} Promise resolved when done. Resolve param is returned only if inApp=true. + * @return {Promise} Promise resolved when done. Resolve param is returned only if inApp=true. */ - openWithAutoLogin(inApp: boolean, url: string, options?: any, alertMessage?: string): Promise { + openWithAutoLogin(inApp: boolean, url: string, options?: any, alertMessage?: string): Promise { // Convenience function to open the URL. const open = (url): Promise => { - return new Promise((resolve, reject): void => { + return new Promise((resolve, reject): void => { if (modal) { modal.dismiss(); } @@ -1223,9 +1226,10 @@ export class CoreSite { * @param {string} url The URL to open. * @param {object} [options] Override default options passed to inappbrowser. * @param {string} [alertMessage] If defined, an alert will be shown before opening the browser/inappbrowser. - * @return {Promise} Promise resolved when done. Resolve param is returned only if inApp=true. + * @return {Promise} Promise resolved when done. Resolve param is returned only if inApp=true. */ - openWithAutoLoginIfSameSite(inApp: boolean, url: string, options?: any, alertMessage?: string): Promise { + openWithAutoLoginIfSameSite(inApp: boolean, url: string, options?: any, alertMessage?: string) + : Promise { if (this.containsUrl(url)) { return this.openWithAutoLogin(inApp, url, options, alertMessage); } else { @@ -1396,12 +1400,12 @@ export class CoreSite { return 0; } - if (typeof this.moodleReleases[data.major] == 'undefined') { + if (typeof this.MOODLE_RELEASES[data.major] == 'undefined') { // Major version not found. Use the last one. - data.major = Object.keys(this.moodleReleases).slice(-1); + data.major = Object.keys(this.MOODLE_RELEASES).slice(-1); } - return this.moodleReleases[data.major] + data.minor; + return this.MOODLE_RELEASES[data.major] + data.minor; } /** @@ -1431,7 +1435,7 @@ export class CoreSite { */ protected getNextMajorVersionNumber(version: string): number { const data = this.getMajorAndMinor(version), - releases = Object.keys(this.moodleReleases); + releases = Object.keys(this.MOODLE_RELEASES); let position; if (!data) { @@ -1443,9 +1447,9 @@ export class CoreSite { if (position == -1 || position == releases.length - 1) { // Major version not found or it's the last one. Use the last one. - return this.moodleReleases[releases[position]]; + return this.MOODLE_RELEASES[releases[position]]; } - return this.moodleReleases[releases[position + 1]]; + return this.MOODLE_RELEASES[releases[position + 1]]; } } diff --git a/src/core/contentlinks/classes/module-grade-handler.ts b/src/core/contentlinks/classes/module-grade-handler.ts index 68c26f9b6..02ade7789 100644 --- a/src/core/contentlinks/classes/module-grade-handler.ts +++ b/src/core/contentlinks/classes/module-grade-handler.ts @@ -45,7 +45,7 @@ export class CoreContentLinksModuleGradeHandler extends CoreContentLinksHandlerB // Match the grade.php URL with an id param. this.pattern = new RegExp('\/mod\/' + modName + '\/grade\.php.*([\&\?]id=\\d+)'); - this.featureName = '$mmCourseDelegate_' + addon; + this.featureName = 'CoreCourseModuleDelegate_' + addon; } /** diff --git a/src/core/contentlinks/classes/module-index-handler.ts b/src/core/contentlinks/classes/module-index-handler.ts index 28413ed26..2a10bee94 100644 --- a/src/core/contentlinks/classes/module-index-handler.ts +++ b/src/core/contentlinks/classes/module-index-handler.ts @@ -33,7 +33,7 @@ export class CoreContentLinksModuleIndexHandler extends CoreContentLinksHandlerB // Match the view.php URL with an id param. this.pattern = new RegExp('\/mod\/' + modName + '\/view\.php.*([\&\?]id=\\d+)'); - this.featureName = '$mmCourseDelegate_' + addon; + this.featureName = 'CoreCourseModuleDelegate_' + addon; } /** diff --git a/src/core/course/classes/module-prefetch-handler.ts b/src/core/course/classes/module-prefetch-handler.ts index c078e1b6a..076b0e44e 100644 --- a/src/core/course/classes/module-prefetch-handler.ts +++ b/src/core/course/classes/module-prefetch-handler.ts @@ -53,11 +53,17 @@ export type prefetchFunction = (module: any, courseId: number, single: boolean, * recommended to call the prefetchPackage function since it'll handle changing the status of the module. */ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePrefetchHandler { + /** + * Name of the handler. + * @type {string} + */ + name = 'CoreCourseModulePrefetchHandler'; + /** * Name of the module. It should match the "modname" of the module returned in core_course_get_contents. * @type {string} */ - name = ''; + modName = 'default'; /** * The handler's component. diff --git a/src/core/course/course.module.ts b/src/core/course/course.module.ts index d26fbd730..eccf47d56 100644 --- a/src/core/course/course.module.ts +++ b/src/core/course/course.module.ts @@ -20,6 +20,7 @@ import { CoreCourseModuleDelegate } from './providers/module-delegate'; import { CoreCourseModulePrefetchDelegate } from './providers/module-prefetch-delegate'; import { CoreCourseOptionsDelegate } from './providers/options-delegate'; import { CoreCourseFormatDefaultHandler } from './providers/default-format'; +import { CoreCourseModuleDefaultHandler } from './providers/default-module'; import { CoreCourseFormatSingleActivityModule } from './formats/singleactivity/singleactivity.module'; import { CoreCourseFormatSocialModule } from './formats/social/social.module'; import { CoreCourseFormatTopicsModule } from './formats/topics/topics.module'; @@ -44,7 +45,8 @@ export const CORE_COURSE_PROVIDERS: any[] = [ CoreCourseFormatSocialModule ], providers: CORE_COURSE_PROVIDERS.concat([ - CoreCourseFormatDefaultHandler + CoreCourseFormatDefaultHandler, + CoreCourseModuleDefaultHandler ]), exports: [] }) diff --git a/src/core/course/formats/singleactivity/providers/handler.ts b/src/core/course/formats/singleactivity/providers/handler.ts index 9dd528021..67090c9ee 100644 --- a/src/core/course/formats/singleactivity/providers/handler.ts +++ b/src/core/course/formats/singleactivity/providers/handler.ts @@ -21,7 +21,8 @@ import { CoreCourseFormatSingleActivityComponent } from '../components/singleact */ @Injectable() export class CoreCourseFormatSingleActivityHandler implements CoreCourseFormatHandler { - name = 'singleactivity'; + name = 'CoreCourseFormatSingleActivity'; + format = 'singleactivity'; constructor() { // Nothing to do. diff --git a/src/core/course/formats/social/providers/handler.ts b/src/core/course/formats/social/providers/handler.ts index 25d942515..fd4c7f5bb 100644 --- a/src/core/course/formats/social/providers/handler.ts +++ b/src/core/course/formats/social/providers/handler.ts @@ -21,5 +21,6 @@ import { CoreCourseFormatSingleActivityHandler } from '../../singleactivity/prov */ @Injectable() export class CoreCourseFormatSocialHandler extends CoreCourseFormatSingleActivityHandler { - name = 'social'; + name = 'CoreCourseFormatSocial'; + format = 'social'; } diff --git a/src/core/course/formats/topics/providers/handler.ts b/src/core/course/formats/topics/providers/handler.ts index bfac65132..0f6d49e3c 100644 --- a/src/core/course/formats/topics/providers/handler.ts +++ b/src/core/course/formats/topics/providers/handler.ts @@ -20,7 +20,8 @@ import { CoreCourseFormatHandler } from '../../../providers/format-delegate'; */ @Injectable() export class CoreCourseFormatTopicsHandler implements CoreCourseFormatHandler { - name = 'topics'; + name = 'CoreCourseFormatTopics'; + format = 'topics'; constructor() { // Nothing to do. diff --git a/src/core/course/formats/weeks/providers/handler.ts b/src/core/course/formats/weeks/providers/handler.ts index 7fea18e9a..675e343b1 100644 --- a/src/core/course/formats/weeks/providers/handler.ts +++ b/src/core/course/formats/weeks/providers/handler.ts @@ -22,7 +22,8 @@ import { CoreConstants } from '../../../../constants'; */ @Injectable() export class CoreCourseFormatWeeksHandler implements CoreCourseFormatHandler { - name = 'weeks'; + name = 'CoreCourseFormatWeeks'; + format = 'weeks'; constructor(private timeUtils: CoreTimeUtilsProvider) { } diff --git a/src/core/course/providers/default-format.ts b/src/core/course/providers/default-format.ts index 2e9a58a17..c8e596d22 100644 --- a/src/core/course/providers/default-format.ts +++ b/src/core/course/providers/default-format.ts @@ -23,7 +23,8 @@ import { CoreCourseProvider } from './course'; */ @Injectable() export class CoreCourseFormatDefaultHandler implements CoreCourseFormatHandler { - name = 'default'; + name = 'CoreCourseFormatDefault'; + format = 'default'; constructor(private coursesProvider: CoreCoursesProvider) { } diff --git a/src/core/course/providers/default-module.ts b/src/core/course/providers/default-module.ts new file mode 100644 index 000000000..65b52a9df --- /dev/null +++ b/src/core/course/providers/default-module.ts @@ -0,0 +1,92 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable, Injector } from '@angular/core'; +import { NavController, NavOptions } from 'ionic-angular'; +import { CoreSitesProvider } from '@providers/sites'; +import { CoreCourseModuleHandler, CoreCourseModuleHandlerData } from './module-delegate'; +import { CoreCourseProvider } from './course'; + +/** + * Default handler used when the module doesn't have a specific implementation. + */ +@Injectable() +export class CoreCourseModuleDefaultHandler implements CoreCourseModuleHandler { + name = 'CoreCourseModuleDefault'; + modName = 'default'; + + constructor(private sitesProvider: CoreSitesProvider, private courseProvider: CoreCourseProvider) { } + + /** + * Whether or not the handler is enabled on a site level. + * + * @return {boolean|Promise} True or promise resolved with true if enabled. + */ + isEnabled(): boolean | Promise { + return true; + } + + /** + * Get the data required to display the module in the course contents view. + * + * @param {any} module The module object. + * @param {number} courseId The course ID. + * @param {number} sectionId The section ID. + * @return {CoreCourseModuleHandlerData} Data to render the module. + */ + getData(module: any, courseId: number, sectionId: number): CoreCourseModuleHandlerData { + // Return the default data. + const defaultData: CoreCourseModuleHandlerData = { + icon: this.courseProvider.getModuleIconSrc(module.modname), + title: module.name, + class: 'core-course-default-handler core-course-module-' + module.modname + '-handler', + action: (event: Event, navCtrl: NavController, module: any, courseId: number, options?: NavOptions): void => { + event.preventDefault(); + event.stopPropagation(); + + navCtrl.push('CoreCourseUnsupportedModulePage', { module: module }, options); + } + }; + + if (module.url) { + defaultData.buttons = [{ + icon: 'open', + label: 'core.openinbrowser', + action: (e: Event): void => { + e.preventDefault(); + e.stopPropagation(); + + this.sitesProvider.getCurrentSite().openInBrowserWithAutoLoginIfSameSite(module.url); + } + }]; + } + + return defaultData; + } + + /** + * Get the component to render the module. This is needed to support singleactivity course format. + * The component returned must implement CoreCourseModuleMainComponent. + * It's recommended to return the class of the component, but you can also return an instance of the component. + * + * @param {Injector} injector Injector. + * @param {any} course The course object. + * @param {any} module The module object. + * @return {any|Promise} The component (or promise resolved with component) to use, undefined if not found. + */ + getMainComponent(injector: Injector, course: any, module: any): any | Promise { + // We can't inject CoreCourseUnsupportedModuleComponent here due to circular dependencies. + // Don't return anything, by default it will use CoreCourseUnsupportedModuleComponent. + } +} diff --git a/src/core/course/providers/format-delegate.ts b/src/core/course/providers/format-delegate.ts index 55f064f2a..e79841ace 100644 --- a/src/core/course/providers/format-delegate.ts +++ b/src/core/course/providers/format-delegate.ts @@ -25,6 +25,12 @@ import { CoreDelegate, CoreDelegateHandler } from '@classes/delegate'; * Interface that all course format handlers must implement. */ export interface CoreCourseFormatHandler extends CoreDelegateHandler { + /** + * Name of the format the handler supports. E.g. 'singleactivity'. + * @type {string} + */ + format: string; + /** * Get the title to use in course page. If not defined, course fullname. * This function will be called without sections first, and then call it again when the sections are retrieved. @@ -149,9 +155,8 @@ export interface CoreCourseFormatHandler extends CoreDelegateHandler { */ @Injectable() export class CoreCourseFormatDelegate extends CoreDelegate { - protected handlers: { [s: string]: CoreCourseFormatHandler } = {}; // All registered handlers. - protected enabledHandlers: { [s: string]: CoreCourseFormatHandler } = {}; // Handlers enabled for the current site. - protected featurePrefix = 'CoreCourseFormatHandler_'; + protected featurePrefix = 'CoreCourseFormatDelegate_'; + protected handlerNameProperty = 'format'; constructor(loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider, eventsProvider: CoreEventsProvider, protected defaultHandler: CoreCourseFormatDefaultHandler) { @@ -165,7 +170,7 @@ export class CoreCourseFormatDelegate extends CoreDelegate { * @return {boolean} Whether it allows seeing all sections at the same time. */ canViewAllSections(course: any): boolean { - return this.executeFunction(course.format, 'canViewAllSections', [course]); + return this.executeFunctionOnEnabled(course.format, 'canViewAllSections', [course]); } /** @@ -175,7 +180,7 @@ export class CoreCourseFormatDelegate extends CoreDelegate { * @return {boolean} Whether the option to enable section/module download should be displayed */ displayEnableDownload(course: any): boolean { - return this.executeFunction(course.format, 'displayEnableDownload', [course]); + return this.executeFunctionOnEnabled(course.format, 'displayEnableDownload', [course]); } /** @@ -185,25 +190,7 @@ export class CoreCourseFormatDelegate extends CoreDelegate { * @return {boolean} Whether the section selector should be displayed. */ displaySectionSelector(course: any): boolean { - return this.executeFunction(course.format, 'displaySectionSelector', [course]); - } - - /** - * Execute a certain function in a course format handler. - * If the handler isn't found or function isn't defined, call the same function in the default handler. - * - * @param {string} format The format name. - * @param {string} fnName Name of the function to execute. - * @param {any[]} params Parameters to pass to the function. - * @return {any} Function returned value or default value. - */ - protected executeFunction(format: string, fnName: string, params?: any[]): any { - const handler = this.enabledHandlers[format]; - if (handler && handler[fnName]) { - return handler[fnName].apply(handler, params); - } else if (this.defaultHandler[fnName]) { - return this.defaultHandler[fnName].apply(this.defaultHandler, params); - } + return this.executeFunctionOnEnabled(course.format, 'displaySectionSelector', [course]); } /** @@ -214,7 +201,8 @@ export class CoreCourseFormatDelegate extends CoreDelegate { * @return {Promise} Promise resolved with component to use, undefined if not found. */ getAllSectionsComponent(injector: Injector, course: any): Promise { - return Promise.resolve(this.executeFunction(course.format, 'getAllSectionsComponent', [injector, course])).catch((e) => { + return Promise.resolve(this.executeFunctionOnEnabled(course.format, 'getAllSectionsComponent', [injector, course])) + .catch((e) => { this.logger.error('Error getting all sections component', e); }); } @@ -227,7 +215,8 @@ export class CoreCourseFormatDelegate extends CoreDelegate { * @return {Promise} Promise resolved with component to use, undefined if not found. */ getCourseFormatComponent(injector: Injector, course: any): Promise { - return Promise.resolve(this.executeFunction(course.format, 'getCourseFormatComponent', [injector, course])).catch((e) => { + return Promise.resolve(this.executeFunctionOnEnabled(course.format, 'getCourseFormatComponent', [injector, course])) + .catch((e) => { this.logger.error('Error getting course format component', e); }); } @@ -240,7 +229,8 @@ export class CoreCourseFormatDelegate extends CoreDelegate { * @return {Promise} Promise resolved with component to use, undefined if not found. */ getCourseSummaryComponent(injector: Injector, course: any): Promise { - return Promise.resolve(this.executeFunction(course.format, 'getCourseSummaryComponent', [injector, course])).catch((e) => { + return Promise.resolve(this.executeFunctionOnEnabled(course.format, 'getCourseSummaryComponent', [injector, course])) + .catch((e) => { this.logger.error('Error getting course summary component', e); }); } @@ -253,7 +243,7 @@ export class CoreCourseFormatDelegate extends CoreDelegate { * @return {string} Course title. */ getCourseTitle(course: any, sections?: any[]): string { - return this.executeFunction(course.format, 'getCourseTitle', [course, sections]); + return this.executeFunctionOnEnabled(course.format, 'getCourseTitle', [course, sections]); } /** @@ -265,7 +255,7 @@ export class CoreCourseFormatDelegate extends CoreDelegate { */ getCurrentSection(course: any, sections: any[]): Promise { // Convert the result to a Promise if it isn't. - return Promise.resolve(this.executeFunction(course.format, 'getCurrentSection', [course, sections])).catch(() => { + return Promise.resolve(this.executeFunctionOnEnabled(course.format, 'getCurrentSection', [course, sections])).catch(() => { // This function should never fail. Just return the first section. if (sections[0].id != CoreCourseProvider.ALL_SECTIONS_ID) { return sections[0]; @@ -283,7 +273,7 @@ export class CoreCourseFormatDelegate extends CoreDelegate { * @return {Promise} Promise resolved with component to use, undefined if not found. */ getSectionSelectorComponent(injector: Injector, course: any): Promise { - return Promise.resolve(this.executeFunction(course.format, 'getSectionSelectorComponent', [injector, course])) + return Promise.resolve(this.executeFunctionOnEnabled(course.format, 'getSectionSelectorComponent', [injector, course])) .catch((e) => { this.logger.error('Error getting section selector component', e); }); @@ -298,7 +288,8 @@ export class CoreCourseFormatDelegate extends CoreDelegate { * @return {Promise} Promise resolved with component to use, undefined if not found. */ getSingleSectionComponent(injector: Injector, course: any): Promise { - return Promise.resolve(this.executeFunction(course.format, 'getSingleSectionComponent', [injector, course])).catch((e) => { + return Promise.resolve(this.executeFunctionOnEnabled(course.format, 'getSingleSectionComponent', [injector, course])) + .catch((e) => { this.logger.error('Error getting single section component', e); }); } @@ -311,7 +302,7 @@ export class CoreCourseFormatDelegate extends CoreDelegate { * @return {Promise} Promise resolved when the data is invalidated. */ invalidateData(course: any, sections: any[]): Promise { - return this.executeFunction(course.format, 'invalidateData', [course, sections]); + return this.executeFunctionOnEnabled(course.format, 'invalidateData', [course, sections]); } /** @@ -322,10 +313,6 @@ export class CoreCourseFormatDelegate extends CoreDelegate { * @return {Promise} Promise resolved when done. */ openCourse(navCtrl: NavController, course: any): Promise { - if (this.enabledHandlers[course.format] && this.enabledHandlers[course.format].openCourse) { - return this.enabledHandlers[course.format].openCourse(navCtrl, course); - } - - return navCtrl.push('CoreCourseSectionPage', { course: course }); + return this.executeFunctionOnEnabled(course.format, 'openCourse', [navCtrl, course]); } } diff --git a/src/core/course/providers/helper.ts b/src/core/course/providers/helper.ts index 9457b4ff3..8bc95c52b 100644 --- a/src/core/course/providers/helper.ts +++ b/src/core/course/providers/helper.ts @@ -758,11 +758,8 @@ export class CoreCourseHelperProvider { /** * Get a course status icon from status. * - * @module mm.core.course - * @ngdoc method - * @name $mmCourseHelper#getCourseStatusIconFromStatus - * @param {String} status Course status. - * @return {String} Icon name. + * @param {string} status Course status. + * @return {string} Icon name. */ getCourseStatusIconFromStatus(status: string): string { if (status == CoreConstants.DOWNLOADED) { diff --git a/src/core/course/providers/module-delegate.ts b/src/core/course/providers/module-delegate.ts index 27cc1eab8..3d46aadae 100644 --- a/src/core/course/providers/module-delegate.ts +++ b/src/core/course/providers/module-delegate.ts @@ -19,12 +19,19 @@ import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; import { CoreCourseProvider } from './course'; import { CoreSite } from '@classes/site'; +import { CoreCourseModuleDefaultHandler } from './default-module'; import { CoreDelegate, CoreDelegateHandler } from '@classes/delegate'; /** * Interface that all course module handlers must implement. */ export interface CoreCourseModuleHandler extends CoreDelegateHandler { + /** + * Name of the module. It should match the "modname" of the module returned in core_course_get_contents. + * @type {string} + */ + modName: string; + /** * Get the data required to display the module in the course contents view. * @@ -166,12 +173,11 @@ export interface CoreCourseModuleHandlerButton { */ @Injectable() export class CoreCourseModuleDelegate extends CoreDelegate { - protected handlers: { [s: string]: CoreCourseModuleHandler } = {}; // All registered handlers. - protected enabledHandlers: { [s: string]: CoreCourseModuleHandler } = {}; // Handlers enabled for the current site. - protected featurePrefix = '$mmCourseDelegate_'; + protected featurePrefix = 'CoreCourseModuleDelegate_'; + protected handlerNameProperty = 'modName'; constructor(loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider, eventsProvider: CoreEventsProvider, - protected courseProvider: CoreCourseProvider) { + protected courseProvider: CoreCourseProvider, protected defaultHandler: CoreCourseModuleDefaultHandler) { super('CoreCourseModuleDelegate', loggerProvider, sitesProvider, eventsProvider); } @@ -184,12 +190,10 @@ export class CoreCourseModuleDelegate extends CoreDelegate { * @return {Promise} Promise resolved with component to use, undefined if not found. */ getMainComponent(injector: Injector, course: any, module: any): Promise { - const handler = this.enabledHandlers[module.modname]; - if (handler && handler.getMainComponent) { - return Promise.resolve(handler.getMainComponent(injector, course, module)).catch((err) => { - this.logger.error('Error getting main component', err); - }); - } + return Promise.resolve(this.executeFunctionOnEnabled(module.modname, 'getMainComponent', [injector, course, module])) + .catch((err) => { + this.logger.error('Error getting main component', err); + }); } /** @@ -202,36 +206,7 @@ export class CoreCourseModuleDelegate extends CoreDelegate { * @return {CoreCourseModuleHandlerData} Data to render the module. */ getModuleDataFor(modname: string, module: any, courseId: number, sectionId: number): CoreCourseModuleHandlerData { - if (typeof this.enabledHandlers[modname] != 'undefined') { - return this.enabledHandlers[modname].getData(module, courseId, sectionId); - } - - // Return the default data. - const defaultData: CoreCourseModuleHandlerData = { - icon: this.courseProvider.getModuleIconSrc(module.modname), - title: module.name, - class: 'core-course-default-handler core-course-module-' + module.modname + '-handler', - action: (event: Event, navCtrl: NavController, module: any, courseId: number, options?: NavOptions): void => { - event.preventDefault(); - event.stopPropagation(); - - navCtrl.push('CoreCourseUnsupportedModulePage', { module: module }, options); - } - }; - - if (module.url) { - defaultData.buttons = [{ - icon: 'open', - label: 'core.openinbrowser', - action: (e: Event): void => { - e.preventDefault(); - e.stopPropagation(); - this.sitesProvider.getCurrentSite().openInBrowserWithAutoLoginIfSameSite(module.url); - } - }]; - } - - return defaultData; + return this.executeFunctionOnEnabled(modname, 'getData', [module, courseId, sectionId]); } /** @@ -255,10 +230,12 @@ export class CoreCourseModuleDelegate extends CoreDelegate { * @return {boolean} Whether module is disabled. */ isModuleDisabledInSite(modname: string, site?: CoreSite): boolean { - if (typeof this.handlers[modname] != 'undefined') { + const handler = this.getHandler(modname, true); + + if (handler) { site = site || this.sitesProvider.getCurrentSite(); - return this.isFeatureDisabled(this.handlers[modname], site); + return this.isFeatureDisabled(handler, site); } return false; diff --git a/src/core/course/providers/module-prefetch-delegate.ts b/src/core/course/providers/module-prefetch-delegate.ts index 0fac45323..1e7c5e73f 100644 --- a/src/core/course/providers/module-prefetch-delegate.ts +++ b/src/core/course/providers/module-prefetch-delegate.ts @@ -56,6 +56,12 @@ export type CoreCourseModulesProgressFunction = (data: CoreCourseModulesProgress * Interface that all course prefetch handlers must implement. */ export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler { + /** + * Name of the module. It should match the "modname" of the module returned in core_course_get_contents. + * @type {string} + */ + modName: string; + /** * The handler's component. * @type {string} @@ -214,6 +220,7 @@ export class CoreCourseModulePrefetchDelegate extends CoreDelegate { protected ROOT_CACHE_KEY = 'mmCourse:'; protected statusCache = new CoreCache(); + protected handlerNameProperty = 'modName'; // Promises for check updates, to prevent performing the same request twice at the same time. protected courseUpdatesPromises: { [s: string]: { [s: string]: Promise } } = {}; diff --git a/src/core/course/providers/options-delegate.ts b/src/core/course/providers/options-delegate.ts index 569476d70..32357a8da 100644 --- a/src/core/course/providers/options-delegate.ts +++ b/src/core/course/providers/options-delegate.ts @@ -129,8 +129,6 @@ export interface CoreCourseOptionsHandlerToDisplay { */ @Injectable() export class CoreCourseOptionsDelegate extends CoreDelegate { - protected handlers: { [s: string]: CoreCourseOptionsHandler } = {}; // All registered handlers. - protected enabledHandlers: { [s: string]: CoreCourseOptionsHandler } = {}; // Handlers enabled for the current site. protected loaded: { [courseId: number]: boolean } = {}; protected lastUpdateHandlersForCoursesStart: any = {}; protected coursesHandlers: { @@ -139,7 +137,7 @@ export class CoreCourseOptionsDelegate extends CoreDelegate { } } = {}; - protected featurePrefix = '$mmCoursesDelegate_'; + protected featurePrefix = 'CoreCourseOptionsDelegate_'; constructor(loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider, private utils: CoreUtilsProvider, protected eventsProvider: CoreEventsProvider, private coursesProvider: CoreCoursesProvider) { @@ -440,7 +438,7 @@ export class CoreCourseOptionsDelegate extends CoreDelegate { this.lastUpdateHandlersForCoursesStart[courseId] = now; for (const name in this.enabledHandlers) { - const handler = this.enabledHandlers[name]; + const handler = this.enabledHandlers[name]; // Checks if the handler is enabled for the user. promises.push(Promise.resolve(handler.isEnabledForCourse(courseId, accessData, navOptions, admOptions)) diff --git a/src/core/courses/providers/courses-index-link-handler.ts b/src/core/courses/providers/courses-index-link-handler.ts index 0183689df..834629eac 100644 --- a/src/core/courses/providers/courses-index-link-handler.ts +++ b/src/core/courses/providers/courses-index-link-handler.ts @@ -24,7 +24,7 @@ import { CoreCoursesProvider } from './courses'; @Injectable() export class CoreCoursesIndexLinkHandler extends CoreContentLinksHandlerBase { name = 'CoreCoursesIndexLinkHandler'; - featureName = '$mmSideMenuDelegate_mmCourses'; + featureName = 'CoreMainMenuDelegate_CoreCourses'; pattern = /\/course\/?(index\.php.*)?$/; constructor(private coursesProvider: CoreCoursesProvider, private loginHelper: CoreLoginHelperProvider) { diff --git a/src/core/courses/providers/courses.ts b/src/core/courses/providers/courses.ts index 3118858dd..84a8ba485 100644 --- a/src/core/courses/providers/courses.ts +++ b/src/core/courses/providers/courses.ts @@ -141,7 +141,7 @@ export class CoreCoursesProvider { isMyCoursesDisabledInSite(site?: CoreSite): boolean { site = site || this.sitesProvider.getCurrentSite(); - return site.isFeatureDisabled('$mmSideMenuDelegate_mmCourses'); + return site.isFeatureDisabled('CoreMainMenuDelegate_CoreCourses'); } /** @@ -165,7 +165,7 @@ export class CoreCoursesProvider { isSearchCoursesDisabledInSite(site?: CoreSite): boolean { site = site || this.sitesProvider.getCurrentSite(); - return site.isFeatureDisabled('$mmCoursesDelegate_search'); + return site.isFeatureDisabled('CoreCourseOptionsDelegate_search'); } /** diff --git a/src/core/courses/providers/my-overview-link-handler.ts b/src/core/courses/providers/my-overview-link-handler.ts index e35151615..6bd87143a 100644 --- a/src/core/courses/providers/my-overview-link-handler.ts +++ b/src/core/courses/providers/my-overview-link-handler.ts @@ -23,7 +23,7 @@ import { CoreLoginHelperProvider } from '@core/login/providers/helper'; @Injectable() export class CoreCoursesMyOverviewLinkHandler extends CoreContentLinksHandlerBase { name = 'CoreCoursesMyOverviewLinkHandler'; - featureName = '$mmSideMenuDelegate_mmCourses'; + featureName = 'CoreMainMenuDelegate_CoreCourses'; pattern = /\/my\/?$/; constructor(private loginHelper: CoreLoginHelperProvider) { diff --git a/src/core/courses/providers/my-overview.ts b/src/core/courses/providers/my-overview.ts index 1e744da3c..d64d0dbca 100644 --- a/src/core/courses/providers/my-overview.ts +++ b/src/core/courses/providers/my-overview.ts @@ -231,7 +231,7 @@ export class CoreCoursesMyOverviewProvider { isDisabledInSite(site?: CoreSite): boolean { site = site || this.sitesProvider.getCurrentSite(); - return site.isFeatureDisabled('$mmSideMenuDelegate_mmaMyOverview'); + return site.isFeatureDisabled('CoreMainMenuDelegate_CoreCourses'); } /** diff --git a/src/core/fileuploader/providers/delegate.ts b/src/core/fileuploader/providers/delegate.ts index e0b149c81..b8e7371a7 100644 --- a/src/core/fileuploader/providers/delegate.ts +++ b/src/core/fileuploader/providers/delegate.ts @@ -146,9 +146,6 @@ export interface CoreFileUploaderHandlerDataToReturn extends CoreFileUploaderHan */ @Injectable() export class CoreFileUploaderDelegate extends CoreDelegate { - protected handlers: { [s: string]: CoreFileUploaderHandler } = {}; // All registered handlers. - protected enabledHandlers: { [s: string]: CoreFileUploaderHandler } = {}; // Handlers enabled for the current site. - constructor(loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider, protected eventsProvider: CoreEventsProvider) { super('CoreFileUploaderDelegate', loggerProvider, sitesProvider, eventsProvider); @@ -173,7 +170,7 @@ export class CoreFileUploaderDelegate extends CoreDelegate { const handlers = []; for (const name in this.enabledHandlers) { - const handler = this.enabledHandlers[name]; + const handler = this.enabledHandlers[name]; let supportedMimetypes; if (mimetypes) { diff --git a/src/core/grades/providers/user-handler.ts b/src/core/grades/providers/user-handler.ts index b7f5f42bf..1b8e61de9 100644 --- a/src/core/grades/providers/user-handler.ts +++ b/src/core/grades/providers/user-handler.ts @@ -23,7 +23,7 @@ import { CoreGradesProvider } from './grades'; */ @Injectable() export class CoreGradesUserHandler implements CoreUserProfileHandler { - name = 'mmGrades'; + name = 'CoreGrades:viewGrades'; priority = 400; type = CoreUserDelegate.TYPE_NEW_PAGE; viewGradesEnabledCache = {}; @@ -71,8 +71,8 @@ export class CoreGradesUserHandler implements CoreUserProfileHandler { * * @param {any} user User to check. * @param {number} courseId Course ID. - * @param {any} [navOptions] Course navigation options for current user. See $mmCourses#getUserNavigationOptions. - * @param {any} [admOptions] Course admin options for current user. See $mmCourses#getUserAdministrationOptions. + * @param {any} [navOptions] Course navigation options for current user. See CoreCoursesProvider.getUserNavigationOptions. + * @param {any} [admOptions] Course admin options for current user. See CoreCoursesProvider.getUserAdministrationOptions. * @return {boolean|Promise} Promise resolved with true if enabled, resolved with false otherwise. */ isEnabledForUser(user: any, courseId: number, navOptions?: any, admOptions?: any): boolean | Promise { diff --git a/src/core/login/providers/helper.ts b/src/core/login/providers/helper.ts index 482a7b356..6b45c3571 100644 --- a/src/core/login/providers/helper.ts +++ b/src/core/login/providers/helper.ts @@ -489,12 +489,14 @@ export class CoreLoginHelperProvider { * @return {boolean} Whether email signup is disabled. */ isEmailSignupDisabled(config: any): boolean { - const disabledFeatures = config && config.tool_mobile_disabledfeatures; + let disabledFeatures = config && config.tool_mobile_disabledfeatures; if (!disabledFeatures) { return false; } - const regEx = new RegExp('(,|^)\\$mmLoginEmailSignup(,|$)', 'g'); + disabledFeatures = this.textUtils.treatDisabledFeatures(disabledFeatures); + + const regEx = new RegExp('(,|^)CoreLoginEmailSignup(,|$)', 'g'); return !!disabledFeatures.match(regEx); } @@ -744,8 +746,8 @@ export class CoreLoginHelperProvider { loginUrl += '&passport=' + passport; loginUrl += '&urlscheme=' + CoreConfigConstants.customurlscheme; - // Store the siteurl and passport in $mmConfig for persistence. - // We are "configuring" the app to wait for an SSO. $mmConfig shouldn't be used as a temporary storage. + // Store the siteurl and passport in CoreConfigProvider for persistence. + // We are "configuring" the app to wait for an SSO. CoreConfigProvider shouldn't be used as a temporary storage. this.configProvider.set(CoreConstants.LOGIN_LAUNCH_DATA, JSON.stringify({ siteUrl: siteUrl, passport: passport, diff --git a/src/core/mainmenu/pages/more/more.ts b/src/core/mainmenu/pages/more/more.ts index 9be9b6238..b3a4f6608 100644 --- a/src/core/mainmenu/pages/more/more.ts +++ b/src/core/mainmenu/pages/more/more.ts @@ -80,8 +80,8 @@ export class CoreMainMenuMorePage implements OnDestroy { this.siteInfo = currentSite.getInfo(); this.logoutLabel = 'core.mainmenu.' + (config && config.tool_mobile_forcelogout == '1' ? 'logout' : 'changesite'); - this.showWeb = !currentSite.isFeatureDisabled('$mmSideMenuDelegate_website'); - this.showHelp = !currentSite.isFeatureDisabled('$mmSideMenuDelegate_help'); + this.showWeb = !currentSite.isFeatureDisabled('CoreMainMenuDelegate_website'); + this.showHelp = !currentSite.isFeatureDisabled('CoreMainMenuDelegate_help'); currentSite.getDocsUrl().then((docsUrl) => { this.docsUrl = docsUrl; diff --git a/src/core/mainmenu/providers/delegate.ts b/src/core/mainmenu/providers/delegate.ts index 23ac7e847..ea23cad25 100644 --- a/src/core/mainmenu/providers/delegate.ts +++ b/src/core/mainmenu/providers/delegate.ts @@ -107,11 +107,9 @@ export interface CoreMainMenuHandlerToDisplay extends CoreMainMenuHandlerData { */ @Injectable() export class CoreMainMenuDelegate extends CoreDelegate { - protected handlers: { [s: string]: CoreMainMenuHandler } = {}; - protected enabledHandlers: { [s: string]: CoreMainMenuHandler } = {}; protected loaded = false; protected siteHandlers: Subject = new BehaviorSubject([]); - protected featurePrefix = '$mmSideMenuDelegate_'; + protected featurePrefix = 'CoreMainMenuDelegate_'; constructor(protected loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider, protected eventsProvider: CoreEventsProvider) { @@ -153,7 +151,7 @@ export class CoreMainMenuDelegate extends CoreDelegate { const handlersData: any[] = []; for (const name in this.enabledHandlers) { - const handler = this.enabledHandlers[name], + const handler = this.enabledHandlers[name], data = handler.getDisplayData(); handlersData.push({ diff --git a/src/core/settings/providers/delegate.ts b/src/core/settings/providers/delegate.ts index df8d2e346..a7fca19cd 100644 --- a/src/core/settings/providers/delegate.ts +++ b/src/core/settings/providers/delegate.ts @@ -79,8 +79,6 @@ export interface CoreSettingsHandlerData { @Injectable() export class CoreSettingsDelegate extends CoreDelegate { - protected handlers: { [s: string]: CoreSettingsHandler } = {}; - protected enabledHandlers: { [s: string]: CoreSettingsHandler } = {}; protected siteHandlers: CoreSettingsHandlerData[] = []; // Handlers to return. constructor(protected loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider, @@ -113,7 +111,7 @@ export class CoreSettingsDelegate extends CoreDelegate { const handlersData: any[] = []; for (const name in this.enabledHandlers) { - const handler = this.enabledHandlers[name], + const handler = this.enabledHandlers[name], data = handler.getDisplayData(); handlersData.push({ diff --git a/src/core/sitehome/providers/index-link-handler.ts b/src/core/sitehome/providers/index-link-handler.ts index d8d5c5c64..eb2cb5906 100644 --- a/src/core/sitehome/providers/index-link-handler.ts +++ b/src/core/sitehome/providers/index-link-handler.ts @@ -25,7 +25,7 @@ import { CoreSiteHomeProvider } from './sitehome'; @Injectable() export class CoreSiteHomeIndexLinkHandler extends CoreContentLinksHandlerBase { name = 'CoreSiteHomeIndexLinkHandler'; - featureName = '$mmSideMenuDelegate_mmaFrontpage'; + featureName = 'CoreMainMenuDelegate_CoreSiteHome'; pattern = /\/course\/view\.php.*([\?\&]id=\d+)/; constructor(private sitesProvider: CoreSitesProvider, private siteHomeProvider: CoreSiteHomeProvider, diff --git a/src/core/sitehome/providers/sitehome.ts b/src/core/sitehome/providers/sitehome.ts index de8957226..41ee3893d 100644 --- a/src/core/sitehome/providers/sitehome.ts +++ b/src/core/sitehome/providers/sitehome.ts @@ -100,6 +100,6 @@ export class CoreSiteHomeProvider { isDisabledInSite(site: CoreSite): boolean { site = site || this.sitesProvider.getCurrentSite(); - return site.isFeatureDisabled('$mmSideMenuDelegate_mmaFrontpage'); + return site.isFeatureDisabled('CoreMainMenuDelegate_CoreSiteHome'); } } diff --git a/src/core/siteplugins/classes/course-format-handler.ts b/src/core/siteplugins/classes/course-format-handler.ts index 91e3a5366..ed31e6db4 100644 --- a/src/core/siteplugins/classes/course-format-handler.ts +++ b/src/core/siteplugins/classes/course-format-handler.ts @@ -22,7 +22,7 @@ import { CoreSitePluginsCourseFormatComponent } from '../components/course-forma */ export class CoreSitePluginsCourseFormatHandler extends CoreSitePluginsBaseHandler implements CoreCourseFormatHandler { - constructor(name: string, protected handlerSchema: any) { + constructor(name: string, public format: string, protected handlerSchema: any) { super(name); } diff --git a/src/core/siteplugins/classes/module-handler.ts b/src/core/siteplugins/classes/module-handler.ts index 69ec55ba8..ee09ead5f 100644 --- a/src/core/siteplugins/classes/module-handler.ts +++ b/src/core/siteplugins/classes/module-handler.ts @@ -24,7 +24,7 @@ import { CoreSitePluginsModuleIndexComponent } from '../components/module-index/ export class CoreSitePluginsModuleHandler extends CoreSitePluginsBaseHandler implements CoreCourseModuleHandler { priority: number; - constructor(name: string, protected handlerSchema: any) { + constructor(name: string, public modName: string, protected handlerSchema: any) { super(name); } diff --git a/src/core/siteplugins/classes/module-prefetch-handler.ts b/src/core/siteplugins/classes/module-prefetch-handler.ts index e309067e6..a6d6d836f 100644 --- a/src/core/siteplugins/classes/module-prefetch-handler.ts +++ b/src/core/siteplugins/classes/module-prefetch-handler.ts @@ -22,12 +22,13 @@ import { CoreCourseModulePrefetchHandlerBase } from '@core/course/classes/module export class CoreSitePluginsModulePrefetchHandler extends CoreCourseModulePrefetchHandlerBase { protected ROOT_CACHE_KEY = 'CoreSitePluginsModulePrefetchHandler:'; - constructor(injector: Injector, protected sitePluginsProvider: CoreSitePluginsProvider, component: string, modName: string, - protected handlerSchema: any) { + constructor(injector: Injector, protected sitePluginsProvider: CoreSitePluginsProvider, component: string, name: string, + modName: string, protected handlerSchema: any) { super(injector); this.component = component; - this.name = modName; + this.name = name; + this.modName = modName; this.isResource = handlerSchema.isresource; if (handlerSchema.updatesnames) { diff --git a/src/core/siteplugins/classes/user-profile-field-handler.ts b/src/core/siteplugins/classes/user-profile-field-handler.ts index 9fd8ed73b..36ae73268 100644 --- a/src/core/siteplugins/classes/user-profile-field-handler.ts +++ b/src/core/siteplugins/classes/user-profile-field-handler.ts @@ -22,7 +22,7 @@ import { CoreSitePluginsUserProfileFieldComponent } from '../components/user-pro */ export class CoreSitePluginsUserProfileFieldHandler extends CoreSitePluginsBaseHandler implements CoreUserProfileFieldHandler { - constructor(name: string) { + constructor(name: string, public type: string) { super(name); } diff --git a/src/core/siteplugins/providers/helper.ts b/src/core/siteplugins/providers/helper.ts index 88f1c0013..95cffee2d 100644 --- a/src/core/siteplugins/providers/helper.ts +++ b/src/core/siteplugins/providers/helper.ts @@ -353,8 +353,9 @@ export class CoreSitePluginsHelperProvider { this.logger.debug('Register site plugin in course format delegate:', plugin, handlerSchema, bootstrapResult); // Create and register the handler. - const formatName = plugin.component.replace('format_', ''); - this.courseFormatDelegate.registerHandler(new CoreSitePluginsCourseFormatHandler(formatName, handlerSchema)); + const uniqueName = this.sitePluginsProvider.getHandlerUniqueName(plugin, handlerName), + formatName = plugin.component.replace('format_', ''); + this.courseFormatDelegate.registerHandler(new CoreSitePluginsCourseFormatHandler(uniqueName, formatName, handlerSchema)); return formatName; } @@ -437,14 +438,15 @@ export class CoreSitePluginsHelperProvider { this.logger.debug('Register site plugin in module delegate:', plugin, handlerSchema, bootstrapResult); // Create and register the handler. - const modName = plugin.component.replace('mod_', ''); + const uniqueName = this.sitePluginsProvider.getHandlerUniqueName(plugin, handlerName), + modName = plugin.component.replace('mod_', ''); - this.moduleDelegate.registerHandler(new CoreSitePluginsModuleHandler(modName, handlerSchema)); + this.moduleDelegate.registerHandler(new CoreSitePluginsModuleHandler(uniqueName, modName, handlerSchema)); if (handlerSchema.offlinefunctions && Object.keys(handlerSchema.offlinefunctions).length) { // Register the prefetch handler. this.prefetchDelegate.registerHandler(new CoreSitePluginsModulePrefetchHandler( - this.injector, this.sitePluginsProvider, plugin.component, modName, handlerSchema)); + this.injector, this.sitePluginsProvider, plugin.component, uniqueName, modName, handlerSchema)); } return modName; @@ -502,8 +504,9 @@ export class CoreSitePluginsHelperProvider { // Execute the main method and its JS. The template returned will be used in the profile field component. return this.executeMethodAndJS(plugin, handlerSchema.method).then((result) => { // Create and register the handler. - const fieldType = plugin.component.replace('profilefield_', ''), - fieldHandler = new CoreSitePluginsUserProfileFieldHandler(fieldType); + const uniqueName = this.sitePluginsProvider.getHandlerUniqueName(plugin, handlerName), + fieldType = plugin.component.replace('profilefield_', ''), + fieldHandler = new CoreSitePluginsUserProfileFieldHandler(uniqueName, fieldType); // Store in handlerSchema some data required by the component. handlerSchema.methodTemplates = result.templates; diff --git a/src/core/user/providers/participants-link-handler.ts b/src/core/user/providers/participants-link-handler.ts index 4d4f93918..910b57eb6 100644 --- a/src/core/user/providers/participants-link-handler.ts +++ b/src/core/user/providers/participants-link-handler.ts @@ -24,7 +24,7 @@ import { CoreUserProvider } from './user'; @Injectable() export class CoreUserParticipantsLinkHandler extends CoreContentLinksHandlerBase { name = 'CoreUserParticipants'; - featureName = '$mmCoursesDelegate_mmaParticipants'; + featureName = 'CoreCourseOptionsDelegate_CoreUserParticipants'; pattern = /\/user\/index\.php/; constructor(private userProvider: CoreUserProvider, private loginHelper: CoreLoginHelperProvider) { diff --git a/src/core/user/providers/user-delegate.ts b/src/core/user/providers/user-delegate.ts index 8716bd8b6..9fd4632d4 100644 --- a/src/core/user/providers/user-delegate.ts +++ b/src/core/user/providers/user-delegate.ts @@ -162,12 +162,10 @@ export class CoreUserDelegate extends CoreDelegate { */ static UPDATE_HANDLER_EVENT = 'CoreUserDelegate_update_handler_event'; - protected handlers: { [s: string]: CoreUserProfileHandler } = {}; - protected enabledHandlers: { [s: string]: CoreUserProfileHandler } = {}; protected observableHandlers: Subject = new BehaviorSubject([]); protected userHandlers: CoreUserProfileHandlerToDisplay[] = []; - protected featurePrefix = '$mmUserDelegate_'; + protected featurePrefix = 'CoreUserDelegate_'; protected loaded = false; constructor(protected loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider, @@ -233,7 +231,7 @@ export class CoreUserDelegate extends CoreDelegate { for (const name in this.enabledHandlers) { // Checks if the handler is enabled for the user. - const handler = this.handlers[name], + const handler = this.handlers[name], isEnabledForUser = handler.isEnabledForUser(user, courseId, navOptions, admOptions), promise = Promise.resolve(isEnabledForUser).then((enabled) => { if (enabled) { diff --git a/src/core/user/providers/user-handler.ts b/src/core/user/providers/user-handler.ts index 7414dd287..8437b3e8b 100644 --- a/src/core/user/providers/user-handler.ts +++ b/src/core/user/providers/user-handler.ts @@ -21,7 +21,7 @@ import { CoreSitesProvider } from '@providers/sites'; */ @Injectable() export class CoreUserProfileMailHandler implements CoreUserProfileHandler { - name = 'mmUser'; + name = 'CoreUserProfileMail'; priority = 700; type = CoreUserDelegate.TYPE_COMMUNICATION; diff --git a/src/core/user/providers/user-profile-field-delegate.ts b/src/core/user/providers/user-profile-field-delegate.ts index b8ba951c8..0e48f4a0c 100644 --- a/src/core/user/providers/user-profile-field-delegate.ts +++ b/src/core/user/providers/user-profile-field-delegate.ts @@ -19,6 +19,11 @@ import { CoreSitesProvider } from '@providers/sites'; import { CoreEventsProvider } from '@providers/events'; export interface CoreUserProfileFieldHandler extends CoreDelegateHandler { + /** + * Type of the field the handler supports. E.g. 'checkbox'. + * @type {string} + */ + type: string; /** * Return the Component to use to display the user profile field. @@ -66,8 +71,7 @@ export interface CoreUserProfileFieldHandlerData { */ @Injectable() export class CoreUserProfileFieldDelegate extends CoreDelegate { - protected handlers: { [s: string]: CoreUserProfileFieldHandler } = {}; - protected enabledHandlers: { [s: string]: CoreUserProfileFieldHandler } = {}; + protected handlerNameProperty = 'type'; constructor(protected loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider, protected eventsProvider: CoreEventsProvider) { diff --git a/src/core/user/providers/user.ts b/src/core/user/providers/user.ts index 7dfc1ae0e..f9f3c95d0 100644 --- a/src/core/user/providers/user.ts +++ b/src/core/user/providers/user.ts @@ -306,7 +306,7 @@ export class CoreUserProvider { isParticipantsDisabledInSite(site?: any): boolean { site = site || this.sitesProvider.getCurrentSite(); - return site.isFeatureDisabled('$mmCoursesDelegate_mmaParticipants'); + return site.isFeatureDisabled('CoreCourseOptionsDelegate_CoreUserParticipants'); } /** @@ -334,7 +334,7 @@ export class CoreUserProvider { isUpdatePictureDisabledInSite(site?: CoreSite): boolean { site = site || this.sitesProvider.getCurrentSite(); - return site.isFeatureDisabled('$mmUserDelegate_picture'); + return site.isFeatureDisabled('CoreUserDelegate_picture'); } /** diff --git a/src/providers/app.ts b/src/providers/app.ts index 1cac19e4b..75c9c0991 100644 --- a/src/providers/app.ts +++ b/src/providers/app.ts @@ -323,10 +323,10 @@ export class CoreAppProvider { if (localStorage && localStorage.getItem) { try { const data: CoreRedirectData = { - siteId: localStorage.getItem('mmCoreRedirectSiteId'), - page: localStorage.getItem('mmCoreRedirectState'), - params: localStorage.getItem('mmCoreRedirectParams'), - timemodified: parseInt(localStorage.getItem('mmCoreRedirectTime'), 10) + siteId: localStorage.getItem('CoreRedirectSiteId'), + page: localStorage.getItem('CoreRedirectState'), + params: localStorage.getItem('CoreRedirectParams'), + timemodified: parseInt(localStorage.getItem('CoreRedirectTime'), 10) }; if (data.params) { @@ -352,10 +352,10 @@ export class CoreAppProvider { storeRedirect(siteId: string, page: string, params: any): void { if (localStorage && localStorage.setItem) { try { - localStorage.setItem('mmCoreRedirectSiteId', siteId); - localStorage.setItem('mmCoreRedirectState', page); - localStorage.setItem('mmCoreRedirectParams', JSON.stringify(params)); - localStorage.setItem('mmCoreRedirectTime', String(Date.now())); + localStorage.setItem('CoreRedirectSiteId', siteId); + localStorage.setItem('CoreRedirectState', page); + localStorage.setItem('CoreRedirectParams', JSON.stringify(params)); + localStorage.setItem('CoreRedirectTime', String(Date.now())); } catch (ex) { // Ignore errors. } diff --git a/src/providers/filepool.ts b/src/providers/filepool.ts index 115964a7c..8663b050f 100644 --- a/src/providers/filepool.ts +++ b/src/providers/filepool.ts @@ -242,11 +242,11 @@ export class CoreFilepoolProvider { protected FOLDER = 'filepool'; protected WIFI_DOWNLOAD_THRESHOLD = 20971520; // 20MB. protected DOWNLOAD_THRESHOLD = 2097152; // 2MB. - protected QUEUE_RUNNING = 'mmFilepool:QUEUE_RUNNING'; - protected QUEUE_PAUSED = 'mmFilepool:QUEUE_PAUSED'; - protected ERR_QUEUE_IS_EMPTY = 'mmFilepoolError:ERR_QUEUE_IS_EMPTY'; - protected ERR_FS_OR_NETWORK_UNAVAILABLE = 'mmFilepoolError:ERR_FS_OR_NETWORK_UNAVAILABLE'; - protected ERR_QUEUE_ON_PAUSE = 'mmFilepoolError:ERR_QUEUE_ON_PAUSE'; + protected QUEUE_RUNNING = 'CoreFilepool:QUEUE_RUNNING'; + protected QUEUE_PAUSED = 'CoreFilepool:QUEUE_PAUSED'; + protected ERR_QUEUE_IS_EMPTY = 'CoreFilepoolError:ERR_QUEUE_IS_EMPTY'; + protected ERR_FS_OR_NETWORK_UNAVAILABLE = 'CoreFilepoolError:ERR_FS_OR_NETWORK_UNAVAILABLE'; + protected ERR_QUEUE_ON_PAUSE = 'CoreFilepoolError:ERR_QUEUE_ON_PAUSE'; // Variables for database. protected QUEUE_TABLE = 'filepool_files_queue'; // Queue of files to download. @@ -1369,7 +1369,7 @@ export class CoreFilepoolProvider { * @return {string} Event name. */ protected getFileEventName(siteId: string, fileId: string): string { - return 'mmFilepoolFile:' + siteId + ':' + fileId; + return 'CoreFilepoolFile:' + siteId + ':' + fileId; } /** diff --git a/src/providers/init.ts b/src/providers/init.ts index ff27eb733..e06ce450d 100644 --- a/src/providers/init.ts +++ b/src/providers/init.ts @@ -107,8 +107,6 @@ export class CoreInitDelegate { /** * Instantly returns if the app is ready. * - * To be notified when the app is ready, refer to {@link $mmApp#ready}. - * * @return {boolean} Whether it's ready. */ isReady(): boolean { diff --git a/src/providers/utils/text.ts b/src/providers/utils/text.ts index bb7d26c17..3020d4ce6 100644 --- a/src/providers/utils/text.ts +++ b/src/providers/utils/text.ts @@ -22,6 +22,52 @@ import { CoreLangProvider } from '../lang'; */ @Injectable() export class CoreTextUtilsProvider { + + // List of regular expressions to convert the old nomenclature to new nomenclature for disabled features. + protected DISABLED_FEATURES_COMPAT_REGEXPS = [ + {old: /\$mmLoginEmailSignup/g, new: 'CoreLoginEmailSignup'}, + {old: /\$mmSideMenuDelegate/g, new: 'CoreMainMenuDelegate'}, + {old: /\$mmCoursesDelegate/g, new: 'CoreCourseOptionsDelegate'}, + {old: /\$mmUserDelegate/g, new: 'CoreUserDelegate'}, + {old: /\$mmCourseDelegate/g, new: 'CoreCourseModuleDelegate'}, + {old: /_mmCourses/g, new: '_CoreCourses'}, + {old: /_mmaFrontpage/g, new: '_CoreSiteHome'}, + {old: /_mmaGrades/g, new: '_CoreGrades'}, + {old: /_mmaCompetency/g, new: '_AddonCompetency'}, + {old: /_mmaNotifications/g, new: '_AddonNotifications'}, + {old: /_mmaMessages/g, new: '_AddonMessages'}, + {old: /_mmaCalendar/g, new: '_AddonCalendar'}, + {old: /_mmaFiles/g, new: '_AddonFiles'}, + {old: /_mmaParticipants/g, new: '_CoreUserParticipants'}, + {old: /_mmaCourseCompletion/g, new: '_AddonCourseCompletion'}, + {old: /_mmaNotes/g, new: '_AddonNotes'}, + {old: /_mmaBadges/g, new: '_AddonBadges'}, + {old: /files_privatefiles/g, new: 'AddonFilesPrivateFiles'}, + {old: /files_sitefiles/g, new: 'AddonFilesSiteFiles'}, + {old: /files_upload/g, new: 'AddonFilesUpload'}, + {old: /_mmaModAssign/g, new: '_AddonModAssign'}, + {old: /_mmaModBook/g, new: '_AddonModBook'}, + {old: /_mmaModChat/g, new: '_AddonModChat'}, + {old: /_mmaModChoice/g, new: '_AddonModChoice'}, + {old: /_mmaModData/g, new: '_AddonModData'}, + {old: /_mmaModFeedback/g, new: '_AddonModFeedback'}, + {old: /_mmaModFolder/g, new: '_AddonModFolder'}, + {old: /_mmaModForum/g, new: '_AddonModForum'}, + {old: /_mmaModGlossary/g, new: '_AddonModGlossary'}, + {old: /_mmaModImscp/g, new: '_AddonModImscp'}, + {old: /_mmaModLabel/g, new: '_AddonModLabel'}, + {old: /_mmaModLesson/g, new: '_AddonModLesson'}, + {old: /_mmaModLti/g, new: '_AddonModLti'}, + {old: /_mmaModPage/g, new: '_AddonModPage'}, + {old: /_mmaModQuiz/g, new: '_AddonModQuiz'}, + {old: /_mmaModResource/g, new: '_AddonModResource'}, + {old: /_mmaModScorm/g, new: '_AddonModScorm'}, + {old: /_mmaModSurvey/g, new: '_AddonModSurvey'}, + {old: /_mmaModUrl/g, new: '_AddonModUrl'}, + {old: /_mmaModWiki/g, new: '_AddonModWiki'}, + {old: /_mmaModWorkshop/g, new: '_AddonModWorkshop'}, + ]; + protected element = document.createElement('div'); // Fake element to use in some functions, to prevent creating it each time. constructor(private translate: TranslateService, private langProvider: CoreLangProvider, private modalCtrl: ModalController) { } @@ -534,6 +580,26 @@ export class CoreTextUtilsProvider { return stripped; } + /** + * Treat the list of disabled features, replacing old nomenclature with the new one. + * + * @param {string} features List of disabled features. + * @return {string} Treated list. + */ + treatDisabledFeatures(features: string): string { + if (!features) { + return ''; + } + + for (let i = 0; i < this.DISABLED_FEATURES_COMPAT_REGEXPS.length; i++) { + const entry = this.DISABLED_FEATURES_COMPAT_REGEXPS[i]; + + features = features.replace(entry.old, entry.new); + } + + return features; + } + /** * Treat the multilang tags from a HTML code, leaving only the current language. *