diff --git a/src/addons/messageoutput/services/messageoutput-delegate.ts b/src/addons/messageoutput/services/messageoutput-delegate.ts index ba99f0647..0e6837158 100644 --- a/src/addons/messageoutput/services/messageoutput-delegate.ts +++ b/src/addons/messageoutput/services/messageoutput-delegate.ts @@ -75,7 +75,7 @@ export class AddonMessageOutputDelegateService extends CoreDelegate { return AddonModAssignFeedbackCommentsComponent; } /** - * Return the draft saved data of the feedback plugin. - * - * @param assignId The assignment ID. - * @param userId User ID. - * @param siteId Site ID. If not defined, current site. - * @returns Data (or promise resolved with the data). + * @inheritdoc */ getDraft(assignId: number, userId: number, siteId?: string): AddonModAssignFeedbackCommentsDraftData | undefined { const id = this.getDraftId(assignId, userId, siteId); @@ -114,13 +102,7 @@ export class AddonModAssignFeedbackCommentsHandlerService implements AddonModAss } /** - * Get files used by this plugin. - * The files returned by this function will be prefetched when the user prefetches the assign. - * - * @param assign The assignment. - * @param submission The submission. - * @param plugin The plugin object. - * @returns The files (or promise resolved with the files). + * @inheritdoc */ getPluginFiles( assign: AddonModAssignAssign, @@ -131,14 +113,7 @@ export class AddonModAssignFeedbackCommentsHandlerService implements AddonModAss } /** - * Check if the feedback data has changed for this plugin. - * - * @param assign The assignment. - * @param submission The submission. - * @param plugin The plugin object. - * @param inputData Data entered by the user for the feedback. - * @param userId User ID of the submission. - * @returns Boolean (or promise resolved with boolean): whether the data has changed. + * @inheritdoc */ async hasDataChanged( assign: AddonModAssignAssign, @@ -172,12 +147,7 @@ export class AddonModAssignFeedbackCommentsHandlerService implements AddonModAss } /** - * Check whether the plugin has draft data stored. - * - * @param assignId The assignment ID. - * @param userId User ID. - * @param siteId Site ID. If not defined, current site. - * @returns Boolean or promise resolved with boolean: whether the plugin has draft data. + * @inheritdoc */ hasDraftData(assignId: number, userId: number, siteId?: string): boolean | Promise { const draft = this.getDraft(assignId, userId, siteId); @@ -186,9 +156,7 @@ export class AddonModAssignFeedbackCommentsHandlerService implements AddonModAss } /** - * Whether or not the handler is enabled on a site level. - * - * @returns True or promise resolved with true if enabled. + * @inheritdoc */ async isEnabled(): Promise { // In here we should check if comments is not disabled in site. @@ -198,13 +166,7 @@ export class AddonModAssignFeedbackCommentsHandlerService implements AddonModAss } /** - * Prepare and add to pluginData the data to send to the server based on the draft data saved. - * - * @param assignId The assignment ID. - * @param userId User ID. - * @param plugin The plugin object. - * @param pluginData Object where to store the data to send. - * @param siteId Site ID. If not defined, current site. + * @inheritdoc */ prepareFeedbackData( assignId: number, @@ -225,13 +187,7 @@ export class AddonModAssignFeedbackCommentsHandlerService implements AddonModAss } /** - * Save draft data of the feedback plugin. - * - * @param assignId The assignment ID. - * @param userId User ID. - * @param plugin The plugin object. - * @param data The data to save. - * @param siteId Site ID. If not defined, current site. + * @inheritdoc */ saveDraft( assignId: number, diff --git a/src/addons/mod/assign/feedback/editpdf/services/handler.ts b/src/addons/mod/assign/feedback/editpdf/services/handler.ts index 17d871a96..c40c2e36b 100644 --- a/src/addons/mod/assign/feedback/editpdf/services/handler.ts +++ b/src/addons/mod/assign/feedback/editpdf/services/handler.ts @@ -35,23 +35,14 @@ export class AddonModAssignFeedbackEditPdfHandlerService implements AddonModAssi type = 'editpdf'; /** - * Return the Component to use to display the plugin data. - * It's recommended to return the class of the component, but you can also return an instance of the component. - * - * @returns The component (or promise resolved with component) to use, undefined if not found. + * @inheritdoc */ getComponent(): Type { return AddonModAssignFeedbackEditPdfComponent; } /** - * Get files used by this plugin. - * The files returned by this function will be prefetched when the user prefetches the assign. - * - * @param assign The assignment. - * @param submission The submission. - * @param plugin The plugin object. - * @returns The files (or promise resolved with the files). + * @inheritdoc */ getPluginFiles( assign: AddonModAssignAssign, @@ -62,9 +53,7 @@ export class AddonModAssignFeedbackEditPdfHandlerService implements AddonModAssi } /** - * Whether or not the handler is enabled on a site level. - * - * @returns True or promise resolved with true if enabled. + * @inheritdoc */ async isEnabled(): Promise { return true; diff --git a/src/addons/mod/assign/feedback/file/services/handler.ts b/src/addons/mod/assign/feedback/file/services/handler.ts index 3fac9b626..dad819815 100644 --- a/src/addons/mod/assign/feedback/file/services/handler.ts +++ b/src/addons/mod/assign/feedback/file/services/handler.ts @@ -35,23 +35,14 @@ export class AddonModAssignFeedbackFileHandlerService implements AddonModAssignF type = 'file'; /** - * Return the Component to use to display the plugin data. - * It's recommended to return the class of the component, but you can also return an instance of the component. - * - * @returns The component (or promise resolved with component) to use, undefined if not found. + * @inheritdoc */ getComponent(): Type { return AddonModAssignFeedbackFileComponent; } /** - * Get files used by this plugin. - * The files returned by this function will be prefetched when the user prefetches the assign. - * - * @param assign The assignment. - * @param submission The submission. - * @param plugin The plugin object. - * @returns The files (or promise resolved with the files). + * @inheritdoc */ getPluginFiles( assign: AddonModAssignAssign, @@ -62,9 +53,7 @@ export class AddonModAssignFeedbackFileHandlerService implements AddonModAssignF } /** - * Whether or not the handler is enabled on a site level. - * - * @returns True or promise resolved with true if enabled. + * @inheritdoc */ async isEnabled(): Promise { return true; diff --git a/src/addons/mod/assign/services/feedback-delegate.ts b/src/addons/mod/assign/services/feedback-delegate.ts index 0197c7bce..d7505ecc5 100644 --- a/src/addons/mod/assign/services/feedback-delegate.ts +++ b/src/addons/mod/assign/services/feedback-delegate.ts @@ -21,6 +21,8 @@ import { CoreWSFile } from '@services/ws'; import { AddonModAssignSubmissionFormatted } from './assign-helper'; import { CoreFormFields } from '@singletons/form'; import type { IAddonModAssignFeedbackPluginComponent } from '@addons/mod/assign/classes/base-feedback-plugin-component'; +import { CoreSites } from '@services/sites'; +import { ADDON_MOD_ASSIGN_FEATURE_NAME } from '../constants'; /** * Interface that all feedback handlers must implement. @@ -185,7 +187,14 @@ export class AddonModAssignFeedbackDelegateService extends CoreDelegate { + return !(await CoreSites.isFeatureDisabled(ADDON_MOD_ASSIGN_FEATURE_NAME)); } /** diff --git a/src/addons/mod/assign/services/handlers/default-feedback.ts b/src/addons/mod/assign/services/handlers/default-feedback.ts index 0de9e391a..d72d41ca0 100644 --- a/src/addons/mod/assign/services/handlers/default-feedback.ts +++ b/src/addons/mod/assign/services/handlers/default-feedback.ts @@ -15,8 +15,9 @@ import { Injectable } from '@angular/core'; import { CoreWSFile } from '@services/ws'; import { Translate } from '@singletons'; -import { AddonModAssignPlugin } from '../assign'; +import { AddonModAssignAssign, AddonModAssignPlugin, AddonModAssignSavePluginData, AddonModAssignSubmission } from '../assign'; import { AddonModAssignFeedbackHandler } from '../feedback-delegate'; +import { CoreFormFields } from '@singletons/form'; /** * Default handler used when a feedback plugin doesn't have a specific implementation. @@ -30,14 +31,19 @@ export class AddonModAssignDefaultFeedbackHandler implements AddonModAssignFeedb /** * @inheritdoc */ - discardDraft(): void { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + discardDraft(assignId: number, userId: number, siteId?: string): void | Promise { // Nothing to do. } /** * @inheritdoc */ - getDraft(): undefined { + getDraft( + assignId: number, // eslint-disable-line @typescript-eslint/no-unused-vars + userId: number, // eslint-disable-line @typescript-eslint/no-unused-vars + siteId?: string, // eslint-disable-line @typescript-eslint/no-unused-vars + ): CoreFormFields | Promise | undefined { // Nothing to do. return; } @@ -45,7 +51,12 @@ export class AddonModAssignDefaultFeedbackHandler implements AddonModAssignFeedb /** * @inheritdoc */ - getPluginFiles(): CoreWSFile[] { + getPluginFiles( + assign: AddonModAssignAssign, // eslint-disable-line @typescript-eslint/no-unused-vars + submission: AddonModAssignSubmission, // eslint-disable-line @typescript-eslint/no-unused-vars + plugin: AddonModAssignPlugin, // eslint-disable-line @typescript-eslint/no-unused-vars + siteId?: string, // eslint-disable-line @typescript-eslint/no-unused-vars + ): CoreWSFile[] | Promise { return []; } @@ -73,14 +84,21 @@ export class AddonModAssignDefaultFeedbackHandler implements AddonModAssignFeedb /** * @inheritdoc */ - hasDataChanged(): boolean { + async hasDataChanged( + assign: AddonModAssignAssign, // eslint-disable-line @typescript-eslint/no-unused-vars + submission: AddonModAssignSubmission, // eslint-disable-line @typescript-eslint/no-unused-vars + plugin: AddonModAssignPlugin, // eslint-disable-line @typescript-eslint/no-unused-vars + inputData: CoreFormFields, // eslint-disable-line @typescript-eslint/no-unused-vars + userId: number, // eslint-disable-line @typescript-eslint/no-unused-vars + ): Promise { return false; } /** * @inheritdoc */ - hasDraftData(): boolean { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + hasDraftData(assignId: number, userId: number, siteId?: string): boolean | Promise { return false; } @@ -94,21 +112,38 @@ export class AddonModAssignDefaultFeedbackHandler implements AddonModAssignFeedb /** * @inheritdoc */ - async prefetch(): Promise { + async prefetch( + assign: AddonModAssignAssign, // eslint-disable-line @typescript-eslint/no-unused-vars + submission: AddonModAssignSubmission, // eslint-disable-line @typescript-eslint/no-unused-vars + plugin: AddonModAssignPlugin, // eslint-disable-line @typescript-eslint/no-unused-vars + siteId?: string, // eslint-disable-line @typescript-eslint/no-unused-vars + ): Promise { return; } /** * @inheritdoc */ - prepareFeedbackData(): void { + prepareFeedbackData( + assignId: number, // eslint-disable-line @typescript-eslint/no-unused-vars + userId: number, // eslint-disable-line @typescript-eslint/no-unused-vars + plugin: AddonModAssignPlugin, // eslint-disable-line @typescript-eslint/no-unused-vars + pluginData: AddonModAssignSavePluginData, // eslint-disable-line @typescript-eslint/no-unused-vars + siteId?: string, // eslint-disable-line @typescript-eslint/no-unused-vars + ): void | Promise { // Nothing to do. } /** * @inheritdoc */ - saveDraft(): void { + saveDraft( + assignId: number, // eslint-disable-line @typescript-eslint/no-unused-vars + userId: number, // eslint-disable-line @typescript-eslint/no-unused-vars + plugin: AddonModAssignPlugin, // eslint-disable-line @typescript-eslint/no-unused-vars + data: CoreFormFields, // eslint-disable-line @typescript-eslint/no-unused-vars + siteId?: string, // eslint-disable-line @typescript-eslint/no-unused-vars + ): void | Promise { // Nothing to do. } diff --git a/src/addons/mod/assign/services/handlers/default-submission.ts b/src/addons/mod/assign/services/handlers/default-submission.ts index 3ab79c0b2..e78516b57 100644 --- a/src/addons/mod/assign/services/handlers/default-submission.ts +++ b/src/addons/mod/assign/services/handlers/default-submission.ts @@ -15,8 +15,10 @@ import { Injectable } from '@angular/core'; import { CoreWSFile } from '@services/ws'; import { Translate } from '@singletons'; -import { AddonModAssignPlugin } from '../assign'; +import { AddonModAssignAssign, AddonModAssignPlugin, AddonModAssignSavePluginData, AddonModAssignSubmission } from '../assign'; import { AddonModAssignSubmissionHandler } from '../submission-delegate'; +import { CoreFormFields } from '@singletons/form'; +import { AddonModAssignSubmissionsDBRecordFormatted } from '../assign-offline'; /** * Default handler used when a submission plugin doesn't have a specific implementation. @@ -30,42 +32,71 @@ export class AddonModAssignDefaultSubmissionHandler implements AddonModAssignSub /** * @inheritdoc */ - canEditOffline(): boolean | Promise { + canEditOffline( + assign: AddonModAssignAssign, // eslint-disable-line @typescript-eslint/no-unused-vars + submission: AddonModAssignSubmission, // eslint-disable-line @typescript-eslint/no-unused-vars + plugin: AddonModAssignPlugin, // eslint-disable-line @typescript-eslint/no-unused-vars + ): boolean | Promise { return false; } /** * @inheritdoc */ - isEmpty(): boolean { + isEmpty( + assign: AddonModAssignAssign, // eslint-disable-line @typescript-eslint/no-unused-vars + plugin: AddonModAssignPlugin, // eslint-disable-line @typescript-eslint/no-unused-vars + ): boolean { return true; } /** * @inheritdoc */ - clearTmpData(): void { + clearTmpData( + assign: AddonModAssignAssign, // eslint-disable-line @typescript-eslint/no-unused-vars + submission: AddonModAssignSubmission, // eslint-disable-line @typescript-eslint/no-unused-vars + plugin: AddonModAssignPlugin, // eslint-disable-line @typescript-eslint/no-unused-vars + inputData: CoreFormFields, // eslint-disable-line @typescript-eslint/no-unused-vars + ): void { // Nothing to do. } /** * @inheritdoc */ - copySubmissionData(): void { + copySubmissionData( + assign: AddonModAssignAssign, // eslint-disable-line @typescript-eslint/no-unused-vars + plugin: AddonModAssignPlugin, // eslint-disable-line @typescript-eslint/no-unused-vars + pluginData: AddonModAssignSavePluginData, // eslint-disable-line @typescript-eslint/no-unused-vars + userId?: number, // eslint-disable-line @typescript-eslint/no-unused-vars + siteId?: string, // eslint-disable-line @typescript-eslint/no-unused-vars + ): void | Promise { // Nothing to do. } /** * @inheritdoc */ - deleteOfflineData(): void { + deleteOfflineData( + assign: AddonModAssignAssign, // eslint-disable-line @typescript-eslint/no-unused-vars + submission: AddonModAssignSubmission, // eslint-disable-line @typescript-eslint/no-unused-vars + plugin: AddonModAssignPlugin, // eslint-disable-line @typescript-eslint/no-unused-vars + offlineData: AddonModAssignSubmissionsDBRecordFormatted, // eslint-disable-line @typescript-eslint/no-unused-vars + siteId?: string, // eslint-disable-line @typescript-eslint/no-unused-vars + ): void | Promise { // Nothing to do. } /** * @inheritdoc */ - getPluginFiles(): CoreWSFile[] { + getPluginFiles( + assign: AddonModAssignAssign, // eslint-disable-line @typescript-eslint/no-unused-vars + submission: AddonModAssignSubmission, // eslint-disable-line @typescript-eslint/no-unused-vars + plugin: AddonModAssignPlugin, // eslint-disable-line @typescript-eslint/no-unused-vars + siteId?: string, // eslint-disable-line @typescript-eslint/no-unused-vars + ): CoreWSFile[] | Promise { return []; } @@ -93,21 +124,34 @@ export class AddonModAssignDefaultSubmissionHandler implements AddonModAssignSub /** * @inheritdoc */ - getSizeForCopy(): number { + getSizeForCopy( + assign: AddonModAssignAssign, // eslint-disable-line @typescript-eslint/no-unused-vars + plugin: AddonModAssignPlugin, // eslint-disable-line @typescript-eslint/no-unused-vars + ): number | Promise { return 0; } /** * @inheritdoc */ - getSizeForEdit(): number { + getSizeForEdit( + assign: AddonModAssignAssign, // eslint-disable-line @typescript-eslint/no-unused-vars + submission: AddonModAssignSubmission, // eslint-disable-line @typescript-eslint/no-unused-vars + plugin: AddonModAssignPlugin, // eslint-disable-line @typescript-eslint/no-unused-vars + inputData: CoreFormFields, // eslint-disable-line @typescript-eslint/no-unused-vars + ): number | Promise { return 0; } /** * @inheritdoc */ - hasDataChanged(): boolean { + async hasDataChanged( + assign: AddonModAssignAssign, // eslint-disable-line @typescript-eslint/no-unused-vars + submission: AddonModAssignSubmission, // eslint-disable-line @typescript-eslint/no-unused-vars + plugin: AddonModAssignPlugin, // eslint-disable-line @typescript-eslint/no-unused-vars + inputData: CoreFormFields, // eslint-disable-line @typescript-eslint/no-unused-vars + ): Promise { return false; } @@ -121,28 +165,49 @@ export class AddonModAssignDefaultSubmissionHandler implements AddonModAssignSub /** * @inheritdoc */ - isEnabledForEdit(): boolean { + isEnabledForEdit(): boolean | Promise { return false; } /** * @inheritdoc */ - async prefetch(): Promise { + async prefetch( + assign: AddonModAssignAssign, // eslint-disable-line @typescript-eslint/no-unused-vars + submission: AddonModAssignSubmission, // eslint-disable-line @typescript-eslint/no-unused-vars + plugin: AddonModAssignPlugin, // eslint-disable-line @typescript-eslint/no-unused-vars + siteId?: string, // eslint-disable-line @typescript-eslint/no-unused-vars + ): Promise { return; } /** * @inheritdoc */ - prepareSubmissionData(): void { + prepareSubmissionData( + assign: AddonModAssignAssign, // eslint-disable-line @typescript-eslint/no-unused-vars + submission: AddonModAssignSubmission, // eslint-disable-line @typescript-eslint/no-unused-vars + plugin: AddonModAssignPlugin, // eslint-disable-line @typescript-eslint/no-unused-vars + inputData: CoreFormFields, // eslint-disable-line @typescript-eslint/no-unused-vars + pluginData: AddonModAssignSavePluginData, // eslint-disable-line @typescript-eslint/no-unused-vars + offline?: boolean, // eslint-disable-line @typescript-eslint/no-unused-vars + userId?: number, // eslint-disable-line @typescript-eslint/no-unused-vars + siteId?: string, // eslint-disable-line @typescript-eslint/no-unused-vars + ): void | Promise { // Nothing to do. } /** * @inheritdoc */ - prepareSyncData(): void { + prepareSyncData( + assign: AddonModAssignAssign, // eslint-disable-line @typescript-eslint/no-unused-vars + submission: AddonModAssignSubmission, // eslint-disable-line @typescript-eslint/no-unused-vars + plugin: AddonModAssignPlugin, // eslint-disable-line @typescript-eslint/no-unused-vars + offlineData: AddonModAssignSubmissionsDBRecordFormatted, // eslint-disable-line @typescript-eslint/no-unused-vars + pluginData: AddonModAssignSavePluginData, // eslint-disable-line @typescript-eslint/no-unused-vars + siteId?: string, // eslint-disable-line @typescript-eslint/no-unused-vars + ): void | Promise { // Nothing to do. } diff --git a/src/addons/mod/assign/services/handlers/push-click.ts b/src/addons/mod/assign/services/handlers/push-click.ts index baddce367..af0d797e9 100644 --- a/src/addons/mod/assign/services/handlers/push-click.ts +++ b/src/addons/mod/assign/services/handlers/push-click.ts @@ -20,6 +20,7 @@ import { CoreUrlUtils } from '@services/utils/url'; import { CoreUtils } from '@services/utils/utils'; import { makeSingleton } from '@singletons'; import { AddonModAssign } from '../assign'; +import { ADDON_MOD_ASSIGN_FEATURE_NAME } from '../../constants'; /** * Handler for assign push notifications clicks. @@ -29,7 +30,7 @@ export class AddonModAssignPushClickHandlerService implements CorePushNotificati name = 'AddonModAssignPushClickHandler'; priority = 200; - featureName = 'CoreCourseModuleDelegate_AddonModAssign'; + featureName = ADDON_MOD_ASSIGN_FEATURE_NAME; /** * Check if a notification click is handled by this handler. diff --git a/src/addons/mod/assign/services/submission-delegate.ts b/src/addons/mod/assign/services/submission-delegate.ts index b34a6ff05..872fe75f1 100644 --- a/src/addons/mod/assign/services/submission-delegate.ts +++ b/src/addons/mod/assign/services/submission-delegate.ts @@ -21,6 +21,8 @@ import { CoreWSFile } from '@services/ws'; import { AddonModAssignSubmissionsDBRecordFormatted } from './assign-offline'; import { CoreFormFields } from '@singletons/form'; import type { AddonModAssignSubmissionPluginBaseComponent } from '@addons/mod/assign/classes/base-submission-plugin-component'; +import { CoreSites } from '@services/sites'; +import { ADDON_MOD_ASSIGN_FEATURE_NAME } from '../constants'; /** * Interface that all submission handlers must implement. @@ -194,7 +196,7 @@ export interface AddonModAssignSubmissionHandler extends CoreDelegateHandler { submission: AddonModAssignSubmission, plugin: AddonModAssignPlugin, inputData: CoreFormFields, - ): boolean | Promise; + ): Promise; /** * Whether or not the handler is enabled for edit on a site level. @@ -277,7 +279,14 @@ export class AddonModAssignSubmissionDelegateService extends CoreDelegate { + return !(await CoreSites.isFeatureDisabled(ADDON_MOD_ASSIGN_FEATURE_NAME)); } /** diff --git a/src/addons/mod/assign/submission/comments/services/handler.ts b/src/addons/mod/assign/submission/comments/services/handler.ts index e2f05162d..3bb5a0162 100644 --- a/src/addons/mod/assign/submission/comments/services/handler.ts +++ b/src/addons/mod/assign/submission/comments/services/handler.ts @@ -30,11 +30,7 @@ export class AddonModAssignSubmissionCommentsHandlerService implements AddonModA type = 'comments'; /** - * Whether the plugin can be edited in offline for existing submissions. In general, this should return false if the - * plugin uses Moodle filters. The reason is that the app only prefetches filtered data, and the user should edit - * unfiltered data. - * - * @returns Boolean or promise resolved with boolean: whether it can be edited in offline. + * @inheritdoc */ canEditOffline(): boolean { // This plugin is read only, but return true to prevent blocking the edition. @@ -42,44 +38,28 @@ export class AddonModAssignSubmissionCommentsHandlerService implements AddonModA } /** - * Return the Component to use to display the plugin data, either in read or in edit mode. - * It's recommended to return the class of the component, but you can also return an instance of the component. - * - * @param plugin The plugin object. - * @param edit Whether the user is editing. - * @returns The component (or promise resolved with component) to use, undefined if not found. + * @inheritdoc */ getComponent(plugin: AddonModAssignPlugin, edit = false): Type | undefined { return edit ? undefined : AddonModAssignSubmissionCommentsComponent; } /** - * Whether or not the handler is enabled on a site level. - * - * @returns True or promise resolved with true if enabled. + * @inheritdoc */ async isEnabled(): Promise { return true; } /** - * Whether or not the handler is enabled for edit on a site level. - * - * @returns Whether or not the handler is enabled for edit on a site level. + * @inheritdoc */ isEnabledForEdit(): boolean{ return true; } /** - * Prefetch any required data for the plugin. - * This should NOT prefetch files. Files to be prefetched should be returned by the getPluginFiles function. - * - * @param assign The assignment. - * @param submission The submission. - * @param plugin The plugin object. - * @param siteId Site ID. If not defined, current site. - * @returns Promise resolved when done. + * @inheritdoc */ async prefetch( assign: AddonModAssignAssign, diff --git a/src/addons/mod/assign/submission/file/services/handler.ts b/src/addons/mod/assign/submission/file/services/handler.ts index a919b5ac4..121f64fb5 100644 --- a/src/addons/mod/assign/submission/file/services/handler.ts +++ b/src/addons/mod/assign/submission/file/services/handler.ts @@ -45,11 +45,7 @@ export class AddonModAssignSubmissionFileHandlerService implements AddonModAssig type = 'file'; /** - * Whether the plugin can be edited in offline for existing submissions. In general, this should return false if the - * plugin uses Moodle filters. The reason is that the app only prefetches filtered data, and the user should edit - * unfiltered data. - * - * @returns Boolean or promise resolved with boolean: whether it can be edited in offline. + * @inheritdoc */ canEditOffline(): boolean { // This plugin doesn't use Moodle filters, it can be edited in offline. @@ -57,11 +53,7 @@ export class AddonModAssignSubmissionFileHandlerService implements AddonModAssig } /** - * Check if a plugin has no data. - * - * @param assign The assignment. - * @param plugin The plugin object. - * @returns Whether the plugin is empty. + * @inheritdoc */ isEmpty(assign: AddonModAssignAssign, plugin: AddonModAssignPlugin): boolean { const files = AddonModAssign.getSubmissionPluginAttachments(plugin); @@ -70,9 +62,7 @@ export class AddonModAssignSubmissionFileHandlerService implements AddonModAssig } /** - * Should clear temporary data for a cancelled submission. - * - * @param assign The assignment. + * @inheritdoc */ clearTmpData(assign: AddonModAssignAssign): void { const files = CoreFileSession.getFiles(AddonModAssignProvider.COMPONENT, assign.id); @@ -85,13 +75,7 @@ export class AddonModAssignSubmissionFileHandlerService implements AddonModAssig } /** - * This function will be called when the user wants to create a new submission based on the previous one. - * It should add to pluginData the data to send to server based in the data in plugin (previous attempt). - * - * @param assign The assignment. - * @param plugin The plugin object. - * @param pluginData Object where to store the data to send. - * @returns If the function is async, it should return a Promise resolved when done. + * @inheritdoc */ async copySubmissionData( assign: AddonModAssignAssign, @@ -106,24 +90,14 @@ export class AddonModAssignSubmissionFileHandlerService implements AddonModAssig } /** - * Return the Component to use to display the plugin data, either in read or in edit mode. - * It's recommended to return the class of the component, but you can also return an instance of the component. - * - * @returns The component (or promise resolved with component) to use, undefined if not found. + * @inheritdoc */ getComponent(): Type { return AddonModAssignSubmissionFileComponent; } /** - * Delete any stored data for the plugin and submission. - * - * @param assign The assignment. - * @param submission The submission. - * @param plugin The plugin object. - * @param offlineData Offline data stored. - * @param siteId Site ID. If not defined, current site. - * @returns If the function is async, it should return a Promise resolved when done. + * @inheritdoc */ async deleteOfflineData( assign: AddonModAssignAssign, @@ -144,13 +118,7 @@ export class AddonModAssignSubmissionFileHandlerService implements AddonModAssig } /** - * Get files used by this plugin. - * The files returned by this function will be prefetched when the user prefetches the assign. - * - * @param assign The assignment. - * @param submission The submission. - * @param plugin The plugin object. - * @returns The files (or promise resolved with the files). + * @inheritdoc */ getPluginFiles( assign: AddonModAssignAssign, @@ -161,11 +129,7 @@ export class AddonModAssignSubmissionFileHandlerService implements AddonModAssig } /** - * Get the size of data (in bytes) this plugin will send to copy a previous submission. - * - * @param assign The assignment. - * @param plugin The plugin object. - * @returns The size (or promise resolved with size). + * @inheritdoc */ async getSizeForCopy(assign: AddonModAssignAssign, plugin: AddonModAssignPlugin): Promise { const files = AddonModAssign.getSubmissionPluginAttachments(plugin); @@ -174,12 +138,7 @@ export class AddonModAssignSubmissionFileHandlerService implements AddonModAssig } /** - * Get the size of data (in bytes) this plugin will send to add or edit a submission. - * - * @param assign The assignment. - * @param submission The submission. - * @param plugin The plugin object. - * @returns The size (or promise resolved with size). + * @inheritdoc */ async getSizeForEdit( assign: AddonModAssignAssign, @@ -199,12 +158,7 @@ export class AddonModAssignSubmissionFileHandlerService implements AddonModAssig } /** - * Check if the submission data has changed for this plugin. - * - * @param assign The assignment. - * @param submission The submission. - * @param plugin The plugin object. - * @returns Boolean (or promise resolved with boolean): whether the data has changed. + * @inheritdoc */ async hasDataChanged( assign: AddonModAssignAssign, @@ -243,35 +197,21 @@ export class AddonModAssignSubmissionFileHandlerService implements AddonModAssig } /** - * Whether or not the handler is enabled on a site level. - * - * @returns True or promise resolved with true if enabled. + * @inheritdoc */ async isEnabled(): Promise { return true; } /** - * Whether or not the handler is enabled for edit on a site level. - * - * @returns Whether or not the handler is enabled for edit on a site level. + * @inheritdoc */ isEnabledForEdit(): boolean { return true; } /** - * Prepare and add to pluginData the data to send to the server based on the input data. - * - * @param assign The assignment. - * @param submission The submission. - * @param plugin The plugin object. - * @param inputData Data entered by the user for the submission. - * @param pluginData Object where to store the data to send. - * @param offline Whether the user is editing in offline. - * @param userId User ID. If not defined, site's current user. - * @param siteId Site ID. If not defined, current site. - * @returns If the function is async, it should return a Promise resolved when done. + * @inheritdoc */ async prepareSubmissionData( assign: AddonModAssignAssign, @@ -308,16 +248,7 @@ export class AddonModAssignSubmissionFileHandlerService implements AddonModAssig } /** - * Prepare and add to pluginData the data to send to the server based on the offline data stored. - * This will be used when performing a synchronization. - * - * @param assign The assignment. - * @param submission The submission. - * @param plugin The plugin object. - * @param offlineData Offline data stored. - * @param pluginData Object where to store the data to send. - * @param siteId Site ID. If not defined, current site. - * @returns If the function is async, it should return a Promise resolved when done. + * @inheritdoc */ async prepareSyncData( assign: AddonModAssignAssign, diff --git a/src/addons/mod/assign/submission/onlinetext/services/handler.ts b/src/addons/mod/assign/submission/onlinetext/services/handler.ts index e0f0a93a5..8ae7b7f78 100644 --- a/src/addons/mod/assign/submission/onlinetext/services/handler.ts +++ b/src/addons/mod/assign/submission/onlinetext/services/handler.ts @@ -41,11 +41,7 @@ export class AddonModAssignSubmissionOnlineTextHandlerService implements AddonMo type = 'onlinetext'; /** - * Whether the plugin can be edited in offline for existing submissions. In general, this should return false if the - * plugin uses Moodle filters. The reason is that the app only prefetches filtered data, and the user should edit - * unfiltered data. - * - * @returns Boolean or promise resolved with boolean: whether it can be edited in offline. + * @inheritdoc */ canEditOffline(): boolean { // This plugin uses Moodle filters, it cannot be edited in offline. @@ -53,11 +49,7 @@ export class AddonModAssignSubmissionOnlineTextHandlerService implements AddonMo } /** - * Check if a plugin has no data. - * - * @param assign The assignment. - * @param plugin The plugin object. - * @returns Whether the plugin is empty. + * @inheritdoc */ isEmpty(assign: AddonModAssignAssign, plugin: AddonModAssignPlugin): boolean { const text = AddonModAssign.getSubmissionPluginText(plugin, true); @@ -67,15 +59,7 @@ export class AddonModAssignSubmissionOnlineTextHandlerService implements AddonMo } /** - * This function will be called when the user wants to create a new submission based on the previous one. - * It should add to pluginData the data to send to server based in the data in plugin (previous attempt). - * - * @param assign The assignment. - * @param plugin The plugin object. - * @param pluginData Object where to store the data to send. - * @param userId User ID. If not defined, site's current user. - * @param siteId Site ID. If not defined, current site. - * @returns If the function is async, it should return a Promise resolved when done. + * @inheritdoc */ async copySubmissionData( assign: AddonModAssignAssign, @@ -102,23 +86,14 @@ export class AddonModAssignSubmissionOnlineTextHandlerService implements AddonMo } /** - * Return the Component to use to display the plugin data, either in read or in edit mode. - * It's recommended to return the class of the component, but you can also return an instance of the component. - * - * @returns The component (or promise resolved with component) to use, undefined if not found. + * @inheritdoc */ getComponent(): Type { return AddonModAssignSubmissionOnlineTextComponent; } /** - * Get files used by this plugin. - * The files returned by this function will be prefetched when the user prefetches the assign. - * - * @param assign The assignment. - * @param submission The submission. - * @param plugin The plugin object. - * @returns The files (or promise resolved with the files). + * @inheritdoc */ getPluginFiles( assign: AddonModAssignAssign, @@ -129,11 +104,7 @@ export class AddonModAssignSubmissionOnlineTextHandlerService implements AddonMo } /** - * Get the size of data (in bytes) this plugin will send to copy a previous submission. - * - * @param assign The assignment. - * @param plugin The plugin object. - * @returns The size (or promise resolved with size). + * @inheritdoc */ async getSizeForCopy(assign: AddonModAssignAssign, plugin: AddonModAssignPlugin): Promise { const text = AddonModAssign.getSubmissionPluginText(plugin, true); @@ -145,12 +116,7 @@ export class AddonModAssignSubmissionOnlineTextHandlerService implements AddonMo } /** - * Get the size of data (in bytes) this plugin will send to add or edit a submission. - * - * @param assign The assignment. - * @param submission The submission. - * @param plugin The plugin object. - * @returns The size (or promise resolved with size). + * @inheritdoc */ getSizeForEdit( assign: AddonModAssignAssign, @@ -177,13 +143,7 @@ export class AddonModAssignSubmissionOnlineTextHandlerService implements AddonMo } /** - * Check if the submission data has changed for this plugin. - * - * @param assign The assignment. - * @param submission The submission. - * @param plugin The plugin object. - * @param inputData Data entered by the user for the submission. - * @returns Boolean (or promise resolved with boolean): whether the data has changed. + * @inheritdoc */ async hasDataChanged( assign: AddonModAssignAssign, @@ -209,31 +169,21 @@ export class AddonModAssignSubmissionOnlineTextHandlerService implements AddonMo } /** - * Whether or not the handler is enabled on a site level. - * - * @returns True or promise resolved with true if enabled. + * @inheritdoc */ async isEnabled(): Promise { return true; } /** - * Whether or not the handler is enabled for edit on a site level. - * - * @returns Whether or not the handler is enabled for edit on a site level. + * @inheritdoc */ isEnabledForEdit(): boolean { return true; } /** - * Prepare and add to pluginData the data to send to the server based on the input data. - * - * @param assign The assignment. - * @param submission The submission. - * @param plugin The plugin object. - * @param inputData Data entered by the user for the submission. - * @param pluginData Object where to store the data to send. + * @inheritdoc */ prepareSubmissionData( assign: AddonModAssignAssign, @@ -269,14 +219,7 @@ export class AddonModAssignSubmissionOnlineTextHandlerService implements AddonMo } /** - * Prepare and add to pluginData the data to send to the server based on the offline data stored. - * This will be used when performing a synchronization. - * - * @param assign The assignment. - * @param submission The submission. - * @param plugin The plugin object. - * @param offlineData Offline data stored. - * @param pluginData Object where to store the data to send. + * @inheritdoc */ prepareSyncData( assign: AddonModAssignAssign, diff --git a/src/addons/mod/data/constants.ts b/src/addons/mod/data/constants.ts new file mode 100644 index 000000000..9abfb84d2 --- /dev/null +++ b/src/addons/mod/data/constants.ts @@ -0,0 +1,15 @@ +// (C) Copyright 2015 Moodle Pty Ltd. +// +// 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. + +export const ADDON_MOD_DATA_FEATURE_NAME = 'CoreCourseModuleDelegate_AddonModData'; diff --git a/src/addons/mod/data/services/data-fields-delegate.ts b/src/addons/mod/data/services/data-fields-delegate.ts index ba0a103d3..a175cf334 100644 --- a/src/addons/mod/data/services/data-fields-delegate.ts +++ b/src/addons/mod/data/services/data-fields-delegate.ts @@ -25,6 +25,8 @@ import { CoreFormFields } from '@singletons/form'; import { FileEntry } from '@awesome-cordova-plugins/file/ngx'; import { CoreFileEntry } from '@services/file-helper'; import type { AddonModDataFieldPluginBaseComponent } from '@addons/mod/data/classes/base-field-plugin-component'; +import { CoreSites } from '@services/sites'; +import { ADDON_MOD_DATA_FEATURE_NAME } from '../constants'; /** * Interface that all fields handlers must implement. @@ -132,7 +134,14 @@ export class AddonModDataFieldsDelegateService extends CoreDelegate { + return !(await CoreSites.isFeatureDisabled(ADDON_MOD_DATA_FEATURE_NAME)); } /** diff --git a/src/addons/mod/data/services/handlers/approve-link.ts b/src/addons/mod/data/services/handlers/approve-link.ts index de72ddf00..721a559f9 100644 --- a/src/addons/mod/data/services/handlers/approve-link.ts +++ b/src/addons/mod/data/services/handlers/approve-link.ts @@ -17,6 +17,7 @@ import { CoreContentLinksHandlerBase } from '@features/contentlinks/classes/base import { CoreContentLinksAction } from '@features/contentlinks/services/contentlinks-delegate'; import { makeSingleton } from '@singletons'; import { AddonModDataHelper } from '../data-helper'; +import { ADDON_MOD_DATA_FEATURE_NAME } from '../../constants'; /** * Content links handler for database approve/disapprove entry. @@ -26,7 +27,7 @@ import { AddonModDataHelper } from '../data-helper'; export class AddonModDataApproveLinkHandlerService extends CoreContentLinksHandlerBase { name = 'AddonModDataApproveLinkHandler'; - featureName = 'CoreCourseModuleDelegate_AddonModData'; + featureName = ADDON_MOD_DATA_FEATURE_NAME; pattern = /\/mod\/data\/view\.php.*([?&](d|approve|disapprove)=\d+)/; priority = 50; // Higher priority than the default link handler for view.php. diff --git a/src/addons/mod/data/services/handlers/delete-link.ts b/src/addons/mod/data/services/handlers/delete-link.ts index d768c995a..24f042ac6 100644 --- a/src/addons/mod/data/services/handlers/delete-link.ts +++ b/src/addons/mod/data/services/handlers/delete-link.ts @@ -17,6 +17,7 @@ import { CoreContentLinksHandlerBase } from '@features/contentlinks/classes/base import { CoreContentLinksAction } from '@features/contentlinks/services/contentlinks-delegate'; import { makeSingleton } from '@singletons'; import { AddonModDataHelper } from '../data-helper'; +import { ADDON_MOD_DATA_FEATURE_NAME } from '../../constants'; /** * Content links handler for database delete entry. @@ -26,7 +27,7 @@ import { AddonModDataHelper } from '../data-helper'; export class AddonModDataDeleteLinkHandlerService extends CoreContentLinksHandlerBase { name = 'AddonModDataDeleteLinkHandler'; - featureName = 'CoreCourseModuleDelegate_AddonModData'; + featureName = ADDON_MOD_DATA_FEATURE_NAME; pattern = /\/mod\/data\/view\.php.*([?&](d|delete)=\d+)/; /** diff --git a/src/addons/mod/data/services/handlers/edit-link.ts b/src/addons/mod/data/services/handlers/edit-link.ts index 5895ca54a..f3fb943a8 100644 --- a/src/addons/mod/data/services/handlers/edit-link.ts +++ b/src/addons/mod/data/services/handlers/edit-link.ts @@ -22,6 +22,7 @@ import { CoreSitesReadingStrategy } from '@services/sites'; import { CoreDomUtils } from '@services/utils/dom'; import { makeSingleton } from '@singletons'; import { AddonModDataModuleHandlerService } from './module'; +import { ADDON_MOD_DATA_FEATURE_NAME } from '../../constants'; /** * Content links handler for database add or edit entry. @@ -31,7 +32,7 @@ import { AddonModDataModuleHandlerService } from './module'; export class AddonModDataEditLinkHandlerService extends CoreContentLinksHandlerBase { name = 'AddonModDataEditLinkHandler'; - featureName = 'CoreCourseModuleDelegate_AddonModData'; + featureName = ADDON_MOD_DATA_FEATURE_NAME; pattern = /\/mod\/data\/edit\.php.*([?&](d|rid)=\d+)/; /** diff --git a/src/addons/mod/data/services/handlers/show-link.ts b/src/addons/mod/data/services/handlers/show-link.ts index fb6c417b5..bf0c735bb 100644 --- a/src/addons/mod/data/services/handlers/show-link.ts +++ b/src/addons/mod/data/services/handlers/show-link.ts @@ -22,6 +22,7 @@ import { CoreSitesReadingStrategy } from '@services/sites'; import { CoreDomUtils } from '@services/utils/dom'; import { makeSingleton } from '@singletons'; import { AddonModDataModuleHandlerService } from './module'; +import { ADDON_MOD_DATA_FEATURE_NAME } from '../../constants'; /** * Content links handler for database show entry. @@ -31,7 +32,7 @@ import { AddonModDataModuleHandlerService } from './module'; export class AddonModDataShowLinkHandlerService extends CoreContentLinksHandlerBase { name = 'AddonModDataShowLinkHandler'; - featureName = 'CoreCourseModuleDelegate_AddonModData'; + featureName = ADDON_MOD_DATA_FEATURE_NAME; pattern = /\/mod\/data\/view\.php.*([?&](d|rid|page|group|mode)=\d+)/; priority = 50; // Higher priority than the default link handler for view.php. diff --git a/src/addons/mod/quiz/constants.ts b/src/addons/mod/quiz/constants.ts new file mode 100644 index 000000000..dc11c9d2e --- /dev/null +++ b/src/addons/mod/quiz/constants.ts @@ -0,0 +1,15 @@ +// (C) Copyright 2015 Moodle Pty Ltd. +// +// 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. + +export const ADDON_MOD_QUIZ_FEATURE_NAME = 'CoreCourseModuleDelegate_AddonModQuiz'; diff --git a/src/addons/mod/quiz/services/access-rules-delegate.ts b/src/addons/mod/quiz/services/access-rules-delegate.ts index 8df18e1bc..dc666d800 100644 --- a/src/addons/mod/quiz/services/access-rules-delegate.ts +++ b/src/addons/mod/quiz/services/access-rules-delegate.ts @@ -18,6 +18,8 @@ import { CoreDelegate, CoreDelegateHandler } from '@classes/delegate'; import { CoreUtils } from '@services/utils/utils'; import { makeSingleton } from '@singletons'; import { AddonModQuizAttemptWSData, AddonModQuizQuizWSData } from './quiz'; +import { CoreSites } from '@services/sites'; +import { ADDON_MOD_QUIZ_FEATURE_NAME } from '../constants'; /** * Interface that all access rules handlers must implement. @@ -128,7 +130,14 @@ export class AddonModQuizAccessRuleDelegateService extends CoreDelegate { + return !(await CoreSites.isFeatureDisabled(ADDON_MOD_QUIZ_FEATURE_NAME)); } /** diff --git a/src/addons/mod/quiz/services/handlers/push-click.ts b/src/addons/mod/quiz/services/handlers/push-click.ts index 58c4d11aa..3e196f289 100644 --- a/src/addons/mod/quiz/services/handlers/push-click.ts +++ b/src/addons/mod/quiz/services/handlers/push-click.ts @@ -23,6 +23,7 @@ import { makeSingleton } from '@singletons'; import { AddonModQuiz } from '../quiz'; import { AddonModQuizHelper } from '../quiz-helper'; import { isSafeNumber } from '@/core/utils/types'; +import { ADDON_MOD_QUIZ_FEATURE_NAME } from '../../constants'; /** * Handler for quiz push notifications clicks. @@ -32,7 +33,7 @@ export class AddonModQuizPushClickHandlerService implements CorePushNotification name = 'AddonModQuizPushClickHandler'; priority = 200; - featureName = 'CoreCourseModuleDelegate_AddonModQuiz'; + featureName = ADDON_MOD_QUIZ_FEATURE_NAME; protected readonly SUPPORTED_NAMES = ['submission', 'confirmation', 'attempt_overdue']; diff --git a/src/addons/mod/quiz/services/handlers/review-link.ts b/src/addons/mod/quiz/services/handlers/review-link.ts index 6b4ea6d38..dbef36718 100644 --- a/src/addons/mod/quiz/services/handlers/review-link.ts +++ b/src/addons/mod/quiz/services/handlers/review-link.ts @@ -17,6 +17,7 @@ import { CoreContentLinksHandlerBase } from '@features/contentlinks/classes/base import { CoreContentLinksAction } from '@features/contentlinks/services/contentlinks-delegate'; import { makeSingleton } from '@singletons'; import { AddonModQuizHelper } from '../quiz-helper'; +import { ADDON_MOD_QUIZ_FEATURE_NAME } from '../../constants'; /** * Handler to treat links to quiz review. @@ -25,7 +26,7 @@ import { AddonModQuizHelper } from '../quiz-helper'; export class AddonModQuizReviewLinkHandlerService extends CoreContentLinksHandlerBase { name = 'AddonModQuizReviewLinkHandler'; - featureName = 'CoreCourseModuleDelegate_AddonModQuiz'; + featureName = ADDON_MOD_QUIZ_FEATURE_NAME; pattern = /\/mod\/quiz\/review\.php.*([&?]attempt=\d+)/; /** diff --git a/src/addons/mod/workshop/constants.ts b/src/addons/mod/workshop/constants.ts index a1de91991..24ba9d6ff 100644 --- a/src/addons/mod/workshop/constants.ts +++ b/src/addons/mod/workshop/constants.ts @@ -39,3 +39,5 @@ export const ADDON_MOD_WORKSHOP_PREFETCH_UPDATE_NAMES = new RegExp( ); export const ADDON_MOD_WORKSHOP_SYNC_CRON_NAME = 'AddonModWorkshopSyncCronHandler'; + +export const ADDON_MOD_WORKSHOP_FEATURE_NAME = 'CoreCourseModuleDelegate_AddonModWorkshop'; diff --git a/src/addons/mod/workshop/services/assessment-strategy-delegate.ts b/src/addons/mod/workshop/services/assessment-strategy-delegate.ts index f28f8556d..44e8b21b5 100644 --- a/src/addons/mod/workshop/services/assessment-strategy-delegate.ts +++ b/src/addons/mod/workshop/services/assessment-strategy-delegate.ts @@ -17,6 +17,8 @@ import { CoreDelegateHandler, CoreDelegate } from '@classes/delegate'; import { makeSingleton } from '@singletons'; import { CoreFormFields } from '@singletons/form'; import { AddonModWorkshopGetAssessmentFormDefinitionData, AddonModWorkshopGetAssessmentFormFieldsParsedData } from './workshop'; +import { CoreSites } from '@services/sites'; +import { ADDON_MOD_WORKSHOP_FEATURE_NAME } from '../constants'; /** * Interface that all assessment strategy handlers must implement. @@ -83,7 +85,14 @@ export class AddonWorkshopAssessmentStrategyDelegateService extends CoreDelegate protected handlerNameProperty = 'strategyName'; constructor() { - super('AddonWorkshopAssessmentStrategyDelegate', true); + super('AddonWorkshopAssessmentStrategyDelegate'); + } + + /** + * @inheritdoc + */ + async isEnabled(): Promise { + return !(await CoreSites.isFeatureDisabled(ADDON_MOD_WORKSHOP_FEATURE_NAME)); } /** diff --git a/src/core/classes/delegate-sorted.ts b/src/core/classes/delegate-sorted.ts index 987ed7aab..d7e81df83 100644 --- a/src/core/classes/delegate-sorted.ts +++ b/src/core/classes/delegate-sorted.ts @@ -34,7 +34,7 @@ export class CoreSortedDelegate< * @inheritdoc */ constructor(delegateName: string) { - super(delegateName, true); + super(delegateName); CoreEvents.on(CoreEvents.LOGOUT, () => this.clearSortedHandlers()); CoreEvents.on(CoreEvents.SITE_POLICY_AGREED, (data) => { diff --git a/src/core/classes/delegate.ts b/src/core/classes/delegate.ts index ba2b73b0f..c98cd6f3a 100644 --- a/src/core/classes/delegate.ts +++ b/src/core/classes/delegate.ts @@ -72,43 +72,42 @@ export class CoreDelegate { /** * Promise to wait for handlers to be initialized. + * + * @returns Promise resolved when handlers are enabled. */ - protected handlersInitPromise: Promise; + protected handlersInitPromise: Promise; /** * Function to resolve the handlers init promise. */ - protected handlersInitResolve!: () => void; + protected handlersInitResolve!: (enabled: boolean) => void; /** * Constructor of the Delegate. * * @param delegateName Delegate name used for logging purposes. - * @param listenSiteEvents Whether to update the handler when a site event occurs (login, site updated, ...). */ - constructor(delegateName: string, listenSiteEvents: boolean = true) { + constructor(delegateName: string) { this.logger = CoreLogger.getInstance(delegateName); this.handlersInitPromise = new Promise((resolve): void => { this.handlersInitResolve = resolve; }); - if (listenSiteEvents) { - // Update handlers on this cases. - CoreEvents.on(CoreEvents.LOGIN, () => this.updateHandlers()); - CoreEvents.on(CoreEvents.SITE_UPDATED, () => this.updateHandlers()); - CoreEvents.on(CoreEvents.SITE_PLUGINS_LOADED, () => this.updateHandlers()); - CoreEvents.on(CoreEvents.SITE_POLICY_AGREED, (data) => { - if (data.siteId === CoreSites.getCurrentSiteId()) { - this.updateHandlers(); - } - }); - CoreEvents.on(CoreEvents.COMPLETE_REQUIRED_PROFILE_DATA_FINISHED, (data) => { - if (data.siteId === CoreSites.getCurrentSiteId()) { - this.updateHandlers(); - } - }); - } + // Update handlers on this cases. + CoreEvents.on(CoreEvents.LOGIN, () => this.updateHandlers()); + CoreEvents.on(CoreEvents.SITE_UPDATED, () => this.updateHandlers()); + CoreEvents.on(CoreEvents.SITE_PLUGINS_LOADED, () => this.updateHandlers()); + CoreEvents.on(CoreEvents.SITE_POLICY_AGREED, (data) => { + if (data.siteId === CoreSites.getCurrentSiteId()) { + this.updateHandlers(); + } + }); + CoreEvents.on(CoreEvents.COMPLETE_REQUIRED_PROFILE_DATA_FINISHED, (data) => { + if (data.siteId === CoreSites.getCurrentSiteId()) { + this.updateHandlers(); + } + }); } /** @@ -286,16 +285,18 @@ export class CoreDelegate { } // Checks if the handler is enabled. - this.updatePromises[siteId][handler.name] = promise.then((enabled: boolean) => { + this.updatePromises[siteId][handler.name] = promise.then((enabled) => { // Check that site hasn't changed since the check started. - if (CoreSites.getCurrentSiteId() === siteId) { - const key = handler[this.handlerNameProperty] || handler.name; + if (CoreSites.getCurrentSiteId() !== siteId) { + return; + } - if (enabled) { - this.enabledHandlers[key] = handler; - } else { - delete this.enabledHandlers[key]; - } + const key = handler[this.handlerNameProperty] || handler.name; + + if (enabled) { + this.enabledHandlers[key] = handler; + } else { + delete this.enabledHandlers[key]; } return; @@ -327,6 +328,10 @@ export class CoreDelegate { const enabled = await this.isEnabled(); if (!enabled) { + this.logger.debug('Delegate not enabled.'); + + this.handlersInitResolve(false); + return; } @@ -351,7 +356,7 @@ export class CoreDelegate { // Verify that this call is the last one that was started. if (this.isLastUpdateCall(now)) { this.handlersInitialized = true; - this.handlersInitResolve(); + this.handlersInitResolve(true); this.updateData(); } diff --git a/src/core/features/block/services/block-delegate.ts b/src/core/features/block/services/block-delegate.ts index 6f5e46f61..ed4de1719 100644 --- a/src/core/features/block/services/block-delegate.ts +++ b/src/core/features/block/services/block-delegate.ts @@ -104,7 +104,7 @@ export class CoreBlockDelegateService extends CoreDelegate { constructor( protected defaultHandler: CoreBlockDefaultHandler, ) { - super('CoreBlockDelegate', true); + super('CoreBlockDelegate'); this.blocksUpdateObservable = new Subject(); } diff --git a/src/core/features/course/services/format-delegate.ts b/src/core/features/course/services/format-delegate.ts index d19f9ccaf..bcfaabe78 100644 --- a/src/core/features/course/services/format-delegate.ts +++ b/src/core/features/course/services/format-delegate.ts @@ -166,7 +166,7 @@ export class CoreCourseFormatDelegateService extends CoreDelegate> = {}; constructor() { - super('CoreCourseModulePrefetchDelegate', true); + super('CoreCourseModulePrefetchDelegate'); } /** diff --git a/src/core/features/enrol/services/enrol-delegate.ts b/src/core/features/enrol/services/enrol-delegate.ts index 3ef216fda..81bf6ec62 100644 --- a/src/core/features/enrol/services/enrol-delegate.ts +++ b/src/core/features/enrol/services/enrol-delegate.ts @@ -129,7 +129,7 @@ export class CoreEnrolDelegateService extends CoreDelegate { protected featurePrefix = 'CoreEnrolDelegate_'; constructor() { - super('CoreEnrolDelegate', true); + super('CoreEnrolDelegate'); } /** diff --git a/src/core/features/fileuploader/services/fileuploader-delegate.ts b/src/core/features/fileuploader/services/fileuploader-delegate.ts index 04683f7d6..d0bcfe12c 100644 --- a/src/core/features/fileuploader/services/fileuploader-delegate.ts +++ b/src/core/features/fileuploader/services/fileuploader-delegate.ts @@ -143,7 +143,7 @@ export interface CoreFileUploaderHandlerDataToReturn extends CoreFileUploaderHan export class CoreFileUploaderDelegateService extends CoreDelegate { constructor() { - super('CoreFileUploaderDelegate', true); + super('CoreFileUploaderDelegate'); CoreEvents.on(CoreEvents.LOGOUT, () => this.clearSiteHandlers()); } diff --git a/src/core/features/filter/services/filter-delegate.ts b/src/core/features/filter/services/filter-delegate.ts index 07031aae7..0db329b32 100644 --- a/src/core/features/filter/services/filter-delegate.ts +++ b/src/core/features/filter/services/filter-delegate.ts @@ -15,7 +15,7 @@ import { Injectable, ViewContainerRef } from '@angular/core'; import { CoreSites } from '@services/sites'; -import { CoreFilterFilter, CoreFilterFormatTextOptions } from './filter'; +import { CoreFilter, CoreFilterFilter, CoreFilterFormatTextOptions } from './filter'; import { CoreFilterDefaultHandler } from './handlers/default-filter'; import { CoreDelegate, CoreDelegateHandler } from '@classes/delegate'; import { CoreSite } from '@classes/sites/site'; @@ -84,7 +84,14 @@ export class CoreFilterDelegateService extends CoreDelegate { protected handlerNameProperty = 'filterName'; constructor(protected defaultHandler: CoreFilterDefaultHandler) { - super('CoreFilterDelegate', true); + super('CoreFilterDelegate'); + } + + /** + * @inheritdoc + */ + async isEnabled(): Promise { + return CoreFilter.canGetFiltersInSite(); } /** @@ -106,7 +113,11 @@ export class CoreFilterDelegateService extends CoreDelegate { ): Promise { // Wait for filters to be initialized. - await this.handlersInitPromise; + const enabled = await this.handlersInitPromise; + if (!enabled) { + // No enabled filters, return the text. + return text; + } const site = await CoreSites.getSite(siteId); @@ -189,7 +200,10 @@ export class CoreFilterDelegateService extends CoreDelegate { ): Promise { // Wait for filters to be initialized. - await this.handlersInitPromise; + const enabled = await this.handlersInitPromise; + if (!enabled) { + return; + } const site = await CoreSites.getSite(siteId); @@ -258,15 +272,12 @@ export class CoreFilterDelegateService extends CoreDelegate { */ async shouldBeApplied(filters: CoreFilterFilter[], options: CoreFilterFormatTextOptions, site?: CoreSite): Promise { // Wait for filters to be initialized. - await this.handlersInitPromise; - - for (let i = 0; i < filters.length; i++) { - if (this.shouldFilterBeApplied(filters[i], options, site)) { - return true; - } + const enabled = await this.handlersInitPromise; + if (!enabled) { + return false; } - return false; + return filters.some((filter) => this.shouldFilterBeApplied(filter, options, site)); } /** diff --git a/src/core/features/filter/services/filter.ts b/src/core/features/filter/services/filter.ts index f82862f84..b2eb8c3ba 100644 --- a/src/core/features/filter/services/filter.ts +++ b/src/core/features/filter/services/filter.ts @@ -80,7 +80,7 @@ export class CoreFilterProvider { * @returns Promise resolved with boolean: whethe can get filters. */ canGetFiltersInSite(site?: CoreSite): boolean { - return this.checkFiltersDisabledInSite(site); + return !this.checkFiltersDisabledInSite(site); } /** diff --git a/src/core/features/question/services/behaviour-delegate.ts b/src/core/features/question/services/behaviour-delegate.ts index cbe9856fa..195e3ffc1 100644 --- a/src/core/features/question/services/behaviour-delegate.ts +++ b/src/core/features/question/services/behaviour-delegate.ts @@ -68,7 +68,7 @@ export class CoreQuestionBehaviourDelegateService extends CoreDelegate protected handlerNameProperty = 'type'; constructor() { - super('CoreTagAreaDelegate', true); + super('CoreTagAreaDelegate'); } /** diff --git a/src/core/features/user/services/user-delegate.ts b/src/core/features/user/services/user-delegate.ts index 937cb5bf1..60bd7f31c 100644 --- a/src/core/features/user/services/user-delegate.ts +++ b/src/core/features/user/services/user-delegate.ts @@ -229,7 +229,7 @@ export class CoreUserDelegateService extends CoreDelegate> = {}; constructor() { - super('CoreUserDelegate', true); + super('CoreUserDelegate'); CoreEvents.on(USER_DELEGATE_UPDATE_HANDLER_EVENT, (data) => { const handlersData = this.getHandlersData(data.userId, data.context, data.contextId); diff --git a/src/core/features/user/services/user-profile-field-delegate.ts b/src/core/features/user/services/user-profile-field-delegate.ts index 14d7492ed..cc29fe212 100644 --- a/src/core/features/user/services/user-profile-field-delegate.ts +++ b/src/core/features/user/services/user-profile-field-delegate.ts @@ -80,7 +80,7 @@ export class CoreUserProfileFieldDelegateService extends CoreDelegate { constructor() { - super('CoreAnalyticsService', true); + super('CoreAnalyticsService'); CoreEvents.on(CoreConfigProvider.ENVIRONMENT_UPDATED, () => this.updateHandlers()); CoreEvents.on(CoreEvents.LOGOUT, () => this.clearSiteHandlers()); diff --git a/src/core/services/plugin-file-delegate.ts b/src/core/services/plugin-file-delegate.ts index 69a640e1a..456476f74 100644 --- a/src/core/services/plugin-file-delegate.ts +++ b/src/core/services/plugin-file-delegate.ts @@ -30,7 +30,7 @@ import { CoreFileHelper } from './file-helper'; export class CorePluginFileDelegateService extends CoreDelegate { constructor() { - super('CorePluginFileDelegate', true); + super('CorePluginFileDelegate'); } /**