commit
a5e8b63fec
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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<boolean>} Promise resolved with true if enabled, resolved with false otherwise.
|
||||
*/
|
||||
isEnabledForUser(user: any, courseId: number, navOptions?: any, admOptions?: any): boolean | Promise<boolean> {
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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<boolean>} Promise resolved with true if enabled, resolved with false otherwise.
|
||||
*/
|
||||
isEnabledForUser(user: any, courseId: number, navOptions?: any, admOptions?: any): boolean | Promise<boolean> {
|
||||
|
|
|
@ -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<boolean>} Promise resolved with true if enabled, resolved with false otherwise.
|
||||
*/
|
||||
isEnabledForUser(user: any, courseId: number, navOptions?: any, admOptions?: any): boolean | Promise<boolean> {
|
||||
|
|
|
@ -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<boolean>} Promise resolved with true if enabled, resolved with false otherwise.
|
||||
*/
|
||||
isEnabledForUser(user: any, courseId: number, navOptions?: any, admOptions?: any): boolean | Promise<boolean> {
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) { }
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) { }
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -24,6 +24,6 @@ export class AddonModLabelLinkHandler extends CoreContentLinksModuleIndexHandler
|
|||
name = 'AddonModLabelLinkHandler';
|
||||
|
||||
constructor(courseHelper: CoreCourseHelperProvider) {
|
||||
super(courseHelper, 'mmaModLabel', 'label');
|
||||
super(courseHelper, 'AddonModLabel', 'label');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) { }
|
||||
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) { }
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) { }
|
||||
|
||||
|
|
|
@ -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$/;
|
||||
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) { }
|
||||
|
|
|
@ -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<boolean>} Promise resolved with true if enabled, resolved with false otherwise.
|
||||
*/
|
||||
isEnabledForUser(user: any, courseId: number, navOptions?: any, admOptions?: any): boolean | Promise<boolean> {
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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) { }
|
||||
|
||||
|
|
|
@ -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) { }
|
||||
|
||||
|
|
|
@ -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]];
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -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<InAppBrowserObject>} Promise resolved when done.
|
||||
* @return {Promise<InAppBrowserObject|void>} Promise resolved when done.
|
||||
*/
|
||||
openInAppWithAutoLogin(url: string, options?: any, alertMessage?: string): Promise<InAppBrowserObject> {
|
||||
openInAppWithAutoLogin(url: string, options?: any, alertMessage?: string): Promise<InAppBrowserObject | void> {
|
||||
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<InAppBrowserObject>} Promise resolved when done.
|
||||
* @return {Promise<InAppBrowserObject|void>} Promise resolved when done.
|
||||
*/
|
||||
openInAppWithAutoLoginIfSameSite(url: string, options?: any, alertMessage?: string): Promise<InAppBrowserObject> {
|
||||
openInAppWithAutoLoginIfSameSite(url: string, options?: any, alertMessage?: string): Promise<InAppBrowserObject | void> {
|
||||
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<InAppBrowserObject>} Promise resolved when done. Resolve param is returned only if inApp=true.
|
||||
* @return {Promise<InAppBrowserObject|void>} Promise resolved when done. Resolve param is returned only if inApp=true.
|
||||
*/
|
||||
openWithAutoLogin(inApp: boolean, url: string, options?: any, alertMessage?: string): Promise<InAppBrowserObject> {
|
||||
openWithAutoLogin(inApp: boolean, url: string, options?: any, alertMessage?: string): Promise<InAppBrowserObject | void> {
|
||||
// Convenience function to open the URL.
|
||||
const open = (url): Promise<any> => {
|
||||
return new Promise<InAppBrowserObject>((resolve, reject): void => {
|
||||
return new Promise<InAppBrowserObject | void>((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<InAppBrowserObject>} Promise resolved when done. Resolve param is returned only if inApp=true.
|
||||
* @return {Promise<InAppBrowserObject|void>} Promise resolved when done. Resolve param is returned only if inApp=true.
|
||||
*/
|
||||
openWithAutoLoginIfSameSite(inApp: boolean, url: string, options?: any, alertMessage?: string): Promise<InAppBrowserObject> {
|
||||
openWithAutoLoginIfSameSite(inApp: boolean, url: string, options?: any, alertMessage?: string)
|
||||
: Promise<InAppBrowserObject | void> {
|
||||
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]];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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: []
|
||||
})
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -21,5 +21,6 @@ import { CoreCourseFormatSingleActivityHandler } from '../../singleactivity/prov
|
|||
*/
|
||||
@Injectable()
|
||||
export class CoreCourseFormatSocialHandler extends CoreCourseFormatSingleActivityHandler {
|
||||
name = 'social';
|
||||
name = 'CoreCourseFormatSocial';
|
||||
format = 'social';
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -22,7 +22,8 @@ import { CoreConstants } from '../../../../constants';
|
|||
*/
|
||||
@Injectable()
|
||||
export class CoreCourseFormatWeeksHandler implements CoreCourseFormatHandler {
|
||||
name = 'weeks';
|
||||
name = 'CoreCourseFormatWeeks';
|
||||
format = 'weeks';
|
||||
|
||||
constructor(private timeUtils: CoreTimeUtilsProvider) { }
|
||||
|
||||
|
|
|
@ -23,7 +23,8 @@ import { CoreCourseProvider } from './course';
|
|||
*/
|
||||
@Injectable()
|
||||
export class CoreCourseFormatDefaultHandler implements CoreCourseFormatHandler {
|
||||
name = 'default';
|
||||
name = 'CoreCourseFormatDefault';
|
||||
format = 'default';
|
||||
|
||||
constructor(private coursesProvider: CoreCoursesProvider) { }
|
||||
|
||||
|
|
|
@ -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<boolean>} True or promise resolved with true if enabled.
|
||||
*/
|
||||
isEnabled(): boolean | Promise<boolean> {
|
||||
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<any>} The component (or promise resolved with component) to use, undefined if not found.
|
||||
*/
|
||||
getMainComponent(injector: Injector, course: any, module: any): any | Promise<any> {
|
||||
// We can't inject CoreCourseUnsupportedModuleComponent here due to circular dependencies.
|
||||
// Don't return anything, by default it will use CoreCourseUnsupportedModuleComponent.
|
||||
}
|
||||
}
|
|
@ -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<any>} Promise resolved with component to use, undefined if not found.
|
||||
*/
|
||||
getAllSectionsComponent(injector: Injector, course: any): Promise<any> {
|
||||
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<any>} Promise resolved with component to use, undefined if not found.
|
||||
*/
|
||||
getCourseFormatComponent(injector: Injector, course: any): Promise<any> {
|
||||
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<any>} Promise resolved with component to use, undefined if not found.
|
||||
*/
|
||||
getCourseSummaryComponent(injector: Injector, course: any): Promise<any> {
|
||||
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<any> {
|
||||
// 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<any>} Promise resolved with component to use, undefined if not found.
|
||||
*/
|
||||
getSectionSelectorComponent(injector: Injector, course: any): Promise<any> {
|
||||
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<any>} Promise resolved with component to use, undefined if not found.
|
||||
*/
|
||||
getSingleSectionComponent(injector: Injector, course: any): Promise<any> {
|
||||
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<any>} Promise resolved when the data is invalidated.
|
||||
*/
|
||||
invalidateData(course: any, sections: any[]): Promise<any> {
|
||||
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<any>} Promise resolved when done.
|
||||
*/
|
||||
openCourse(navCtrl: NavController, course: any): Promise<any> {
|
||||
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]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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<any>} Promise resolved with component to use, undefined if not found.
|
||||
*/
|
||||
getMainComponent(injector: Injector, course: any, module: any): Promise<any> {
|
||||
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;
|
||||
|
|
|
@ -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<any> } } = {};
|
||||
|
|
|
@ -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 = <CoreCourseOptionsHandler> this.enabledHandlers[name];
|
||||
|
||||
// Checks if the handler is enabled for the user.
|
||||
promises.push(Promise.resolve(handler.isEnabledForCourse(courseId, accessData, navOptions, admOptions))
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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 = <CoreFileUploaderHandler> this.enabledHandlers[name];
|
||||
let supportedMimetypes;
|
||||
|
||||
if (mimetypes) {
|
||||
|
|
|
@ -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<boolean>} Promise resolved with true if enabled, resolved with false otherwise.
|
||||
*/
|
||||
isEnabledForUser(user: any, courseId: number, navOptions?: any, admOptions?: any): boolean | Promise<boolean> {
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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<CoreMainMenuHandlerToDisplay[]> = new BehaviorSubject<CoreMainMenuHandlerToDisplay[]>([]);
|
||||
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 = <CoreMainMenuHandler> this.enabledHandlers[name],
|
||||
data = handler.getDisplayData();
|
||||
|
||||
handlersData.push({
|
||||
|
|
|
@ -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 = <CoreSettingsHandler> this.enabledHandlers[name],
|
||||
data = handler.getDisplayData();
|
||||
|
||||
handlersData.push({
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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<CoreUserProfileHandlerToDisplay[]> =
|
||||
new BehaviorSubject<CoreUserProfileHandlerToDisplay[]>([]);
|
||||
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 = <CoreUserProfileHandler> this.handlers[name],
|
||||
isEnabledForUser = handler.isEnabledForUser(user, courseId, navOptions, admOptions),
|
||||
promise = Promise.resolve(isEnabledForUser).then((enabled) => {
|
||||
if (enabled) {
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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.
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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.
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue