commit
a5e8b63fec
|
@ -24,7 +24,7 @@ import { AddonBadgesProvider } from './badges';
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonBadgesMyBadgesLinkHandler extends CoreContentLinksHandlerBase {
|
export class AddonBadgesMyBadgesLinkHandler extends CoreContentLinksHandlerBase {
|
||||||
name = 'AddonBadgesMyBadgesLinkHandler';
|
name = 'AddonBadgesMyBadgesLinkHandler';
|
||||||
featureName = '$mmUserDelegate_mmaBadges';
|
featureName = 'CoreUserDelegate_AddonBadges';
|
||||||
pattern = /\/badges\/mybadges\.php/;
|
pattern = /\/badges\/mybadges\.php/;
|
||||||
|
|
||||||
constructor(private badgesProvider: AddonBadgesProvider, private loginHelper: CoreLoginHelperProvider) {
|
constructor(private badgesProvider: AddonBadgesProvider, private loginHelper: CoreLoginHelperProvider) {
|
||||||
|
|
|
@ -21,7 +21,7 @@ import { AddonBadgesProvider } from './badges';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonBadgesUserHandler implements CoreUserProfileHandler {
|
export class AddonBadgesUserHandler implements CoreUserProfileHandler {
|
||||||
name = 'mmaBadges';
|
name = 'AddonBadges';
|
||||||
priority = 50;
|
priority = 50;
|
||||||
type = CoreUserDelegate.TYPE_NEW_PAGE;
|
type = CoreUserDelegate.TYPE_NEW_PAGE;
|
||||||
|
|
||||||
|
|
|
@ -343,7 +343,7 @@ export class AddonCalendarProvider {
|
||||||
isCalendarDisabledInSite(site?: CoreSite): boolean {
|
isCalendarDisabledInSite(site?: CoreSite): boolean {
|
||||||
site = site || this.sitesProvider.getCurrentSite();
|
site = site || this.sitesProvider.getCurrentSite();
|
||||||
|
|
||||||
return site.isFeatureDisabled('$mmSideMenuDelegate_mmaCalendar');
|
return site.isFeatureDisabled('CoreMainMenuDelegate_AddonCalendar');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -25,7 +25,7 @@ import { AddonCompetencyProvider } from './competency';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonCompetencyUserHandler implements CoreUserProfileHandler {
|
export class AddonCompetencyUserHandler implements CoreUserProfileHandler {
|
||||||
name = 'AddonCompetency';
|
name = 'AddonCompetency:learningPlan';
|
||||||
priority = 900;
|
priority = 900;
|
||||||
type = CoreUserDelegate.TYPE_NEW_PAGE;
|
type = CoreUserDelegate.TYPE_NEW_PAGE;
|
||||||
participantsNavEnabledCache = {};
|
participantsNavEnabledCache = {};
|
||||||
|
@ -58,8 +58,8 @@ export class AddonCompetencyUserHandler implements CoreUserProfileHandler {
|
||||||
*
|
*
|
||||||
* @param {any} user User to check.
|
* @param {any} user User to check.
|
||||||
* @param {number} courseId Course ID.
|
* @param {number} courseId Course ID.
|
||||||
* @param {any} [navOptions] Course navigation options for current user. See $mmCourses#getUserNavigationOptions.
|
* @param {any} [navOptions] Course navigation options for current user. See CoreCoursesProvider.getUserNavigationOptions.
|
||||||
* @param {any} [admOptions] Course admin options for current user. See $mmCourses#getUserAdministrationOptions.
|
* @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.
|
* @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> {
|
isEnabledForUser(user: any, courseId: number, navOptions?: any, admOptions?: any): boolean | Promise<boolean> {
|
||||||
|
|
|
@ -295,7 +295,7 @@ export class AddonFilesProvider {
|
||||||
isDisabledInSite(site: CoreSite): boolean {
|
isDisabledInSite(site: CoreSite): boolean {
|
||||||
site = site || this.sitesProvider.getCurrentSite();
|
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 {
|
isPrivateFilesDisabledInSite(site?: CoreSite): boolean {
|
||||||
site = site || this.sitesProvider.getCurrentSite();
|
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 {
|
isSiteFilesDisabledInSite(site?: CoreSite): boolean {
|
||||||
site = site || this.sitesProvider.getCurrentSite();
|
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 {
|
isUploadDisabledInSite(site?: CoreSite): boolean {
|
||||||
site = site || this.sitesProvider.getCurrentSite();
|
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 => {
|
const notificationClicked = (notification: any): void => {
|
||||||
messagesProvider.isMessagingEnabledForSite(notification.site).then(() => {
|
messagesProvider.isMessagingEnabledForSite(notification.site).then(() => {
|
||||||
sitesProvider.isFeatureDisabled('$mmSideMenuDelegate_mmaMessages', notification.site).then((disabled) => {
|
sitesProvider.isFeatureDisabled('CoreMainMenuDelegate_AddonMessages', notification.site).then((disabled) => {
|
||||||
if (disabled) {
|
if (disabled) {
|
||||||
// Messages are disabled, stop.
|
// Messages are disabled, stop.
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -62,8 +62,8 @@ export class AddonMessagesAddContactUserHandler implements CoreUserProfileHandle
|
||||||
*
|
*
|
||||||
* @param {any} user User to check.
|
* @param {any} user User to check.
|
||||||
* @param {number} courseId Course ID.
|
* @param {number} courseId Course ID.
|
||||||
* @param {any} [navOptions] Course navigation options for current user. See $mmCourses#getUserNavigationOptions.
|
* @param {any} [navOptions] Course navigation options for current user. See CoreCoursesProvider.getUserNavigationOptions.
|
||||||
* @param {any} [admOptions] Course admin options for current user. See $mmCourses#getUserAdministrationOptions.
|
* @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.
|
* @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> {
|
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 {any} user User to check.
|
||||||
* @param {number} courseId Course ID.
|
* @param {number} courseId Course ID.
|
||||||
* @param {any} [navOptions] Course navigation options for current user. See $mmCourses#getUserNavigationOptions.
|
* @param {any} [navOptions] Course navigation options for current user. See CoreCoursesProvider.getUserNavigationOptions.
|
||||||
* @param {any} [admOptions] Course admin options for current user. See $mmCourses#getUserAdministrationOptions.
|
* @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.
|
* @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> {
|
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 {any} user User to check.
|
||||||
* @param {number} courseId Course ID.
|
* @param {number} courseId Course ID.
|
||||||
* @param {any} [navOptions] Course navigation options for current user. See $mmCourses#getUserNavigationOptions.
|
* @param {any} [navOptions] Course navigation options for current user. See CoreCoursesProvider.getUserNavigationOptions.
|
||||||
* @param {any} [admOptions] Course admin options for current user. See $mmCourses#getUserAdministrationOptions.
|
* @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.
|
* @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> {
|
isEnabledForUser(user: any, courseId: number, navOptions?: any, admOptions?: any): boolean | Promise<boolean> {
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler';
|
import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler';
|
||||||
import { CoreCourseHelperProvider } from '@core/course/providers/helper';
|
import { CoreCourseHelperProvider } from '@core/course/providers/helper';
|
||||||
import { AddonModBookProvider } from './book';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handler to treat links to book.
|
* Handler to treat links to book.
|
||||||
|
@ -25,6 +24,6 @@ export class AddonModBookLinkHandler extends CoreContentLinksModuleIndexHandler
|
||||||
name = 'AddonModBookLinkHandler';
|
name = 'AddonModBookLinkHandler';
|
||||||
|
|
||||||
constructor(courseHelper: CoreCourseHelperProvider) {
|
constructor(courseHelper: CoreCourseHelperProvider) {
|
||||||
super(courseHelper, AddonModBookProvider.COMPONENT, 'book');
|
super(courseHelper, 'AddonModBook', 'book');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,8 @@ import { CoreCourseProvider } from '@core/course/providers/course';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonModBookModuleHandler implements CoreCourseModuleHandler {
|
export class AddonModBookModuleHandler implements CoreCourseModuleHandler {
|
||||||
name = 'book';
|
name = 'AddonModBook';
|
||||||
|
modName = 'book';
|
||||||
|
|
||||||
constructor(protected bookProvider: AddonModBookProvider, private courseProvider: CoreCourseProvider) { }
|
constructor(protected bookProvider: AddonModBookProvider, private courseProvider: CoreCourseProvider) { }
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,8 @@ import { AddonModBookProvider } from './book';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonModBookPrefetchHandler extends CoreCourseModulePrefetchHandlerBase {
|
export class AddonModBookPrefetchHandler extends CoreCourseModulePrefetchHandlerBase {
|
||||||
name = 'book';
|
name = 'AddonModBook';
|
||||||
|
modName = 'book';
|
||||||
component = AddonModBookProvider.COMPONENT;
|
component = AddonModBookProvider.COMPONENT;
|
||||||
updatesNames = /^configuration$|^.*files$|^entries$/;
|
updatesNames = /^configuration$|^.*files$|^entries$/;
|
||||||
isResource = true;
|
isResource = true;
|
||||||
|
|
|
@ -30,7 +30,7 @@ export class AddonModFolderProvider {
|
||||||
|
|
||||||
constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private courseProvider: CoreCourseProvider,
|
constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private courseProvider: CoreCourseProvider,
|
||||||
private utils: CoreUtilsProvider) {
|
private utils: CoreUtilsProvider) {
|
||||||
this.logger = logger.getInstance('mmaModFolderProvider');
|
this.logger = logger.getInstance('AddonModFolderProvider');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler';
|
import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler';
|
||||||
import { CoreCourseHelperProvider } from '@core/course/providers/helper';
|
import { CoreCourseHelperProvider } from '@core/course/providers/helper';
|
||||||
import { AddonModFolderProvider } from './folder';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handler to treat links to resource.
|
* Handler to treat links to resource.
|
||||||
|
@ -25,6 +24,6 @@ export class AddonModFolderLinkHandler extends CoreContentLinksModuleIndexHandle
|
||||||
name = 'AddonModFolderLinkHandler';
|
name = 'AddonModFolderLinkHandler';
|
||||||
|
|
||||||
constructor(courseHelper: CoreCourseHelperProvider) {
|
constructor(courseHelper: CoreCourseHelperProvider) {
|
||||||
super(courseHelper, AddonModFolderProvider.COMPONENT, 'folder');
|
super(courseHelper, 'AddonModFolder', 'folder');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,8 @@ import { CoreCourseProvider } from '@core/course/providers/course';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonModFolderModuleHandler implements CoreCourseModuleHandler {
|
export class AddonModFolderModuleHandler implements CoreCourseModuleHandler {
|
||||||
name = 'folder';
|
name = 'AddonModFolder';
|
||||||
|
modName = 'folder';
|
||||||
|
|
||||||
constructor(private courseProvider: CoreCourseProvider) { }
|
constructor(private courseProvider: CoreCourseProvider) { }
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,8 @@ import { AddonModFolderProvider } from './folder';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonModFolderPrefetchHandler extends CoreCourseModulePrefetchHandlerBase {
|
export class AddonModFolderPrefetchHandler extends CoreCourseModulePrefetchHandlerBase {
|
||||||
name = 'folder';
|
name = 'AddonModFolder';
|
||||||
|
modName = 'folder';
|
||||||
component = AddonModFolderProvider.COMPONENT;
|
component = AddonModFolderProvider.COMPONENT;
|
||||||
isResource = true;
|
isResource = true;
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,6 @@ export class AddonModLabelLinkHandler extends CoreContentLinksModuleIndexHandler
|
||||||
name = 'AddonModLabelLinkHandler';
|
name = 'AddonModLabelLinkHandler';
|
||||||
|
|
||||||
constructor(courseHelper: CoreCourseHelperProvider) {
|
constructor(courseHelper: CoreCourseHelperProvider) {
|
||||||
super(courseHelper, 'mmaModLabel', 'label');
|
super(courseHelper, 'AddonModLabel', 'label');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,8 @@ import { CoreCourseModuleHandler, CoreCourseModuleHandlerData } from '@core/cour
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonModLabelModuleHandler implements CoreCourseModuleHandler {
|
export class AddonModLabelModuleHandler implements CoreCourseModuleHandler {
|
||||||
name = 'label';
|
name = 'AddonModLabel';
|
||||||
|
modName = 'label';
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
// Nothing to do.
|
// Nothing to do.
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler';
|
import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler';
|
||||||
import { CoreCourseHelperProvider } from '@core/course/providers/helper';
|
import { CoreCourseHelperProvider } from '@core/course/providers/helper';
|
||||||
import { AddonModPageProvider } from './page';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handler to treat links to resource.
|
* Handler to treat links to resource.
|
||||||
|
@ -25,6 +24,6 @@ export class AddonModPageLinkHandler extends CoreContentLinksModuleIndexHandler
|
||||||
name = 'AddonModPageLinkHandler';
|
name = 'AddonModPageLinkHandler';
|
||||||
|
|
||||||
constructor(courseHelper: CoreCourseHelperProvider) {
|
constructor(courseHelper: CoreCourseHelperProvider) {
|
||||||
super(courseHelper, AddonModPageProvider.COMPONENT, 'page');
|
super(courseHelper, 'AddonModPage', 'page');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,8 @@ import { CoreCourseProvider } from '@core/course/providers/course';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonModPageModuleHandler implements CoreCourseModuleHandler {
|
export class AddonModPageModuleHandler implements CoreCourseModuleHandler {
|
||||||
name = 'page';
|
name = 'AddonModPage';
|
||||||
|
modName = 'page';
|
||||||
|
|
||||||
constructor(private courseProvider: CoreCourseProvider, protected pageProvider: AddonModPageProvider) { }
|
constructor(private courseProvider: CoreCourseProvider, protected pageProvider: AddonModPageProvider) { }
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ export class AddonModPageProvider {
|
||||||
|
|
||||||
constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private courseProvider: CoreCourseProvider,
|
constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private courseProvider: CoreCourseProvider,
|
||||||
private utils: CoreUtilsProvider, private filepoolProvider: CoreFilepoolProvider) {
|
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()
|
@Injectable()
|
||||||
export class AddonModPagePrefetchHandler extends CoreCourseModulePrefetchHandlerBase {
|
export class AddonModPagePrefetchHandler extends CoreCourseModulePrefetchHandlerBase {
|
||||||
name = 'page';
|
name = 'AddonModPage';
|
||||||
|
modName = 'page';
|
||||||
component = AddonModPageProvider.COMPONENT;
|
component = AddonModPageProvider.COMPONENT;
|
||||||
updatesNames = /^configuration$|^.*files$/;
|
updatesNames = /^configuration$|^.*files$/;
|
||||||
isResource = true;
|
isResource = true;
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler';
|
import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler';
|
||||||
import { CoreCourseHelperProvider } from '@core/course/providers/helper';
|
import { CoreCourseHelperProvider } from '@core/course/providers/helper';
|
||||||
import { AddonModResourceProvider } from './resource';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handler to treat links to resource.
|
* Handler to treat links to resource.
|
||||||
|
@ -25,6 +24,6 @@ export class AddonModResourceLinkHandler extends CoreContentLinksModuleIndexHand
|
||||||
name = 'AddonModResourceLinkHandler';
|
name = 'AddonModResourceLinkHandler';
|
||||||
|
|
||||||
constructor(courseHelper: CoreCourseHelperProvider) {
|
constructor(courseHelper: CoreCourseHelperProvider) {
|
||||||
super(courseHelper, AddonModResourceProvider.COMPONENT, 'resource');
|
super(courseHelper, 'AddonModResource', 'resource');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,8 @@ import { CoreMimetypeUtilsProvider } from '@providers/utils/mimetype';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonModResourceModuleHandler implements CoreCourseModuleHandler {
|
export class AddonModResourceModuleHandler implements CoreCourseModuleHandler {
|
||||||
name = 'resource';
|
name = 'AddonModResource';
|
||||||
|
modName = 'resource';
|
||||||
|
|
||||||
constructor(protected resourceProvider: AddonModResourceProvider, private courseProvider: CoreCourseProvider,
|
constructor(protected resourceProvider: AddonModResourceProvider, private courseProvider: CoreCourseProvider,
|
||||||
protected mimetypeUtils: CoreMimetypeUtilsProvider, private resourceHelper: AddonModResourceHelperProvider) { }
|
protected mimetypeUtils: CoreMimetypeUtilsProvider, private resourceHelper: AddonModResourceHelperProvider) { }
|
||||||
|
|
|
@ -23,7 +23,8 @@ import { CoreFilepoolProvider } from '@providers/filepool';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonModResourcePrefetchHandler extends CoreCourseModulePrefetchHandlerBase {
|
export class AddonModResourcePrefetchHandler extends CoreCourseModulePrefetchHandlerBase {
|
||||||
name = 'resource';
|
name = 'AddonModResource';
|
||||||
|
modName = 'resource';
|
||||||
component = AddonModResourceProvider.COMPONENT;
|
component = AddonModResourceProvider.COMPONENT;
|
||||||
isResource = true;
|
isResource = true;
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler';
|
import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler';
|
||||||
import { CoreCourseHelperProvider } from '@core/course/providers/helper';
|
import { CoreCourseHelperProvider } from '@core/course/providers/helper';
|
||||||
import { AddonModSurveyProvider } from './survey';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handler to treat links to survey.
|
* Handler to treat links to survey.
|
||||||
|
@ -25,6 +24,6 @@ export class AddonModSurveyLinkHandler extends CoreContentLinksModuleIndexHandle
|
||||||
name = 'AddonModSurveyLinkHandler';
|
name = 'AddonModSurveyLinkHandler';
|
||||||
|
|
||||||
constructor(courseHelper: CoreCourseHelperProvider) {
|
constructor(courseHelper: CoreCourseHelperProvider) {
|
||||||
super(courseHelper, AddonModSurveyProvider.COMPONENT, 'survey');
|
super(courseHelper, 'AddonModSurvey', 'survey');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,8 @@ import { CoreCourseProvider } from '@core/course/providers/course';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonModSurveyModuleHandler implements CoreCourseModuleHandler {
|
export class AddonModSurveyModuleHandler implements CoreCourseModuleHandler {
|
||||||
name = 'survey';
|
name = 'AddonModSurvey';
|
||||||
|
modName = 'survey';
|
||||||
|
|
||||||
constructor(private courseProvider: CoreCourseProvider) { }
|
constructor(private courseProvider: CoreCourseProvider) { }
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,8 @@ import { AddonModSurveyHelperProvider } from './helper';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonModSurveyPrefetchHandler extends CoreCourseModulePrefetchHandlerBase {
|
export class AddonModSurveyPrefetchHandler extends CoreCourseModulePrefetchHandlerBase {
|
||||||
name = 'survey';
|
name = 'AddonModSurvey';
|
||||||
|
modName = 'survey';
|
||||||
component = AddonModSurveyProvider.COMPONENT;
|
component = AddonModSurveyProvider.COMPONENT;
|
||||||
updatesNames = /^configuration$|^.*files$|^answers$/;
|
updatesNames = /^configuration$|^.*files$|^answers$/;
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler';
|
import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler';
|
||||||
import { CoreCourseHelperProvider } from '@core/course/providers/helper';
|
import { CoreCourseHelperProvider } from '@core/course/providers/helper';
|
||||||
import { AddonModUrlProvider } from './url';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handler to treat links to url.
|
* Handler to treat links to url.
|
||||||
|
@ -25,6 +24,6 @@ export class AddonModUrlLinkHandler extends CoreContentLinksModuleIndexHandler {
|
||||||
name = 'AddonModUrlLinkHandler';
|
name = 'AddonModUrlLinkHandler';
|
||||||
|
|
||||||
constructor(courseHelper: CoreCourseHelperProvider) {
|
constructor(courseHelper: CoreCourseHelperProvider) {
|
||||||
super(courseHelper, AddonModUrlProvider.COMPONENT, 'url');
|
super(courseHelper, 'AddonModUrl', 'url');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,8 @@ import { AddonModUrlHelperProvider } from './helper';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonModUrlModuleHandler implements CoreCourseModuleHandler {
|
export class AddonModUrlModuleHandler implements CoreCourseModuleHandler {
|
||||||
name = 'url';
|
name = 'AddonModUrl';
|
||||||
|
modName = 'url';
|
||||||
|
|
||||||
constructor(private courseProvider: CoreCourseProvider, private urlProvider: AddonModUrlProvider,
|
constructor(private courseProvider: CoreCourseProvider, private urlProvider: AddonModUrlProvider,
|
||||||
private urlHelper: AddonModUrlHelperProvider) { }
|
private urlHelper: AddonModUrlHelperProvider) { }
|
||||||
|
|
|
@ -25,7 +25,7 @@ import { AddonNotesProvider } from './notes';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonNotesUserHandler implements CoreUserProfileHandler {
|
export class AddonNotesUserHandler implements CoreUserProfileHandler {
|
||||||
name = 'AddonNotes';
|
name = 'AddonNotes:addNote';
|
||||||
priority = 200;
|
priority = 200;
|
||||||
type = CoreUserDelegate.TYPE_COMMUNICATION;
|
type = CoreUserDelegate.TYPE_COMMUNICATION;
|
||||||
addNoteEnabledCache = {};
|
addNoteEnabledCache = {};
|
||||||
|
@ -65,8 +65,8 @@ export class AddonNotesUserHandler implements CoreUserProfileHandler {
|
||||||
*
|
*
|
||||||
* @param {any} user User to check.
|
* @param {any} user User to check.
|
||||||
* @param {number} courseId Course ID.
|
* @param {number} courseId Course ID.
|
||||||
* @param {any} [navOptions] Course navigation options for current user. See $mmCourses#getUserNavigationOptions.
|
* @param {any} [navOptions] Course navigation options for current user. See CoreCoursesProvider.getUserNavigationOptions.
|
||||||
* @param {any} [admOptions] Course admin options for current user. See $mmCourses#getUserAdministrationOptions.
|
* @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.
|
* @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> {
|
isEnabledForUser(user: any, courseId: number, navOptions?: any, admOptions?: any): boolean | Promise<boolean> {
|
||||||
|
|
|
@ -21,7 +21,8 @@ import { AddonUserProfileFieldCheckboxComponent } from '../component/checkbox';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonUserProfileFieldCheckboxHandler implements CoreUserProfileFieldHandler {
|
export class AddonUserProfileFieldCheckboxHandler implements CoreUserProfileFieldHandler {
|
||||||
name = 'checkbox';
|
name = 'AddonUserProfileFieldCheckbox';
|
||||||
|
type = 'checkbox';
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
// Nothing to do.
|
// Nothing to do.
|
||||||
|
|
|
@ -21,7 +21,8 @@ import { AddonUserProfileFieldDatetimeComponent } from '../component/datetime';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonUserProfileFieldDatetimeHandler implements CoreUserProfileFieldHandler {
|
export class AddonUserProfileFieldDatetimeHandler implements CoreUserProfileFieldHandler {
|
||||||
name = 'datetime';
|
name = 'AddonUserProfileFieldDatetime';
|
||||||
|
type = 'datetime';
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
// Nothing to do.
|
// Nothing to do.
|
||||||
|
|
|
@ -21,7 +21,8 @@ import { AddonUserProfileFieldMenuComponent } from '../component/menu';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonUserProfileFieldMenuHandler implements CoreUserProfileFieldHandler {
|
export class AddonUserProfileFieldMenuHandler implements CoreUserProfileFieldHandler {
|
||||||
name = 'menu';
|
name = 'AddonUserProfileFieldMenu';
|
||||||
|
type = 'menu';
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
// Nothing to do.
|
// Nothing to do.
|
||||||
|
|
|
@ -22,7 +22,8 @@ import { CoreTextUtilsProvider } from '@providers/utils/text';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonUserProfileFieldTextHandler implements CoreUserProfileFieldHandler {
|
export class AddonUserProfileFieldTextHandler implements CoreUserProfileFieldHandler {
|
||||||
name = 'text';
|
name = 'AddonUserProfileFieldText';
|
||||||
|
type = 'text';
|
||||||
|
|
||||||
constructor(private textUtils: CoreTextUtilsProvider) { }
|
constructor(private textUtils: CoreTextUtilsProvider) { }
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,8 @@ import { CoreTextUtilsProvider } from '@providers/utils/text';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonUserProfileFieldTextareaHandler implements CoreUserProfileFieldHandler {
|
export class AddonUserProfileFieldTextareaHandler implements CoreUserProfileFieldHandler {
|
||||||
name = 'textarea';
|
name = 'AddonUserProfileFieldTextarea';
|
||||||
|
type = 'textarea';
|
||||||
|
|
||||||
constructor(private textUtils: CoreTextUtilsProvider) { }
|
constructor(private textUtils: CoreTextUtilsProvider) { }
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ import { CoreEventsProvider } from '@providers/events';
|
||||||
export interface CoreDelegateHandler {
|
export interface CoreDelegateHandler {
|
||||||
/**
|
/**
|
||||||
* Name of the handler, or name and sub context (AddonMessages, AddonMessages:blockContact, ...).
|
* 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}
|
* @type {string}
|
||||||
*/
|
*/
|
||||||
name: string;
|
name: string;
|
||||||
|
@ -74,6 +75,14 @@ export class CoreDelegate {
|
||||||
*/
|
*/
|
||||||
protected featurePrefix: string;
|
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.
|
* Constructor of the Delegate.
|
||||||
*
|
*
|
||||||
|
@ -182,14 +191,14 @@ export class CoreDelegate {
|
||||||
* @return {boolean} True when registered, false if already registered.
|
* @return {boolean} True when registered, false if already registered.
|
||||||
*/
|
*/
|
||||||
registerHandler(handler: CoreDelegateHandler): boolean {
|
registerHandler(handler: CoreDelegateHandler): boolean {
|
||||||
if (typeof this.handlers[handler.name] !== 'undefined') {
|
if (typeof this.handlers[handler[this.handlerNameProperty]] !== 'undefined') {
|
||||||
this.logger.log(`Addon '${handler.name}' already registered`);
|
this.logger.log(`Handler '${handler[this.handlerNameProperty]}' already registered`);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.logger.log(`Registered addon '${handler.name}'`);
|
this.logger.log(`Registered handler '${handler[this.handlerNameProperty]}'`);
|
||||||
this.handlers[handler.name] = handler;
|
this.handlers[handler[this.handlerNameProperty]] = handler;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -222,9 +231,9 @@ export class CoreDelegate {
|
||||||
// Check that site hasn't changed since the check started.
|
// Check that site hasn't changed since the check started.
|
||||||
if (this.isLastUpdateCall(time) && this.sitesProvider.getCurrentSiteId() === siteId) {
|
if (this.isLastUpdateCall(time) && this.sitesProvider.getCurrentSiteId() === siteId) {
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
this.enabledHandlers[handler.name] = handler;
|
this.enabledHandlers[handler[this.handlerNameProperty]] = handler;
|
||||||
} else {
|
} else {
|
||||||
delete this.enabledHandlers[handler.name];
|
delete this.enabledHandlers[handler[this.handlerNameProperty]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -146,18 +146,18 @@ export interface LocalMobileResponse {
|
||||||
*/
|
*/
|
||||||
export class CoreSite {
|
export class CoreSite {
|
||||||
// List of injected services. This class isn't injectable, so it cannot use DI.
|
// List of injected services. This class isn't injectable, so it cannot use DI.
|
||||||
protected appProvider;
|
protected appProvider: CoreAppProvider;
|
||||||
protected dbProvider;
|
protected dbProvider: CoreDbProvider;
|
||||||
protected domUtils;
|
protected domUtils: CoreDomUtilsProvider;
|
||||||
protected eventsProvider;
|
protected eventsProvider: CoreEventsProvider;
|
||||||
protected fileProvider;
|
protected fileProvider: CoreFileProvider;
|
||||||
protected http;
|
protected http: HttpClient;
|
||||||
protected textUtils;
|
protected textUtils: CoreTextUtilsProvider;
|
||||||
protected timeUtils;
|
protected timeUtils: CoreTimeUtilsProvider;
|
||||||
protected translate;
|
protected translate: TranslateService;
|
||||||
protected utils;
|
protected utils: CoreUtilsProvider;
|
||||||
protected urlUtils;
|
protected urlUtils: CoreUrlUtilsProvider;
|
||||||
protected wsProvider;
|
protected wsProvider: CoreWSProvider;
|
||||||
|
|
||||||
// Variables for the database.
|
// Variables for the database.
|
||||||
protected WS_CACHE_TABLE = 'wscache';
|
protected WS_CACHE_TABLE = 'wscache';
|
||||||
|
@ -184,18 +184,20 @@ export class CoreSite {
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
// Rest of variables.
|
// Versions of Moodle releases.
|
||||||
protected logger;
|
protected MOODLE_RELEASES = {
|
||||||
protected db: SQLiteDB;
|
|
||||||
protected cleanUnicode = false;
|
|
||||||
protected lastAutoLogin = 0;
|
|
||||||
protected moodleReleases = {
|
|
||||||
3.1: 2016052300,
|
3.1: 2016052300,
|
||||||
3.2: 2016120500,
|
3.2: 2016120500,
|
||||||
3.3: 2017051503,
|
3.3: 2017051503,
|
||||||
3.4: 2017111300
|
3.4: 2017111300
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Rest of variables.
|
||||||
|
protected logger;
|
||||||
|
protected db: SQLiteDB;
|
||||||
|
protected cleanUnicode = false;
|
||||||
|
protected lastAutoLogin = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a site.
|
* Create a site.
|
||||||
*
|
*
|
||||||
|
@ -366,6 +368,7 @@ export class CoreSite {
|
||||||
* @param {any} Config.
|
* @param {any} Config.
|
||||||
*/
|
*/
|
||||||
setConfig(config: any): void {
|
setConfig(config: any): void {
|
||||||
|
config.tool_mobile_disabledfeatures = this.textUtils.treatDisabledFeatures(config.tool_mobile_disabledfeatures);
|
||||||
this.config = config;
|
this.config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -935,7 +938,7 @@ export class CoreSite {
|
||||||
const siteFolder = this.fileProvider.getSiteFolder(this.id);
|
const siteFolder = this.fileProvider.getSiteFolder(this.id);
|
||||||
|
|
||||||
return this.fileProvider.removeDir(siteFolder).catch(() => {
|
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 {
|
} else {
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
|
@ -1133,9 +1136,9 @@ export class CoreSite {
|
||||||
* @param {string} url The URL to open.
|
* @param {string} url The URL to open.
|
||||||
* @param {any} [options] Override default options passed to InAppBrowser.
|
* @param {any} [options] Override default options passed to InAppBrowser.
|
||||||
* @param {string} [alertMessage] If defined, an alert will be shown before opening the 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);
|
return this.openWithAutoLogin(true, url, options, alertMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1145,9 +1148,9 @@ export class CoreSite {
|
||||||
* @param {string} url The URL to open.
|
* @param {string} url The URL to open.
|
||||||
* @param {object} [options] Override default options passed to inappbrowser.
|
* @param {object} [options] Override default options passed to inappbrowser.
|
||||||
* @param {string} [alertMessage] If defined, an alert will be shown before opening the 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);
|
return this.openWithAutoLoginIfSameSite(true, url, options, alertMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1158,12 +1161,12 @@ export class CoreSite {
|
||||||
* @param {string} url The URL to open.
|
* @param {string} url The URL to open.
|
||||||
* @param {object} [options] Override default options passed to $cordovaInAppBrowser#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.
|
* @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.
|
// Convenience function to open the URL.
|
||||||
const open = (url): Promise<any> => {
|
const open = (url): Promise<any> => {
|
||||||
return new Promise<InAppBrowserObject>((resolve, reject): void => {
|
return new Promise<InAppBrowserObject | void>((resolve, reject): void => {
|
||||||
if (modal) {
|
if (modal) {
|
||||||
modal.dismiss();
|
modal.dismiss();
|
||||||
}
|
}
|
||||||
|
@ -1223,9 +1226,10 @@ export class CoreSite {
|
||||||
* @param {string} url The URL to open.
|
* @param {string} url The URL to open.
|
||||||
* @param {object} [options] Override default options passed to inappbrowser.
|
* @param {object} [options] Override default options passed to inappbrowser.
|
||||||
* @param {string} [alertMessage] If defined, an alert will be shown before opening the browser/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)) {
|
if (this.containsUrl(url)) {
|
||||||
return this.openWithAutoLogin(inApp, url, options, alertMessage);
|
return this.openWithAutoLogin(inApp, url, options, alertMessage);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1396,12 +1400,12 @@ export class CoreSite {
|
||||||
return 0;
|
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.
|
// 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 {
|
protected getNextMajorVersionNumber(version: string): number {
|
||||||
const data = this.getMajorAndMinor(version),
|
const data = this.getMajorAndMinor(version),
|
||||||
releases = Object.keys(this.moodleReleases);
|
releases = Object.keys(this.MOODLE_RELEASES);
|
||||||
let position;
|
let position;
|
||||||
|
|
||||||
if (!data) {
|
if (!data) {
|
||||||
|
@ -1443,9 +1447,9 @@ export class CoreSite {
|
||||||
|
|
||||||
if (position == -1 || position == releases.length - 1) {
|
if (position == -1 || position == releases.length - 1) {
|
||||||
// Major version not found or it's the last one. Use the last one.
|
// 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.
|
// Match the grade.php URL with an id param.
|
||||||
this.pattern = new RegExp('\/mod\/' + modName + '\/grade\.php.*([\&\?]id=\\d+)');
|
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.
|
// Match the view.php URL with an id param.
|
||||||
this.pattern = new RegExp('\/mod\/' + modName + '\/view\.php.*([\&\?]id=\\d+)');
|
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.
|
* recommended to call the prefetchPackage function since it'll handle changing the status of the module.
|
||||||
*/
|
*/
|
||||||
export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePrefetchHandler {
|
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.
|
* Name of the module. It should match the "modname" of the module returned in core_course_get_contents.
|
||||||
* @type {string}
|
* @type {string}
|
||||||
*/
|
*/
|
||||||
name = '';
|
modName = 'default';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The handler's component.
|
* The handler's component.
|
||||||
|
|
|
@ -20,6 +20,7 @@ import { CoreCourseModuleDelegate } from './providers/module-delegate';
|
||||||
import { CoreCourseModulePrefetchDelegate } from './providers/module-prefetch-delegate';
|
import { CoreCourseModulePrefetchDelegate } from './providers/module-prefetch-delegate';
|
||||||
import { CoreCourseOptionsDelegate } from './providers/options-delegate';
|
import { CoreCourseOptionsDelegate } from './providers/options-delegate';
|
||||||
import { CoreCourseFormatDefaultHandler } from './providers/default-format';
|
import { CoreCourseFormatDefaultHandler } from './providers/default-format';
|
||||||
|
import { CoreCourseModuleDefaultHandler } from './providers/default-module';
|
||||||
import { CoreCourseFormatSingleActivityModule } from './formats/singleactivity/singleactivity.module';
|
import { CoreCourseFormatSingleActivityModule } from './formats/singleactivity/singleactivity.module';
|
||||||
import { CoreCourseFormatSocialModule } from './formats/social/social.module';
|
import { CoreCourseFormatSocialModule } from './formats/social/social.module';
|
||||||
import { CoreCourseFormatTopicsModule } from './formats/topics/topics.module';
|
import { CoreCourseFormatTopicsModule } from './formats/topics/topics.module';
|
||||||
|
@ -44,7 +45,8 @@ export const CORE_COURSE_PROVIDERS: any[] = [
|
||||||
CoreCourseFormatSocialModule
|
CoreCourseFormatSocialModule
|
||||||
],
|
],
|
||||||
providers: CORE_COURSE_PROVIDERS.concat([
|
providers: CORE_COURSE_PROVIDERS.concat([
|
||||||
CoreCourseFormatDefaultHandler
|
CoreCourseFormatDefaultHandler,
|
||||||
|
CoreCourseModuleDefaultHandler
|
||||||
]),
|
]),
|
||||||
exports: []
|
exports: []
|
||||||
})
|
})
|
||||||
|
|
|
@ -21,7 +21,8 @@ import { CoreCourseFormatSingleActivityComponent } from '../components/singleact
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CoreCourseFormatSingleActivityHandler implements CoreCourseFormatHandler {
|
export class CoreCourseFormatSingleActivityHandler implements CoreCourseFormatHandler {
|
||||||
name = 'singleactivity';
|
name = 'CoreCourseFormatSingleActivity';
|
||||||
|
format = 'singleactivity';
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
// Nothing to do.
|
// Nothing to do.
|
||||||
|
|
|
@ -21,5 +21,6 @@ import { CoreCourseFormatSingleActivityHandler } from '../../singleactivity/prov
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CoreCourseFormatSocialHandler extends CoreCourseFormatSingleActivityHandler {
|
export class CoreCourseFormatSocialHandler extends CoreCourseFormatSingleActivityHandler {
|
||||||
name = 'social';
|
name = 'CoreCourseFormatSocial';
|
||||||
|
format = 'social';
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,8 @@ import { CoreCourseFormatHandler } from '../../../providers/format-delegate';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CoreCourseFormatTopicsHandler implements CoreCourseFormatHandler {
|
export class CoreCourseFormatTopicsHandler implements CoreCourseFormatHandler {
|
||||||
name = 'topics';
|
name = 'CoreCourseFormatTopics';
|
||||||
|
format = 'topics';
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
// Nothing to do.
|
// Nothing to do.
|
||||||
|
|
|
@ -22,7 +22,8 @@ import { CoreConstants } from '../../../../constants';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CoreCourseFormatWeeksHandler implements CoreCourseFormatHandler {
|
export class CoreCourseFormatWeeksHandler implements CoreCourseFormatHandler {
|
||||||
name = 'weeks';
|
name = 'CoreCourseFormatWeeks';
|
||||||
|
format = 'weeks';
|
||||||
|
|
||||||
constructor(private timeUtils: CoreTimeUtilsProvider) { }
|
constructor(private timeUtils: CoreTimeUtilsProvider) { }
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,8 @@ import { CoreCourseProvider } from './course';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CoreCourseFormatDefaultHandler implements CoreCourseFormatHandler {
|
export class CoreCourseFormatDefaultHandler implements CoreCourseFormatHandler {
|
||||||
name = 'default';
|
name = 'CoreCourseFormatDefault';
|
||||||
|
format = 'default';
|
||||||
|
|
||||||
constructor(private coursesProvider: CoreCoursesProvider) { }
|
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.
|
* Interface that all course format handlers must implement.
|
||||||
*/
|
*/
|
||||||
export interface CoreCourseFormatHandler extends CoreDelegateHandler {
|
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.
|
* 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.
|
* 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()
|
@Injectable()
|
||||||
export class CoreCourseFormatDelegate extends CoreDelegate {
|
export class CoreCourseFormatDelegate extends CoreDelegate {
|
||||||
protected handlers: { [s: string]: CoreCourseFormatHandler } = {}; // All registered handlers.
|
protected featurePrefix = 'CoreCourseFormatDelegate_';
|
||||||
protected enabledHandlers: { [s: string]: CoreCourseFormatHandler } = {}; // Handlers enabled for the current site.
|
protected handlerNameProperty = 'format';
|
||||||
protected featurePrefix = 'CoreCourseFormatHandler_';
|
|
||||||
|
|
||||||
constructor(loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider, eventsProvider: CoreEventsProvider,
|
constructor(loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider, eventsProvider: CoreEventsProvider,
|
||||||
protected defaultHandler: CoreCourseFormatDefaultHandler) {
|
protected defaultHandler: CoreCourseFormatDefaultHandler) {
|
||||||
|
@ -165,7 +170,7 @@ export class CoreCourseFormatDelegate extends CoreDelegate {
|
||||||
* @return {boolean} Whether it allows seeing all sections at the same time.
|
* @return {boolean} Whether it allows seeing all sections at the same time.
|
||||||
*/
|
*/
|
||||||
canViewAllSections(course: any): boolean {
|
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
|
* @return {boolean} Whether the option to enable section/module download should be displayed
|
||||||
*/
|
*/
|
||||||
displayEnableDownload(course: any): boolean {
|
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.
|
* @return {boolean} Whether the section selector should be displayed.
|
||||||
*/
|
*/
|
||||||
displaySectionSelector(course: any): boolean {
|
displaySectionSelector(course: any): boolean {
|
||||||
return this.executeFunction(course.format, 'displaySectionSelector', [course]);
|
return this.executeFunctionOnEnabled(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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -214,7 +201,8 @@ export class CoreCourseFormatDelegate extends CoreDelegate {
|
||||||
* @return {Promise<any>} Promise resolved with component to use, undefined if not found.
|
* @return {Promise<any>} Promise resolved with component to use, undefined if not found.
|
||||||
*/
|
*/
|
||||||
getAllSectionsComponent(injector: Injector, course: any): Promise<any> {
|
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);
|
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.
|
* @return {Promise<any>} Promise resolved with component to use, undefined if not found.
|
||||||
*/
|
*/
|
||||||
getCourseFormatComponent(injector: Injector, course: any): Promise<any> {
|
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);
|
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.
|
* @return {Promise<any>} Promise resolved with component to use, undefined if not found.
|
||||||
*/
|
*/
|
||||||
getCourseSummaryComponent(injector: Injector, course: any): Promise<any> {
|
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);
|
this.logger.error('Error getting course summary component', e);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -253,7 +243,7 @@ export class CoreCourseFormatDelegate extends CoreDelegate {
|
||||||
* @return {string} Course title.
|
* @return {string} Course title.
|
||||||
*/
|
*/
|
||||||
getCourseTitle(course: any, sections?: any[]): string {
|
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> {
|
getCurrentSection(course: any, sections: any[]): Promise<any> {
|
||||||
// Convert the result to a Promise if it isn't.
|
// 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.
|
// This function should never fail. Just return the first section.
|
||||||
if (sections[0].id != CoreCourseProvider.ALL_SECTIONS_ID) {
|
if (sections[0].id != CoreCourseProvider.ALL_SECTIONS_ID) {
|
||||||
return sections[0];
|
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.
|
* @return {Promise<any>} Promise resolved with component to use, undefined if not found.
|
||||||
*/
|
*/
|
||||||
getSectionSelectorComponent(injector: Injector, course: any): Promise<any> {
|
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) => {
|
.catch((e) => {
|
||||||
this.logger.error('Error getting section selector component', 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.
|
* @return {Promise<any>} Promise resolved with component to use, undefined if not found.
|
||||||
*/
|
*/
|
||||||
getSingleSectionComponent(injector: Injector, course: any): Promise<any> {
|
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);
|
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.
|
* @return {Promise<any>} Promise resolved when the data is invalidated.
|
||||||
*/
|
*/
|
||||||
invalidateData(course: any, sections: any[]): Promise<any> {
|
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.
|
* @return {Promise<any>} Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
openCourse(navCtrl: NavController, course: any): Promise<any> {
|
openCourse(navCtrl: NavController, course: any): Promise<any> {
|
||||||
if (this.enabledHandlers[course.format] && this.enabledHandlers[course.format].openCourse) {
|
return this.executeFunctionOnEnabled(course.format, 'openCourse', [navCtrl, course]);
|
||||||
return this.enabledHandlers[course.format].openCourse(navCtrl, course);
|
|
||||||
}
|
|
||||||
|
|
||||||
return navCtrl.push('CoreCourseSectionPage', { course: course });
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -758,11 +758,8 @@ export class CoreCourseHelperProvider {
|
||||||
/**
|
/**
|
||||||
* Get a course status icon from status.
|
* Get a course status icon from status.
|
||||||
*
|
*
|
||||||
* @module mm.core.course
|
* @param {string} status Course status.
|
||||||
* @ngdoc method
|
* @return {string} Icon name.
|
||||||
* @name $mmCourseHelper#getCourseStatusIconFromStatus
|
|
||||||
* @param {String} status Course status.
|
|
||||||
* @return {String} Icon name.
|
|
||||||
*/
|
*/
|
||||||
getCourseStatusIconFromStatus(status: string): string {
|
getCourseStatusIconFromStatus(status: string): string {
|
||||||
if (status == CoreConstants.DOWNLOADED) {
|
if (status == CoreConstants.DOWNLOADED) {
|
||||||
|
|
|
@ -19,12 +19,19 @@ import { CoreLoggerProvider } from '@providers/logger';
|
||||||
import { CoreSitesProvider } from '@providers/sites';
|
import { CoreSitesProvider } from '@providers/sites';
|
||||||
import { CoreCourseProvider } from './course';
|
import { CoreCourseProvider } from './course';
|
||||||
import { CoreSite } from '@classes/site';
|
import { CoreSite } from '@classes/site';
|
||||||
|
import { CoreCourseModuleDefaultHandler } from './default-module';
|
||||||
import { CoreDelegate, CoreDelegateHandler } from '@classes/delegate';
|
import { CoreDelegate, CoreDelegateHandler } from '@classes/delegate';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface that all course module handlers must implement.
|
* Interface that all course module handlers must implement.
|
||||||
*/
|
*/
|
||||||
export interface CoreCourseModuleHandler extends CoreDelegateHandler {
|
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.
|
* Get the data required to display the module in the course contents view.
|
||||||
*
|
*
|
||||||
|
@ -166,12 +173,11 @@ export interface CoreCourseModuleHandlerButton {
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CoreCourseModuleDelegate extends CoreDelegate {
|
export class CoreCourseModuleDelegate extends CoreDelegate {
|
||||||
protected handlers: { [s: string]: CoreCourseModuleHandler } = {}; // All registered handlers.
|
protected featurePrefix = 'CoreCourseModuleDelegate_';
|
||||||
protected enabledHandlers: { [s: string]: CoreCourseModuleHandler } = {}; // Handlers enabled for the current site.
|
protected handlerNameProperty = 'modName';
|
||||||
protected featurePrefix = '$mmCourseDelegate_';
|
|
||||||
|
|
||||||
constructor(loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider, eventsProvider: CoreEventsProvider,
|
constructor(loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider, eventsProvider: CoreEventsProvider,
|
||||||
protected courseProvider: CoreCourseProvider) {
|
protected courseProvider: CoreCourseProvider, protected defaultHandler: CoreCourseModuleDefaultHandler) {
|
||||||
super('CoreCourseModuleDelegate', loggerProvider, sitesProvider, eventsProvider);
|
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.
|
* @return {Promise<any>} Promise resolved with component to use, undefined if not found.
|
||||||
*/
|
*/
|
||||||
getMainComponent(injector: Injector, course: any, module: any): Promise<any> {
|
getMainComponent(injector: Injector, course: any, module: any): Promise<any> {
|
||||||
const handler = this.enabledHandlers[module.modname];
|
return Promise.resolve(this.executeFunctionOnEnabled(module.modname, 'getMainComponent', [injector, course, module]))
|
||||||
if (handler && handler.getMainComponent) {
|
.catch((err) => {
|
||||||
return Promise.resolve(handler.getMainComponent(injector, course, module)).catch((err) => {
|
this.logger.error('Error getting main component', 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.
|
* @return {CoreCourseModuleHandlerData} Data to render the module.
|
||||||
*/
|
*/
|
||||||
getModuleDataFor(modname: string, module: any, courseId: number, sectionId: number): CoreCourseModuleHandlerData {
|
getModuleDataFor(modname: string, module: any, courseId: number, sectionId: number): CoreCourseModuleHandlerData {
|
||||||
if (typeof this.enabledHandlers[modname] != 'undefined') {
|
return this.executeFunctionOnEnabled(modname, 'getData', [module, courseId, sectionId]);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -255,10 +230,12 @@ export class CoreCourseModuleDelegate extends CoreDelegate {
|
||||||
* @return {boolean} Whether module is disabled.
|
* @return {boolean} Whether module is disabled.
|
||||||
*/
|
*/
|
||||||
isModuleDisabledInSite(modname: string, site?: CoreSite): boolean {
|
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();
|
site = site || this.sitesProvider.getCurrentSite();
|
||||||
|
|
||||||
return this.isFeatureDisabled(this.handlers[modname], site);
|
return this.isFeatureDisabled(handler, site);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -56,6 +56,12 @@ export type CoreCourseModulesProgressFunction = (data: CoreCourseModulesProgress
|
||||||
* Interface that all course prefetch handlers must implement.
|
* Interface that all course prefetch handlers must implement.
|
||||||
*/
|
*/
|
||||||
export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler {
|
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.
|
* The handler's component.
|
||||||
* @type {string}
|
* @type {string}
|
||||||
|
@ -214,6 +220,7 @@ export class CoreCourseModulePrefetchDelegate extends CoreDelegate {
|
||||||
|
|
||||||
protected ROOT_CACHE_KEY = 'mmCourse:';
|
protected ROOT_CACHE_KEY = 'mmCourse:';
|
||||||
protected statusCache = new CoreCache();
|
protected statusCache = new CoreCache();
|
||||||
|
protected handlerNameProperty = 'modName';
|
||||||
|
|
||||||
// Promises for check updates, to prevent performing the same request twice at the same time.
|
// Promises for check updates, to prevent performing the same request twice at the same time.
|
||||||
protected courseUpdatesPromises: { [s: string]: { [s: string]: Promise<any> } } = {};
|
protected courseUpdatesPromises: { [s: string]: { [s: string]: Promise<any> } } = {};
|
||||||
|
|
|
@ -129,8 +129,6 @@ export interface CoreCourseOptionsHandlerToDisplay {
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CoreCourseOptionsDelegate extends CoreDelegate {
|
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 loaded: { [courseId: number]: boolean } = {};
|
||||||
protected lastUpdateHandlersForCoursesStart: any = {};
|
protected lastUpdateHandlersForCoursesStart: any = {};
|
||||||
protected coursesHandlers: {
|
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,
|
constructor(loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider, private utils: CoreUtilsProvider,
|
||||||
protected eventsProvider: CoreEventsProvider, private coursesProvider: CoreCoursesProvider) {
|
protected eventsProvider: CoreEventsProvider, private coursesProvider: CoreCoursesProvider) {
|
||||||
|
@ -440,7 +438,7 @@ export class CoreCourseOptionsDelegate extends CoreDelegate {
|
||||||
this.lastUpdateHandlersForCoursesStart[courseId] = now;
|
this.lastUpdateHandlersForCoursesStart[courseId] = now;
|
||||||
|
|
||||||
for (const name in this.enabledHandlers) {
|
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.
|
// Checks if the handler is enabled for the user.
|
||||||
promises.push(Promise.resolve(handler.isEnabledForCourse(courseId, accessData, navOptions, admOptions))
|
promises.push(Promise.resolve(handler.isEnabledForCourse(courseId, accessData, navOptions, admOptions))
|
||||||
|
|
|
@ -24,7 +24,7 @@ import { CoreCoursesProvider } from './courses';
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CoreCoursesIndexLinkHandler extends CoreContentLinksHandlerBase {
|
export class CoreCoursesIndexLinkHandler extends CoreContentLinksHandlerBase {
|
||||||
name = 'CoreCoursesIndexLinkHandler';
|
name = 'CoreCoursesIndexLinkHandler';
|
||||||
featureName = '$mmSideMenuDelegate_mmCourses';
|
featureName = 'CoreMainMenuDelegate_CoreCourses';
|
||||||
pattern = /\/course\/?(index\.php.*)?$/;
|
pattern = /\/course\/?(index\.php.*)?$/;
|
||||||
|
|
||||||
constructor(private coursesProvider: CoreCoursesProvider, private loginHelper: CoreLoginHelperProvider) {
|
constructor(private coursesProvider: CoreCoursesProvider, private loginHelper: CoreLoginHelperProvider) {
|
||||||
|
|
|
@ -141,7 +141,7 @@ export class CoreCoursesProvider {
|
||||||
isMyCoursesDisabledInSite(site?: CoreSite): boolean {
|
isMyCoursesDisabledInSite(site?: CoreSite): boolean {
|
||||||
site = site || this.sitesProvider.getCurrentSite();
|
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 {
|
isSearchCoursesDisabledInSite(site?: CoreSite): boolean {
|
||||||
site = site || this.sitesProvider.getCurrentSite();
|
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()
|
@Injectable()
|
||||||
export class CoreCoursesMyOverviewLinkHandler extends CoreContentLinksHandlerBase {
|
export class CoreCoursesMyOverviewLinkHandler extends CoreContentLinksHandlerBase {
|
||||||
name = 'CoreCoursesMyOverviewLinkHandler';
|
name = 'CoreCoursesMyOverviewLinkHandler';
|
||||||
featureName = '$mmSideMenuDelegate_mmCourses';
|
featureName = 'CoreMainMenuDelegate_CoreCourses';
|
||||||
pattern = /\/my\/?$/;
|
pattern = /\/my\/?$/;
|
||||||
|
|
||||||
constructor(private loginHelper: CoreLoginHelperProvider) {
|
constructor(private loginHelper: CoreLoginHelperProvider) {
|
||||||
|
|
|
@ -231,7 +231,7 @@ export class CoreCoursesMyOverviewProvider {
|
||||||
isDisabledInSite(site?: CoreSite): boolean {
|
isDisabledInSite(site?: CoreSite): boolean {
|
||||||
site = site || this.sitesProvider.getCurrentSite();
|
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()
|
@Injectable()
|
||||||
export class CoreFileUploaderDelegate extends CoreDelegate {
|
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,
|
constructor(loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider,
|
||||||
protected eventsProvider: CoreEventsProvider) {
|
protected eventsProvider: CoreEventsProvider) {
|
||||||
super('CoreFileUploaderDelegate', loggerProvider, sitesProvider, eventsProvider);
|
super('CoreFileUploaderDelegate', loggerProvider, sitesProvider, eventsProvider);
|
||||||
|
@ -173,7 +170,7 @@ export class CoreFileUploaderDelegate extends CoreDelegate {
|
||||||
const handlers = [];
|
const handlers = [];
|
||||||
|
|
||||||
for (const name in this.enabledHandlers) {
|
for (const name in this.enabledHandlers) {
|
||||||
const handler = this.enabledHandlers[name];
|
const handler = <CoreFileUploaderHandler> this.enabledHandlers[name];
|
||||||
let supportedMimetypes;
|
let supportedMimetypes;
|
||||||
|
|
||||||
if (mimetypes) {
|
if (mimetypes) {
|
||||||
|
|
|
@ -23,7 +23,7 @@ import { CoreGradesProvider } from './grades';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CoreGradesUserHandler implements CoreUserProfileHandler {
|
export class CoreGradesUserHandler implements CoreUserProfileHandler {
|
||||||
name = 'mmGrades';
|
name = 'CoreGrades:viewGrades';
|
||||||
priority = 400;
|
priority = 400;
|
||||||
type = CoreUserDelegate.TYPE_NEW_PAGE;
|
type = CoreUserDelegate.TYPE_NEW_PAGE;
|
||||||
viewGradesEnabledCache = {};
|
viewGradesEnabledCache = {};
|
||||||
|
@ -71,8 +71,8 @@ export class CoreGradesUserHandler implements CoreUserProfileHandler {
|
||||||
*
|
*
|
||||||
* @param {any} user User to check.
|
* @param {any} user User to check.
|
||||||
* @param {number} courseId Course ID.
|
* @param {number} courseId Course ID.
|
||||||
* @param {any} [navOptions] Course navigation options for current user. See $mmCourses#getUserNavigationOptions.
|
* @param {any} [navOptions] Course navigation options for current user. See CoreCoursesProvider.getUserNavigationOptions.
|
||||||
* @param {any} [admOptions] Course admin options for current user. See $mmCourses#getUserAdministrationOptions.
|
* @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.
|
* @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> {
|
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.
|
* @return {boolean} Whether email signup is disabled.
|
||||||
*/
|
*/
|
||||||
isEmailSignupDisabled(config: any): boolean {
|
isEmailSignupDisabled(config: any): boolean {
|
||||||
const disabledFeatures = config && config.tool_mobile_disabledfeatures;
|
let disabledFeatures = config && config.tool_mobile_disabledfeatures;
|
||||||
if (!disabledFeatures) {
|
if (!disabledFeatures) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const regEx = new RegExp('(,|^)\\$mmLoginEmailSignup(,|$)', 'g');
|
disabledFeatures = this.textUtils.treatDisabledFeatures(disabledFeatures);
|
||||||
|
|
||||||
|
const regEx = new RegExp('(,|^)CoreLoginEmailSignup(,|$)', 'g');
|
||||||
|
|
||||||
return !!disabledFeatures.match(regEx);
|
return !!disabledFeatures.match(regEx);
|
||||||
}
|
}
|
||||||
|
@ -744,8 +746,8 @@ export class CoreLoginHelperProvider {
|
||||||
loginUrl += '&passport=' + passport;
|
loginUrl += '&passport=' + passport;
|
||||||
loginUrl += '&urlscheme=' + CoreConfigConstants.customurlscheme;
|
loginUrl += '&urlscheme=' + CoreConfigConstants.customurlscheme;
|
||||||
|
|
||||||
// Store the siteurl and passport in $mmConfig for persistence.
|
// Store the siteurl and passport in CoreConfigProvider for persistence.
|
||||||
// We are "configuring" the app to wait for an SSO. $mmConfig shouldn't be used as a temporary storage.
|
// 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({
|
this.configProvider.set(CoreConstants.LOGIN_LAUNCH_DATA, JSON.stringify({
|
||||||
siteUrl: siteUrl,
|
siteUrl: siteUrl,
|
||||||
passport: passport,
|
passport: passport,
|
||||||
|
|
|
@ -80,8 +80,8 @@ export class CoreMainMenuMorePage implements OnDestroy {
|
||||||
|
|
||||||
this.siteInfo = currentSite.getInfo();
|
this.siteInfo = currentSite.getInfo();
|
||||||
this.logoutLabel = 'core.mainmenu.' + (config && config.tool_mobile_forcelogout == '1' ? 'logout' : 'changesite');
|
this.logoutLabel = 'core.mainmenu.' + (config && config.tool_mobile_forcelogout == '1' ? 'logout' : 'changesite');
|
||||||
this.showWeb = !currentSite.isFeatureDisabled('$mmSideMenuDelegate_website');
|
this.showWeb = !currentSite.isFeatureDisabled('CoreMainMenuDelegate_website');
|
||||||
this.showHelp = !currentSite.isFeatureDisabled('$mmSideMenuDelegate_help');
|
this.showHelp = !currentSite.isFeatureDisabled('CoreMainMenuDelegate_help');
|
||||||
|
|
||||||
currentSite.getDocsUrl().then((docsUrl) => {
|
currentSite.getDocsUrl().then((docsUrl) => {
|
||||||
this.docsUrl = docsUrl;
|
this.docsUrl = docsUrl;
|
||||||
|
|
|
@ -107,11 +107,9 @@ export interface CoreMainMenuHandlerToDisplay extends CoreMainMenuHandlerData {
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CoreMainMenuDelegate extends CoreDelegate {
|
export class CoreMainMenuDelegate extends CoreDelegate {
|
||||||
protected handlers: { [s: string]: CoreMainMenuHandler } = {};
|
|
||||||
protected enabledHandlers: { [s: string]: CoreMainMenuHandler } = {};
|
|
||||||
protected loaded = false;
|
protected loaded = false;
|
||||||
protected siteHandlers: Subject<CoreMainMenuHandlerToDisplay[]> = new BehaviorSubject<CoreMainMenuHandlerToDisplay[]>([]);
|
protected siteHandlers: Subject<CoreMainMenuHandlerToDisplay[]> = new BehaviorSubject<CoreMainMenuHandlerToDisplay[]>([]);
|
||||||
protected featurePrefix = '$mmSideMenuDelegate_';
|
protected featurePrefix = 'CoreMainMenuDelegate_';
|
||||||
|
|
||||||
constructor(protected loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider,
|
constructor(protected loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider,
|
||||||
protected eventsProvider: CoreEventsProvider) {
|
protected eventsProvider: CoreEventsProvider) {
|
||||||
|
@ -153,7 +151,7 @@ export class CoreMainMenuDelegate extends CoreDelegate {
|
||||||
const handlersData: any[] = [];
|
const handlersData: any[] = [];
|
||||||
|
|
||||||
for (const name in this.enabledHandlers) {
|
for (const name in this.enabledHandlers) {
|
||||||
const handler = this.enabledHandlers[name],
|
const handler = <CoreMainMenuHandler> this.enabledHandlers[name],
|
||||||
data = handler.getDisplayData();
|
data = handler.getDisplayData();
|
||||||
|
|
||||||
handlersData.push({
|
handlersData.push({
|
||||||
|
|
|
@ -79,8 +79,6 @@ export interface CoreSettingsHandlerData {
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CoreSettingsDelegate extends CoreDelegate {
|
export class CoreSettingsDelegate extends CoreDelegate {
|
||||||
|
|
||||||
protected handlers: { [s: string]: CoreSettingsHandler } = {};
|
|
||||||
protected enabledHandlers: { [s: string]: CoreSettingsHandler } = {};
|
|
||||||
protected siteHandlers: CoreSettingsHandlerData[] = []; // Handlers to return.
|
protected siteHandlers: CoreSettingsHandlerData[] = []; // Handlers to return.
|
||||||
|
|
||||||
constructor(protected loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider,
|
constructor(protected loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider,
|
||||||
|
@ -113,7 +111,7 @@ export class CoreSettingsDelegate extends CoreDelegate {
|
||||||
const handlersData: any[] = [];
|
const handlersData: any[] = [];
|
||||||
|
|
||||||
for (const name in this.enabledHandlers) {
|
for (const name in this.enabledHandlers) {
|
||||||
const handler = this.enabledHandlers[name],
|
const handler = <CoreSettingsHandler> this.enabledHandlers[name],
|
||||||
data = handler.getDisplayData();
|
data = handler.getDisplayData();
|
||||||
|
|
||||||
handlersData.push({
|
handlersData.push({
|
||||||
|
|
|
@ -25,7 +25,7 @@ import { CoreSiteHomeProvider } from './sitehome';
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CoreSiteHomeIndexLinkHandler extends CoreContentLinksHandlerBase {
|
export class CoreSiteHomeIndexLinkHandler extends CoreContentLinksHandlerBase {
|
||||||
name = 'CoreSiteHomeIndexLinkHandler';
|
name = 'CoreSiteHomeIndexLinkHandler';
|
||||||
featureName = '$mmSideMenuDelegate_mmaFrontpage';
|
featureName = 'CoreMainMenuDelegate_CoreSiteHome';
|
||||||
pattern = /\/course\/view\.php.*([\?\&]id=\d+)/;
|
pattern = /\/course\/view\.php.*([\?\&]id=\d+)/;
|
||||||
|
|
||||||
constructor(private sitesProvider: CoreSitesProvider, private siteHomeProvider: CoreSiteHomeProvider,
|
constructor(private sitesProvider: CoreSitesProvider, private siteHomeProvider: CoreSiteHomeProvider,
|
||||||
|
|
|
@ -100,6 +100,6 @@ export class CoreSiteHomeProvider {
|
||||||
isDisabledInSite(site: CoreSite): boolean {
|
isDisabledInSite(site: CoreSite): boolean {
|
||||||
site = site || this.sitesProvider.getCurrentSite();
|
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 {
|
export class CoreSitePluginsCourseFormatHandler extends CoreSitePluginsBaseHandler implements CoreCourseFormatHandler {
|
||||||
|
|
||||||
constructor(name: string, protected handlerSchema: any) {
|
constructor(name: string, public format: string, protected handlerSchema: any) {
|
||||||
super(name);
|
super(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ import { CoreSitePluginsModuleIndexComponent } from '../components/module-index/
|
||||||
export class CoreSitePluginsModuleHandler extends CoreSitePluginsBaseHandler implements CoreCourseModuleHandler {
|
export class CoreSitePluginsModuleHandler extends CoreSitePluginsBaseHandler implements CoreCourseModuleHandler {
|
||||||
priority: number;
|
priority: number;
|
||||||
|
|
||||||
constructor(name: string, protected handlerSchema: any) {
|
constructor(name: string, public modName: string, protected handlerSchema: any) {
|
||||||
super(name);
|
super(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,12 +22,13 @@ import { CoreCourseModulePrefetchHandlerBase } from '@core/course/classes/module
|
||||||
export class CoreSitePluginsModulePrefetchHandler extends CoreCourseModulePrefetchHandlerBase {
|
export class CoreSitePluginsModulePrefetchHandler extends CoreCourseModulePrefetchHandlerBase {
|
||||||
protected ROOT_CACHE_KEY = 'CoreSitePluginsModulePrefetchHandler:';
|
protected ROOT_CACHE_KEY = 'CoreSitePluginsModulePrefetchHandler:';
|
||||||
|
|
||||||
constructor(injector: Injector, protected sitePluginsProvider: CoreSitePluginsProvider, component: string, modName: string,
|
constructor(injector: Injector, protected sitePluginsProvider: CoreSitePluginsProvider, component: string, name: string,
|
||||||
protected handlerSchema: any) {
|
modName: string, protected handlerSchema: any) {
|
||||||
super(injector);
|
super(injector);
|
||||||
|
|
||||||
this.component = component;
|
this.component = component;
|
||||||
this.name = modName;
|
this.name = name;
|
||||||
|
this.modName = modName;
|
||||||
this.isResource = handlerSchema.isresource;
|
this.isResource = handlerSchema.isresource;
|
||||||
|
|
||||||
if (handlerSchema.updatesnames) {
|
if (handlerSchema.updatesnames) {
|
||||||
|
|
|
@ -22,7 +22,7 @@ import { CoreSitePluginsUserProfileFieldComponent } from '../components/user-pro
|
||||||
*/
|
*/
|
||||||
export class CoreSitePluginsUserProfileFieldHandler extends CoreSitePluginsBaseHandler implements CoreUserProfileFieldHandler {
|
export class CoreSitePluginsUserProfileFieldHandler extends CoreSitePluginsBaseHandler implements CoreUserProfileFieldHandler {
|
||||||
|
|
||||||
constructor(name: string) {
|
constructor(name: string, public type: string) {
|
||||||
super(name);
|
super(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -353,8 +353,9 @@ export class CoreSitePluginsHelperProvider {
|
||||||
this.logger.debug('Register site plugin in course format delegate:', plugin, handlerSchema, bootstrapResult);
|
this.logger.debug('Register site plugin in course format delegate:', plugin, handlerSchema, bootstrapResult);
|
||||||
|
|
||||||
// Create and register the handler.
|
// Create and register the handler.
|
||||||
const formatName = plugin.component.replace('format_', '');
|
const uniqueName = this.sitePluginsProvider.getHandlerUniqueName(plugin, handlerName),
|
||||||
this.courseFormatDelegate.registerHandler(new CoreSitePluginsCourseFormatHandler(formatName, handlerSchema));
|
formatName = plugin.component.replace('format_', '');
|
||||||
|
this.courseFormatDelegate.registerHandler(new CoreSitePluginsCourseFormatHandler(uniqueName, formatName, handlerSchema));
|
||||||
|
|
||||||
return formatName;
|
return formatName;
|
||||||
}
|
}
|
||||||
|
@ -437,14 +438,15 @@ export class CoreSitePluginsHelperProvider {
|
||||||
this.logger.debug('Register site plugin in module delegate:', plugin, handlerSchema, bootstrapResult);
|
this.logger.debug('Register site plugin in module delegate:', plugin, handlerSchema, bootstrapResult);
|
||||||
|
|
||||||
// Create and register the handler.
|
// 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) {
|
if (handlerSchema.offlinefunctions && Object.keys(handlerSchema.offlinefunctions).length) {
|
||||||
// Register the prefetch handler.
|
// Register the prefetch handler.
|
||||||
this.prefetchDelegate.registerHandler(new CoreSitePluginsModulePrefetchHandler(
|
this.prefetchDelegate.registerHandler(new CoreSitePluginsModulePrefetchHandler(
|
||||||
this.injector, this.sitePluginsProvider, plugin.component, modName, handlerSchema));
|
this.injector, this.sitePluginsProvider, plugin.component, uniqueName, modName, handlerSchema));
|
||||||
}
|
}
|
||||||
|
|
||||||
return modName;
|
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.
|
// 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) => {
|
return this.executeMethodAndJS(plugin, handlerSchema.method).then((result) => {
|
||||||
// Create and register the handler.
|
// Create and register the handler.
|
||||||
const fieldType = plugin.component.replace('profilefield_', ''),
|
const uniqueName = this.sitePluginsProvider.getHandlerUniqueName(plugin, handlerName),
|
||||||
fieldHandler = new CoreSitePluginsUserProfileFieldHandler(fieldType);
|
fieldType = plugin.component.replace('profilefield_', ''),
|
||||||
|
fieldHandler = new CoreSitePluginsUserProfileFieldHandler(uniqueName, fieldType);
|
||||||
|
|
||||||
// Store in handlerSchema some data required by the component.
|
// Store in handlerSchema some data required by the component.
|
||||||
handlerSchema.methodTemplates = result.templates;
|
handlerSchema.methodTemplates = result.templates;
|
||||||
|
|
|
@ -24,7 +24,7 @@ import { CoreUserProvider } from './user';
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CoreUserParticipantsLinkHandler extends CoreContentLinksHandlerBase {
|
export class CoreUserParticipantsLinkHandler extends CoreContentLinksHandlerBase {
|
||||||
name = 'CoreUserParticipants';
|
name = 'CoreUserParticipants';
|
||||||
featureName = '$mmCoursesDelegate_mmaParticipants';
|
featureName = 'CoreCourseOptionsDelegate_CoreUserParticipants';
|
||||||
pattern = /\/user\/index\.php/;
|
pattern = /\/user\/index\.php/;
|
||||||
|
|
||||||
constructor(private userProvider: CoreUserProvider, private loginHelper: CoreLoginHelperProvider) {
|
constructor(private userProvider: CoreUserProvider, private loginHelper: CoreLoginHelperProvider) {
|
||||||
|
|
|
@ -162,12 +162,10 @@ export class CoreUserDelegate extends CoreDelegate {
|
||||||
*/
|
*/
|
||||||
static UPDATE_HANDLER_EVENT = 'CoreUserDelegate_update_handler_event';
|
static UPDATE_HANDLER_EVENT = 'CoreUserDelegate_update_handler_event';
|
||||||
|
|
||||||
protected handlers: { [s: string]: CoreUserProfileHandler } = {};
|
|
||||||
protected enabledHandlers: { [s: string]: CoreUserProfileHandler } = {};
|
|
||||||
protected observableHandlers: Subject<CoreUserProfileHandlerToDisplay[]> =
|
protected observableHandlers: Subject<CoreUserProfileHandlerToDisplay[]> =
|
||||||
new BehaviorSubject<CoreUserProfileHandlerToDisplay[]>([]);
|
new BehaviorSubject<CoreUserProfileHandlerToDisplay[]>([]);
|
||||||
protected userHandlers: CoreUserProfileHandlerToDisplay[] = [];
|
protected userHandlers: CoreUserProfileHandlerToDisplay[] = [];
|
||||||
protected featurePrefix = '$mmUserDelegate_';
|
protected featurePrefix = 'CoreUserDelegate_';
|
||||||
protected loaded = false;
|
protected loaded = false;
|
||||||
|
|
||||||
constructor(protected loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider,
|
constructor(protected loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider,
|
||||||
|
@ -233,7 +231,7 @@ export class CoreUserDelegate extends CoreDelegate {
|
||||||
|
|
||||||
for (const name in this.enabledHandlers) {
|
for (const name in this.enabledHandlers) {
|
||||||
// Checks if the handler is enabled for the user.
|
// 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),
|
isEnabledForUser = handler.isEnabledForUser(user, courseId, navOptions, admOptions),
|
||||||
promise = Promise.resolve(isEnabledForUser).then((enabled) => {
|
promise = Promise.resolve(isEnabledForUser).then((enabled) => {
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
|
|
|
@ -21,7 +21,7 @@ import { CoreSitesProvider } from '@providers/sites';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CoreUserProfileMailHandler implements CoreUserProfileHandler {
|
export class CoreUserProfileMailHandler implements CoreUserProfileHandler {
|
||||||
name = 'mmUser';
|
name = 'CoreUserProfileMail';
|
||||||
priority = 700;
|
priority = 700;
|
||||||
type = CoreUserDelegate.TYPE_COMMUNICATION;
|
type = CoreUserDelegate.TYPE_COMMUNICATION;
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,11 @@ import { CoreSitesProvider } from '@providers/sites';
|
||||||
import { CoreEventsProvider } from '@providers/events';
|
import { CoreEventsProvider } from '@providers/events';
|
||||||
|
|
||||||
export interface CoreUserProfileFieldHandler extends CoreDelegateHandler {
|
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.
|
* Return the Component to use to display the user profile field.
|
||||||
|
@ -66,8 +71,7 @@ export interface CoreUserProfileFieldHandlerData {
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CoreUserProfileFieldDelegate extends CoreDelegate {
|
export class CoreUserProfileFieldDelegate extends CoreDelegate {
|
||||||
protected handlers: { [s: string]: CoreUserProfileFieldHandler } = {};
|
protected handlerNameProperty = 'type';
|
||||||
protected enabledHandlers: { [s: string]: CoreUserProfileFieldHandler } = {};
|
|
||||||
|
|
||||||
constructor(protected loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider,
|
constructor(protected loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider,
|
||||||
protected eventsProvider: CoreEventsProvider) {
|
protected eventsProvider: CoreEventsProvider) {
|
||||||
|
|
|
@ -306,7 +306,7 @@ export class CoreUserProvider {
|
||||||
isParticipantsDisabledInSite(site?: any): boolean {
|
isParticipantsDisabledInSite(site?: any): boolean {
|
||||||
site = site || this.sitesProvider.getCurrentSite();
|
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 {
|
isUpdatePictureDisabledInSite(site?: CoreSite): boolean {
|
||||||
site = site || this.sitesProvider.getCurrentSite();
|
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) {
|
if (localStorage && localStorage.getItem) {
|
||||||
try {
|
try {
|
||||||
const data: CoreRedirectData = {
|
const data: CoreRedirectData = {
|
||||||
siteId: localStorage.getItem('mmCoreRedirectSiteId'),
|
siteId: localStorage.getItem('CoreRedirectSiteId'),
|
||||||
page: localStorage.getItem('mmCoreRedirectState'),
|
page: localStorage.getItem('CoreRedirectState'),
|
||||||
params: localStorage.getItem('mmCoreRedirectParams'),
|
params: localStorage.getItem('CoreRedirectParams'),
|
||||||
timemodified: parseInt(localStorage.getItem('mmCoreRedirectTime'), 10)
|
timemodified: parseInt(localStorage.getItem('CoreRedirectTime'), 10)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (data.params) {
|
if (data.params) {
|
||||||
|
@ -352,10 +352,10 @@ export class CoreAppProvider {
|
||||||
storeRedirect(siteId: string, page: string, params: any): void {
|
storeRedirect(siteId: string, page: string, params: any): void {
|
||||||
if (localStorage && localStorage.setItem) {
|
if (localStorage && localStorage.setItem) {
|
||||||
try {
|
try {
|
||||||
localStorage.setItem('mmCoreRedirectSiteId', siteId);
|
localStorage.setItem('CoreRedirectSiteId', siteId);
|
||||||
localStorage.setItem('mmCoreRedirectState', page);
|
localStorage.setItem('CoreRedirectState', page);
|
||||||
localStorage.setItem('mmCoreRedirectParams', JSON.stringify(params));
|
localStorage.setItem('CoreRedirectParams', JSON.stringify(params));
|
||||||
localStorage.setItem('mmCoreRedirectTime', String(Date.now()));
|
localStorage.setItem('CoreRedirectTime', String(Date.now()));
|
||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
// Ignore errors.
|
// Ignore errors.
|
||||||
}
|
}
|
||||||
|
|
|
@ -242,11 +242,11 @@ export class CoreFilepoolProvider {
|
||||||
protected FOLDER = 'filepool';
|
protected FOLDER = 'filepool';
|
||||||
protected WIFI_DOWNLOAD_THRESHOLD = 20971520; // 20MB.
|
protected WIFI_DOWNLOAD_THRESHOLD = 20971520; // 20MB.
|
||||||
protected DOWNLOAD_THRESHOLD = 2097152; // 2MB.
|
protected DOWNLOAD_THRESHOLD = 2097152; // 2MB.
|
||||||
protected QUEUE_RUNNING = 'mmFilepool:QUEUE_RUNNING';
|
protected QUEUE_RUNNING = 'CoreFilepool:QUEUE_RUNNING';
|
||||||
protected QUEUE_PAUSED = 'mmFilepool:QUEUE_PAUSED';
|
protected QUEUE_PAUSED = 'CoreFilepool:QUEUE_PAUSED';
|
||||||
protected ERR_QUEUE_IS_EMPTY = 'mmFilepoolError:ERR_QUEUE_IS_EMPTY';
|
protected ERR_QUEUE_IS_EMPTY = 'CoreFilepoolError:ERR_QUEUE_IS_EMPTY';
|
||||||
protected ERR_FS_OR_NETWORK_UNAVAILABLE = 'mmFilepoolError:ERR_FS_OR_NETWORK_UNAVAILABLE';
|
protected ERR_FS_OR_NETWORK_UNAVAILABLE = 'CoreFilepoolError:ERR_FS_OR_NETWORK_UNAVAILABLE';
|
||||||
protected ERR_QUEUE_ON_PAUSE = 'mmFilepoolError:ERR_QUEUE_ON_PAUSE';
|
protected ERR_QUEUE_ON_PAUSE = 'CoreFilepoolError:ERR_QUEUE_ON_PAUSE';
|
||||||
|
|
||||||
// Variables for database.
|
// Variables for database.
|
||||||
protected QUEUE_TABLE = 'filepool_files_queue'; // Queue of files to download.
|
protected QUEUE_TABLE = 'filepool_files_queue'; // Queue of files to download.
|
||||||
|
@ -1369,7 +1369,7 @@ export class CoreFilepoolProvider {
|
||||||
* @return {string} Event name.
|
* @return {string} Event name.
|
||||||
*/
|
*/
|
||||||
protected getFileEventName(siteId: string, fileId: string): string {
|
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.
|
* 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.
|
* @return {boolean} Whether it's ready.
|
||||||
*/
|
*/
|
||||||
isReady(): boolean {
|
isReady(): boolean {
|
||||||
|
|
|
@ -22,6 +22,52 @@ import { CoreLangProvider } from '../lang';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CoreTextUtilsProvider {
|
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.
|
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) { }
|
constructor(private translate: TranslateService, private langProvider: CoreLangProvider, private modalCtrl: ModalController) { }
|
||||||
|
@ -534,6 +580,26 @@ export class CoreTextUtilsProvider {
|
||||||
return stripped;
|
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.
|
* Treat the multilang tags from a HTML code, leaving only the current language.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue