commit
						8a1774bd24
					
				
							
								
								
									
										22
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										22
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@ -38,7 +38,7 @@
 | 
				
			|||||||
        "@awesome-cordova-plugins/sqlite": "^6.6.0",
 | 
					        "@awesome-cordova-plugins/sqlite": "^6.6.0",
 | 
				
			||||||
        "@awesome-cordova-plugins/status-bar": "^6.6.0",
 | 
					        "@awesome-cordova-plugins/status-bar": "^6.6.0",
 | 
				
			||||||
        "@awesome-cordova-plugins/web-intent": "^6.6.0",
 | 
					        "@awesome-cordova-plugins/web-intent": "^6.6.0",
 | 
				
			||||||
        "@ionic/angular": "^7.6.5",
 | 
					        "@ionic/angular": "^7.7.4",
 | 
				
			||||||
        "@ionic/cordova-builders": "^10.1.1",
 | 
					        "@ionic/cordova-builders": "^10.1.1",
 | 
				
			||||||
        "@moodlehq/cordova-plugin-advanced-http": "3.3.1-moodle.1",
 | 
					        "@moodlehq/cordova-plugin-advanced-http": "3.3.1-moodle.1",
 | 
				
			||||||
        "@moodlehq/cordova-plugin-file-opener": "4.0.0-moodle.1",
 | 
					        "@moodlehq/cordova-plugin-file-opener": "4.0.0-moodle.1",
 | 
				
			||||||
@ -5124,11 +5124,11 @@
 | 
				
			|||||||
      "license": "BSD-3-Clause"
 | 
					      "license": "BSD-3-Clause"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/@ionic/angular": {
 | 
					    "node_modules/@ionic/angular": {
 | 
				
			||||||
      "version": "7.6.5",
 | 
					      "version": "7.7.4",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-7.6.5.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-7.7.4.tgz",
 | 
				
			||||||
      "integrity": "sha512-c1LIAwDuDtaEhMA91m+CqzLOgMY8V4DPPiTdHl6xB2ohmC3er+PpZQx87wpLcSjO7Yl+S3470/+FGGqDAjc8cQ==",
 | 
					      "integrity": "sha512-uj51zQoqEnDSnanv4D6AlVS1MuVjJSTFTbS0sMeSwK8D9Ads+fZ761VnCU/oTEK8hw4BgmxIGBRsOhA/gaYnvw==",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "@ionic/core": "7.6.5",
 | 
					        "@ionic/core": "7.7.4",
 | 
				
			||||||
        "ionicons": "^7.0.0",
 | 
					        "ionicons": "^7.0.0",
 | 
				
			||||||
        "jsonc-parser": "^3.0.0",
 | 
					        "jsonc-parser": "^3.0.0",
 | 
				
			||||||
        "tslib": "^2.3.0"
 | 
					        "tslib": "^2.3.0"
 | 
				
			||||||
@ -6674,10 +6674,11 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/@ionic/core": {
 | 
					    "node_modules/@ionic/core": {
 | 
				
			||||||
      "version": "7.6.5",
 | 
					      "version": "7.7.4",
 | 
				
			||||||
      "license": "MIT",
 | 
					      "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.7.4.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-zThio3ZfbTu+3eM6QBdyeEk5OBc7M0ApFwSlP/G7rrFVcTPm12FNvG9VPD+aN5NwnYy0EsV3hlMkxbawoqjVLw==",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "@stencil/core": "^4.10.0",
 | 
					        "@stencil/core": "^4.12.2",
 | 
				
			||||||
        "ionicons": "^7.2.2",
 | 
					        "ionicons": "^7.2.2",
 | 
				
			||||||
        "tslib": "^2.1.0"
 | 
					        "tslib": "^2.1.0"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@ -8989,8 +8990,9 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/@stencil/core": {
 | 
					    "node_modules/@stencil/core": {
 | 
				
			||||||
      "version": "4.10.0",
 | 
					      "version": "4.12.5",
 | 
				
			||||||
      "license": "MIT",
 | 
					      "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.12.5.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-vSyFjY7XSEx0ufa9SebOd437CvnneaTXlCpuGDhjUDxAjGBlu6ie5qHyubobVGBth//aErc6wZPHc6W75Vp3iQ==",
 | 
				
			||||||
      "bin": {
 | 
					      "bin": {
 | 
				
			||||||
        "stencil": "bin/stencil"
 | 
					        "stencil": "bin/stencil"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
 | 
				
			|||||||
@ -73,7 +73,7 @@
 | 
				
			|||||||
    "@awesome-cordova-plugins/sqlite": "^6.6.0",
 | 
					    "@awesome-cordova-plugins/sqlite": "^6.6.0",
 | 
				
			||||||
    "@awesome-cordova-plugins/status-bar": "^6.6.0",
 | 
					    "@awesome-cordova-plugins/status-bar": "^6.6.0",
 | 
				
			||||||
    "@awesome-cordova-plugins/web-intent": "^6.6.0",
 | 
					    "@awesome-cordova-plugins/web-intent": "^6.6.0",
 | 
				
			||||||
    "@ionic/angular": "^7.6.5",
 | 
					    "@ionic/angular": "^7.7.4",
 | 
				
			||||||
    "@ionic/cordova-builders": "^10.1.1",
 | 
					    "@ionic/cordova-builders": "^10.1.1",
 | 
				
			||||||
    "@moodlehq/cordova-plugin-advanced-http": "3.3.1-moodle.1",
 | 
					    "@moodlehq/cordova-plugin-advanced-http": "3.3.1-moodle.1",
 | 
				
			||||||
    "@moodlehq/cordova-plugin-file-opener": "4.0.0-moodle.1",
 | 
					    "@moodlehq/cordova-plugin-file-opener": "4.0.0-moodle.1",
 | 
				
			||||||
 | 
				
			|||||||
@ -23,11 +23,19 @@ import { AddonBadgesUserHandler } from './services/handlers/user';
 | 
				
			|||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate';
 | 
					import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate';
 | 
				
			||||||
import { AddonBadgesPushClickHandler } from './services/handlers/push-click';
 | 
					import { AddonBadgesPushClickHandler } from './services/handlers/push-click';
 | 
				
			||||||
import { AddonBadgesProvider } from './services/badges';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_BADGES_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonBadgesProvider,
 | 
					 * Get badges services.
 | 
				
			||||||
];
 | 
					 *
 | 
				
			||||||
 | 
					 * @returns Returns badges services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getBadgesServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonBadgesProvider } = await import('@addons/badges/services/badges');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonBadgesProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mainMenuRoutes: Routes = [
 | 
					const mainMenuRoutes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -13,18 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockActivityModulesHandler } from './services/block-handler';
 | 
					import { AddonBlockActivityModulesHandler } from './services/block-handler';
 | 
				
			||||||
import { AddonBlockActivityModulesComponentsModule } from './components/components.module';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        AddonBlockActivityModulesComponentsModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -25,8 +25,5 @@ import { AddonBlockActivityModulesComponent } from './activitymodules/activitymo
 | 
				
			|||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
        CoreSharedModule,
 | 
					        CoreSharedModule,
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    exports: [
 | 
					 | 
				
			||||||
        AddonBlockActivityModulesComponent,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class AddonBlockActivityModulesComponentsModule {}
 | 
					export class AddonBlockActivityModulesComponentsModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,18 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockActivityResultsHandler } from './services/block-handler';
 | 
					import { AddonBlockActivityResultsHandler } from './services/block-handler';
 | 
				
			||||||
import { AddonBlockActivityResultsComponentsModule } from './components/components.module';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        AddonBlockActivityResultsComponentsModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -24,8 +24,5 @@ import { AddonBlockActivityResultsComponent } from './activityresults/activityre
 | 
				
			|||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
        CoreSharedModule,
 | 
					        CoreSharedModule,
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    exports: [
 | 
					 | 
				
			||||||
        AddonBlockActivityResultsComponent,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class AddonBlockActivityResultsComponentsModule {}
 | 
					export class AddonBlockActivityResultsComponentsModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,18 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockBadgesHandler } from './services/block-handler';
 | 
					import { AddonBlockBadgesHandler } from './services/block-handler';
 | 
				
			||||||
import { AddonBlockBadgesComponentsModule } from './components/components.module';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        AddonBlockBadgesComponentsModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -24,8 +24,5 @@ import { AddonBlockBadgesComponent } from './badges/badges';
 | 
				
			|||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
        CoreSharedModule,
 | 
					        CoreSharedModule,
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    exports: [
 | 
					 | 
				
			||||||
        AddonBlockBadgesComponent,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class AddonBlockBadgesComponentsModule {}
 | 
					export class AddonBlockBadgesComponentsModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,18 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockBlogMenuHandler } from './services/block-handler';
 | 
					import { AddonBlockBlogMenuHandler } from './services/block-handler';
 | 
				
			||||||
import { AddonBlockBlogMenuComponentsModule } from './components/components.module';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        AddonBlockBlogMenuComponentsModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -24,8 +24,5 @@ import { AddonBlockBlogMenuComponent } from './blogmenu/blogmenu';
 | 
				
			|||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
        CoreSharedModule,
 | 
					        CoreSharedModule,
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    exports: [
 | 
					 | 
				
			||||||
        AddonBlockBlogMenuComponent,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class AddonBlockBlogMenuComponentsModule {}
 | 
					export class AddonBlockBlogMenuComponentsModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,18 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockBlogRecentHandler } from './services/block-handler';
 | 
					import { AddonBlockBlogRecentHandler } from './services/block-handler';
 | 
				
			||||||
import { AddonBlockBlogRecentComponentsModule } from './components/components.module';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        AddonBlockBlogRecentComponentsModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -24,8 +24,5 @@ import { AddonBlockBlogRecentComponent } from './blogrecent/blogrecent';
 | 
				
			|||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
        CoreSharedModule,
 | 
					        CoreSharedModule,
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    exports: [
 | 
					 | 
				
			||||||
        AddonBlockBlogRecentComponent,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class AddonBlockBlogRecentComponentsModule {}
 | 
					export class AddonBlockBlogRecentComponentsModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,18 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockBlogTagsHandler } from './services/block-handler';
 | 
					import { AddonBlockBlogTagsHandler } from './services/block-handler';
 | 
				
			||||||
import { AddonBlockBlogTagsComponentsModule } from './components/components.module';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        AddonBlockBlogTagsComponentsModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -24,8 +24,5 @@ import { AddonBlockBlogTagsComponent } from './blogtags/blogtags';
 | 
				
			|||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
        CoreSharedModule,
 | 
					        CoreSharedModule,
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    exports: [
 | 
					 | 
				
			||||||
        AddonBlockBlogTagsComponent,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class AddonBlockBlogTagsComponentsModule {}
 | 
					export class AddonBlockBlogTagsComponentsModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,16 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockCalendarMonthHandler } from './services/block-handler';
 | 
					import { AddonBlockCalendarMonthHandler } from './services/block-handler';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -13,16 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockCalendarUpcomingHandler } from './services/block-handler';
 | 
					import { AddonBlockCalendarUpcomingHandler } from './services/block-handler';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -13,16 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockCommentsHandler } from './services/block-handler';
 | 
					import { AddonBlockCommentsHandler } from './services/block-handler';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -13,16 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockCompletionStatusHandler } from './services/block-handler';
 | 
					import { AddonBlockCompletionStatusHandler } from './services/block-handler';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -13,16 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockCourseListHandler } from './services/block-handler';
 | 
					import { AddonBlockCourseListHandler } from './services/block-handler';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -13,18 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockGlobalSearchHandler } from './services/block-handler';
 | 
					import { AddonBlockGlobalSearchHandler } from './services/block-handler';
 | 
				
			||||||
import { CoreBlockComponentsModule } from '@features/block/components/components.module';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        CoreBlockComponentsModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -13,16 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockGlossaryRandomHandler } from './services/block-handler';
 | 
					import { AddonBlockGlossaryRandomHandler } from './services/block-handler';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -13,18 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockLearningPlansHandler } from './services/block-handler';
 | 
					import { AddonBlockLearningPlansHandler } from './services/block-handler';
 | 
				
			||||||
import { CoreBlockComponentsModule } from '@features/block/components/components.module';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        CoreBlockComponentsModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -26,8 +26,5 @@ import { AddonBlockMyOverviewComponent } from './myoverview/myoverview';
 | 
				
			|||||||
        CoreSharedModule,
 | 
					        CoreSharedModule,
 | 
				
			||||||
        CoreCoursesComponentsModule,
 | 
					        CoreCoursesComponentsModule,
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    exports: [
 | 
					 | 
				
			||||||
        AddonBlockMyOverviewComponent,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class AddonBlockMyOverviewComponentsModule {}
 | 
					export class AddonBlockMyOverviewComponentsModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,18 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockMyOverviewComponentsModule } from './components/components.module';
 | 
					 | 
				
			||||||
import { AddonBlockMyOverviewHandler } from './services/block-handler';
 | 
					import { AddonBlockMyOverviewHandler } from './services/block-handler';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        AddonBlockMyOverviewComponentsModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -24,8 +24,5 @@ import { AddonBlockNewsItemsComponent } from './newsitems/newsitems';
 | 
				
			|||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
        CoreSharedModule,
 | 
					        CoreSharedModule,
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    exports: [
 | 
					 | 
				
			||||||
        AddonBlockNewsItemsComponent,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class AddonBlockNewsItemsComponentsModule {}
 | 
					export class AddonBlockNewsItemsComponentsModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,18 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockNewsItemsHandler } from './services/block-handler';
 | 
					import { AddonBlockNewsItemsHandler } from './services/block-handler';
 | 
				
			||||||
import { AddonBlockNewsItemsComponentsModule } from './components/components.module';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        AddonBlockNewsItemsComponentsModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -24,8 +24,5 @@ import { AddonBlockOnlineUsersComponent } from './onlineusers/onlineusers';
 | 
				
			|||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
        CoreSharedModule,
 | 
					        CoreSharedModule,
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    exports: [
 | 
					 | 
				
			||||||
        AddonBlockOnlineUsersComponent,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class AddonBlockOnlineUsersComponentsModule {}
 | 
					export class AddonBlockOnlineUsersComponentsModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,18 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockOnlineUsersHandler } from './services/block-handler';
 | 
					import { AddonBlockOnlineUsersHandler } from './services/block-handler';
 | 
				
			||||||
import { AddonBlockOnlineUsersComponentsModule } from './components/components.module';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        AddonBlockOnlineUsersComponentsModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -13,16 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockPrivateFilesHandler } from './services/block-handler';
 | 
					import { AddonBlockPrivateFilesHandler } from './services/block-handler';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -24,8 +24,5 @@ import { AddonBlockRecentActivityComponent } from './recentactivity/recentactivi
 | 
				
			|||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
        CoreSharedModule,
 | 
					        CoreSharedModule,
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    exports: [
 | 
					 | 
				
			||||||
        AddonBlockRecentActivityComponent,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class AddonBlockRecentActivityComponentsModule {}
 | 
					export class AddonBlockRecentActivityComponentsModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,18 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockRecentActivityHandler } from './services/block-handler';
 | 
					import { AddonBlockRecentActivityHandler } from './services/block-handler';
 | 
				
			||||||
import { AddonBlockRecentActivityComponentsModule } from './components/components.module';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        AddonBlockRecentActivityComponentsModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -27,8 +27,5 @@ import { AddonBlockRecentlyAccessedCoursesComponent } from './recentlyaccessedco
 | 
				
			|||||||
        CoreSharedModule,
 | 
					        CoreSharedModule,
 | 
				
			||||||
        CoreCoursesComponentsModule,
 | 
					        CoreCoursesComponentsModule,
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    exports: [
 | 
					 | 
				
			||||||
        AddonBlockRecentlyAccessedCoursesComponent,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class AddonBlockRecentlyAccessedCoursesComponentsModule {}
 | 
					export class AddonBlockRecentlyAccessedCoursesComponentsModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,16 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { CoreSharedModule } from '@/core/shared.module';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockRecentlyAccessedCoursesComponentsModule } from './components/components.module';
 | 
					 | 
				
			||||||
import { AddonBlockRecentlyAccessedCoursesHandler } from './services/block-handler';
 | 
					import { AddonBlockRecentlyAccessedCoursesHandler } from './services/block-handler';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        CoreSharedModule,
 | 
					 | 
				
			||||||
        AddonBlockRecentlyAccessedCoursesComponentsModule,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -27,8 +27,5 @@ import { AddonBlockRecentlyAccessedItemsComponent } from './recentlyaccesseditem
 | 
				
			|||||||
        CoreSharedModule,
 | 
					        CoreSharedModule,
 | 
				
			||||||
        CoreCoursesComponentsModule,
 | 
					        CoreCoursesComponentsModule,
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    exports: [
 | 
					 | 
				
			||||||
        AddonBlockRecentlyAccessedItemsComponent,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class AddonBlockRecentlyAccessedItemsComponentsModule {}
 | 
					export class AddonBlockRecentlyAccessedItemsComponentsModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,16 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { CoreSharedModule } from '@/core/shared.module';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockRecentlyAccessedItemsComponentsModule } from './components/components.module';
 | 
					 | 
				
			||||||
import { AddonBlockRecentlyAccessedItemsHandler } from './services/block-handler';
 | 
					import { AddonBlockRecentlyAccessedItemsHandler } from './services/block-handler';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        CoreSharedModule,
 | 
					 | 
				
			||||||
        AddonBlockRecentlyAccessedItemsComponentsModule,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -24,8 +24,5 @@ import { AddonBlockRssClientComponent } from './rssclient/rssclient';
 | 
				
			|||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
        CoreSharedModule,
 | 
					        CoreSharedModule,
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    exports: [
 | 
					 | 
				
			||||||
        AddonBlockRssClientComponent,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class AddonBlockRssClientComponentsModule {}
 | 
					export class AddonBlockRssClientComponentsModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,18 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockRssClientHandler } from './services/block-handler';
 | 
					import { AddonBlockRssClientHandler } from './services/block-handler';
 | 
				
			||||||
import { AddonBlockRssClientComponentsModule } from './components/components.module';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        AddonBlockRssClientComponentsModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -13,18 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockSearchForumsHandler } from './services/block-handler';
 | 
					import { AddonBlockSearchForumsHandler } from './services/block-handler';
 | 
				
			||||||
import { CoreBlockComponentsModule } from '@features/block/components/components.module';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        CoreBlockComponentsModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -13,16 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockSelfCompletionHandler } from './services/block-handler';
 | 
					import { AddonBlockSelfCompletionHandler } from './services/block-handler';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -27,8 +27,5 @@ import { AddonBlockSiteMainMenuComponent } from './sitemainmenu/sitemainmenu';
 | 
				
			|||||||
        CoreSharedModule,
 | 
					        CoreSharedModule,
 | 
				
			||||||
        CoreCourseComponentsModule,
 | 
					        CoreCourseComponentsModule,
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    exports: [
 | 
					 | 
				
			||||||
        AddonBlockSiteMainMenuComponent,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class AddonBlockSiteMainMenuComponentsModule {}
 | 
					export class AddonBlockSiteMainMenuComponentsModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,16 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { CoreSharedModule } from '@/core/shared.module';
 | 
					 | 
				
			||||||
import { AddonBlockSiteMainMenuComponentsModule } from './components/components.module';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockSiteMainMenuHandler } from './services/block-handler';
 | 
					import { AddonBlockSiteMainMenuHandler } from './services/block-handler';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        CoreSharedModule,
 | 
					 | 
				
			||||||
        AddonBlockSiteMainMenuComponentsModule,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -27,8 +27,5 @@ import { AddonBlockStarredCoursesComponent } from './starredcourses/starredcours
 | 
				
			|||||||
        CoreSharedModule,
 | 
					        CoreSharedModule,
 | 
				
			||||||
        CoreCoursesComponentsModule,
 | 
					        CoreCoursesComponentsModule,
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    exports: [
 | 
					 | 
				
			||||||
        AddonBlockStarredCoursesComponent,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class AddonBlockStarredCoursesComponentsModule {}
 | 
					export class AddonBlockStarredCoursesComponentsModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,18 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockStarredCoursesComponentsModule } from './components/components.module';
 | 
					 | 
				
			||||||
import { AddonBlockStarredCoursesHandler } from './services/block-handler';
 | 
					import { AddonBlockStarredCoursesHandler } from './services/block-handler';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        AddonBlockStarredCoursesComponentsModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -24,8 +24,5 @@ import { AddonBlockTagsComponent } from './tags/tags';
 | 
				
			|||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
        CoreSharedModule,
 | 
					        CoreSharedModule,
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    exports: [
 | 
					 | 
				
			||||||
        AddonBlockTagsComponent,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class AddonBlockTagsComponentsModule {}
 | 
					export class AddonBlockTagsComponentsModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,18 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockTagsHandler } from './services/block-handler';
 | 
					import { AddonBlockTagsHandler } from './services/block-handler';
 | 
				
			||||||
import { AddonBlockTagsComponentsModule } from './components/components.module';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        AddonBlockTagsComponentsModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -29,9 +29,5 @@ import { CoreSearchComponentsModule } from '@features/search/components/componen
 | 
				
			|||||||
        CoreSharedModule,
 | 
					        CoreSharedModule,
 | 
				
			||||||
        CoreSearchComponentsModule,
 | 
					        CoreSearchComponentsModule,
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    exports: [
 | 
					 | 
				
			||||||
        AddonBlockTimelineComponent,
 | 
					 | 
				
			||||||
        AddonBlockTimelineEventsComponent,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class AddonBlockTimelineComponentsModule {}
 | 
					export class AddonBlockTimelineComponentsModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,18 +13,10 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
				
			||||||
import { IonicModule } from '@ionic/angular';
 | 
					 | 
				
			||||||
import { TranslateModule } from '@ngx-translate/core';
 | 
					 | 
				
			||||||
import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
					import { CoreBlockDelegate } from '@features/block/services/block-delegate';
 | 
				
			||||||
import { AddonBlockTimelineComponentsModule } from './components/components.module';
 | 
					 | 
				
			||||||
import { AddonBlockTimelineHandler } from './services/block-handler';
 | 
					import { AddonBlockTimelineHandler } from './services/block-handler';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					 | 
				
			||||||
        IonicModule,
 | 
					 | 
				
			||||||
        AddonBlockTimelineComponentsModule,
 | 
					 | 
				
			||||||
        TranslateModule.forChild(),
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
 | 
				
			|||||||
@ -27,18 +27,27 @@ import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			|||||||
import { CALENDAR_SITE_SCHEMA } from './services/database/calendar';
 | 
					import { CALENDAR_SITE_SCHEMA } from './services/database/calendar';
 | 
				
			||||||
import { CALENDAR_OFFLINE_SITE_SCHEMA } from './services/database/calendar-offline';
 | 
					import { CALENDAR_OFFLINE_SITE_SCHEMA } from './services/database/calendar-offline';
 | 
				
			||||||
import { AddonCalendarComponentsModule } from './components/components.module';
 | 
					import { AddonCalendarComponentsModule } from './components/components.module';
 | 
				
			||||||
import { AddonCalendar, AddonCalendarProvider } from './services/calendar';
 | 
					import { AddonCalendar } from './services/calendar';
 | 
				
			||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
import { AddonCalendarOfflineProvider } from './services/calendar-offline';
 | 
					 | 
				
			||||||
import { AddonCalendarHelperProvider } from './services/calendar-helper';
 | 
					 | 
				
			||||||
import { AddonCalendarSyncProvider } from './services/calendar-sync';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_CALENDAR_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonCalendarProvider,
 | 
					 * Get calendar services.
 | 
				
			||||||
    AddonCalendarOfflineProvider,
 | 
					 *
 | 
				
			||||||
    AddonCalendarHelperProvider,
 | 
					 * @returns Returns calendar services.
 | 
				
			||||||
    AddonCalendarSyncProvider,
 | 
					 */
 | 
				
			||||||
];
 | 
					export async function getCalendarServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonCalendarProvider } = await import('@addons/calendar/services/calendar');
 | 
				
			||||||
 | 
					    const { AddonCalendarOfflineProvider } = await import('@addons/calendar/services/calendar-offline');
 | 
				
			||||||
 | 
					    const { AddonCalendarHelperProvider } = await import('@addons/calendar/services/calendar-helper');
 | 
				
			||||||
 | 
					    const { AddonCalendarSyncProvider } = await import('@addons/calendar/services/calendar-sync');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonCalendarProvider,
 | 
				
			||||||
 | 
					        AddonCalendarOfflineProvider,
 | 
				
			||||||
 | 
					        AddonCalendarHelperProvider,
 | 
				
			||||||
 | 
					        AddonCalendarSyncProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mainMenuChildrenRoutes: Routes = [
 | 
					const mainMenuChildrenRoutes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -15,11 +15,19 @@
 | 
				
			|||||||
import { NgModule, Type } from '@angular/core';
 | 
					import { NgModule, Type } from '@angular/core';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { AddonMessageOutputAirnotifierModule } from './airnotifier/airnotifier.module';
 | 
					import { AddonMessageOutputAirnotifierModule } from './airnotifier/airnotifier.module';
 | 
				
			||||||
import { AddonMessageOutputDelegateService } from './services/messageoutput-delegate';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MESSAGEOUTPUT_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonMessageOutputDelegateService,
 | 
					 * Get message output services.
 | 
				
			||||||
];
 | 
					 *
 | 
				
			||||||
 | 
					 * @returns Returns message output services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getMessageOutputServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonMessageOutputDelegateService } = await import('@addons/messageoutput/services/messageoutput-delegate');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonMessageOutputDelegateService,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
 | 
				
			|||||||
@ -34,17 +34,26 @@ import { CoreUserDelegate } from '@features/user/services/user-delegate';
 | 
				
			|||||||
import { AddonMessagesSendMessageUserHandler } from './services/handlers/user-send-message';
 | 
					import { AddonMessagesSendMessageUserHandler } from './services/handlers/user-send-message';
 | 
				
			||||||
import { NgZone } from '@singletons';
 | 
					import { NgZone } from '@singletons';
 | 
				
			||||||
import { CoreNetwork } from '@services/network';
 | 
					import { CoreNetwork } from '@services/network';
 | 
				
			||||||
import { AddonMessagesSync, AddonMessagesSyncProvider } from './services/messages-sync';
 | 
					import { AddonMessagesSync } from './services/messages-sync';
 | 
				
			||||||
import { AddonMessagesSyncCronHandler } from './services/handlers/sync-cron';
 | 
					import { AddonMessagesSyncCronHandler } from './services/handlers/sync-cron';
 | 
				
			||||||
import { CoreSitePreferencesRoutingModule } from '@features/settings/settings-site-routing.module';
 | 
					import { CoreSitePreferencesRoutingModule } from '@features/settings/settings-site-routing.module';
 | 
				
			||||||
import { AddonMessagesProvider } from './services/messages';
 | 
					 | 
				
			||||||
import { AddonMessagesOfflineProvider } from './services/messages-offline';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MESSAGES_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonMessagesProvider,
 | 
					 * Get messages services.
 | 
				
			||||||
    AddonMessagesOfflineProvider,
 | 
					 *
 | 
				
			||||||
    AddonMessagesSyncProvider,
 | 
					 * @returns Returns messages services.
 | 
				
			||||||
];
 | 
					 */
 | 
				
			||||||
 | 
					export async function getMessagesServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonMessagesProvider } = await import('@addons/messages/services/messages');
 | 
				
			||||||
 | 
					    const { AddonMessagesOfflineProvider } = await import('@addons/messages/services/messages-offline');
 | 
				
			||||||
 | 
					    const { AddonMessagesSyncProvider } = await import('@addons/messages/services/messages-sync');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonMessagesProvider,
 | 
				
			||||||
 | 
					        AddonMessagesOfflineProvider,
 | 
				
			||||||
 | 
					        AddonMessagesSyncProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mainMenuChildrenRoutes: Routes = [
 | 
					const mainMenuChildrenRoutes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -25,28 +25,37 @@ import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			|||||||
import { AddonModAssignComponentsModule } from './components/components.module';
 | 
					import { AddonModAssignComponentsModule } from './components/components.module';
 | 
				
			||||||
import { AddonModAssignFeedbackModule } from './feedback/feedback.module';
 | 
					import { AddonModAssignFeedbackModule } from './feedback/feedback.module';
 | 
				
			||||||
import { AddonModAssignProvider } from './services/assign';
 | 
					import { AddonModAssignProvider } from './services/assign';
 | 
				
			||||||
import { AddonModAssignHelperProvider } from './services/assign-helper';
 | 
					 | 
				
			||||||
import { AddonModAssignOfflineProvider } from './services/assign-offline';
 | 
					 | 
				
			||||||
import { AddonModAssignSyncProvider } from './services/assign-sync';
 | 
					 | 
				
			||||||
import { OFFLINE_SITE_SCHEMA } from './services/database/assign';
 | 
					import { OFFLINE_SITE_SCHEMA } from './services/database/assign';
 | 
				
			||||||
import { AddonModAssignFeedbackDelegateService } from './services/feedback-delegate';
 | 
					 | 
				
			||||||
import { AddonModAssignIndexLinkHandler } from './services/handlers/index-link';
 | 
					import { AddonModAssignIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			||||||
import { AddonModAssignListLinkHandler } from './services/handlers/list-link';
 | 
					import { AddonModAssignListLinkHandler } from './services/handlers/list-link';
 | 
				
			||||||
import { AddonModAssignModuleHandler, AddonModAssignModuleHandlerService } from './services/handlers/module';
 | 
					import { AddonModAssignModuleHandler, AddonModAssignModuleHandlerService } from './services/handlers/module';
 | 
				
			||||||
import { AddonModAssignPrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModAssignPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
import { AddonModAssignPushClickHandler } from './services/handlers/push-click';
 | 
					import { AddonModAssignPushClickHandler } from './services/handlers/push-click';
 | 
				
			||||||
import { AddonModAssignSyncCronHandler } from './services/handlers/sync-cron';
 | 
					import { AddonModAssignSyncCronHandler } from './services/handlers/sync-cron';
 | 
				
			||||||
import { AddonModAssignSubmissionDelegateService } from './services/submission-delegate';
 | 
					 | 
				
			||||||
import { AddonModAssignSubmissionModule } from './submission/submission.module';
 | 
					import { AddonModAssignSubmissionModule } from './submission/submission.module';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MOD_ASSIGN_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonModAssignProvider,
 | 
					 * Get mod assign services.
 | 
				
			||||||
    AddonModAssignOfflineProvider,
 | 
					 *
 | 
				
			||||||
    AddonModAssignSyncProvider,
 | 
					 * @returns Returns mod assign services.
 | 
				
			||||||
    AddonModAssignHelperProvider,
 | 
					 */
 | 
				
			||||||
    AddonModAssignFeedbackDelegateService,
 | 
					export async function getModAssignServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
    AddonModAssignSubmissionDelegateService,
 | 
					    const { AddonModAssignProvider } = await import('@addons/mod/assign/services/assign');
 | 
				
			||||||
];
 | 
					    const { AddonModAssignOfflineProvider } = await import('@addons/mod/assign/services/assign-offline');
 | 
				
			||||||
 | 
					    const { AddonModAssignSyncProvider } = await import('@addons/mod/assign/services/assign-sync');
 | 
				
			||||||
 | 
					    const { AddonModAssignHelperProvider } = await import('@addons/mod/assign/services/assign-helper');
 | 
				
			||||||
 | 
					    const { AddonModAssignFeedbackDelegateService } = await import('@addons/mod/assign/services/feedback-delegate');
 | 
				
			||||||
 | 
					    const { AddonModAssignSubmissionDelegateService } = await import('@addons/mod/assign/services/submission-delegate');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModAssignProvider,
 | 
				
			||||||
 | 
					        AddonModAssignOfflineProvider,
 | 
				
			||||||
 | 
					        AddonModAssignSyncProvider,
 | 
				
			||||||
 | 
					        AddonModAssignHelperProvider,
 | 
				
			||||||
 | 
					        AddonModAssignFeedbackDelegateService,
 | 
				
			||||||
 | 
					        AddonModAssignSubmissionDelegateService,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -28,7 +28,6 @@ import {
 | 
				
			|||||||
    SUBMISSIONS_GRADES_TABLE,
 | 
					    SUBMISSIONS_GRADES_TABLE,
 | 
				
			||||||
    SUBMISSIONS_TABLE,
 | 
					    SUBMISSIONS_TABLE,
 | 
				
			||||||
} from './database/assign';
 | 
					} from './database/assign';
 | 
				
			||||||
import { CoreArray } from '@singletons/array';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Service to handle offline assign.
 | 
					 * Service to handle offline assign.
 | 
				
			||||||
@ -87,8 +86,7 @@ export class AddonModAssignOfflineProvider {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        const results = await Promise.all(promises);
 | 
					        const results = await Promise.all(promises);
 | 
				
			||||||
        // Flatten array.
 | 
					        // Flatten array.
 | 
				
			||||||
        const flatten = CoreArray
 | 
					        const flatten = results.flat();
 | 
				
			||||||
            .flatten<AddonModAssignSubmissionsDBRecordFormatted | AddonModAssignSubmissionsGradingDBRecordFormatted>(results);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Get assign id.
 | 
					        // Get assign id.
 | 
				
			||||||
        let assignIds: number[] = flatten.map((assign) => assign.assignid);
 | 
					        let assignIds: number[] = flatten.map((assign) => assign.assignid);
 | 
				
			||||||
 | 
				
			|||||||
@ -18,14 +18,22 @@ import { CoreContentLinksDelegate } from '@features/contentlinks/services/conten
 | 
				
			|||||||
import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
 | 
					import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
 | 
				
			||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
import { AddonModBBBComponentsModule } from './components/components.module';
 | 
					import { AddonModBBBComponentsModule } from './components/components.module';
 | 
				
			||||||
import { AddonModBBBService } from './services/bigbluebuttonbn';
 | 
					 | 
				
			||||||
import { AddonModBBBIndexLinkHandler } from './services/handlers/index-link';
 | 
					import { AddonModBBBIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			||||||
import { AddonModBBBListLinkHandler } from './services/handlers/list-link';
 | 
					import { AddonModBBBListLinkHandler } from './services/handlers/list-link';
 | 
				
			||||||
import { AddonModBBBModuleHandler, ADDON_MOD_BBB_MAIN_MENU_PAGE_NAME } from './services/handlers/module';
 | 
					import { AddonModBBBModuleHandler, ADDON_MOD_BBB_MAIN_MENU_PAGE_NAME } from './services/handlers/module';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MOD_BBB_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonModBBBService,
 | 
					 * Get mod BBB services.
 | 
				
			||||||
];
 | 
					 *
 | 
				
			||||||
 | 
					 * @returns Returns mod BBB services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getModBBBServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonModBBBService } = await import('@addons/mod/bigbluebuttonbn/services/bigbluebuttonbn');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModBBBService,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -25,13 +25,21 @@ import { AddonModBookIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			|||||||
import { AddonModBookListLinkHandler } from './services/handlers/list-link';
 | 
					import { AddonModBookListLinkHandler } from './services/handlers/list-link';
 | 
				
			||||||
import { AddonModBookPrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModBookPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
import { AddonModBookTagAreaHandler } from './services/handlers/tag-area';
 | 
					import { AddonModBookTagAreaHandler } from './services/handlers/tag-area';
 | 
				
			||||||
import { AddonModBookProvider } from './services/book';
 | 
					 | 
				
			||||||
import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
					import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			||||||
import { BOOK_SITE_SCHEMA } from './services/database/book';
 | 
					import { BOOK_SITE_SCHEMA } from './services/database/book';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MOD_BOOK_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonModBookProvider,
 | 
					 * Get mod book services.
 | 
				
			||||||
];
 | 
					 *
 | 
				
			||||||
 | 
					 * @returns Returns mod book services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getModBookServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonModBookProvider } = await import('@addons/mod/book/services/book');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModBookProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -21,16 +21,25 @@ import { CoreCourseModulePrefetchDelegate } from '@features/course/services/modu
 | 
				
			|||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
import { AddonModChatComponentsModule } from './components/components.module';
 | 
					import { AddonModChatComponentsModule } from './components/components.module';
 | 
				
			||||||
import { AddonModChatProvider } from './services/chat';
 | 
					import { AddonModChatProvider } from './services/chat';
 | 
				
			||||||
import { AddonModChatHelperProvider } from './services/chat-helper';
 | 
					 | 
				
			||||||
import { AddonModChatIndexLinkHandler } from './services/handlers/index-link';
 | 
					import { AddonModChatIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			||||||
import { AddonModChatListLinkHandler } from './services/handlers/list-link';
 | 
					import { AddonModChatListLinkHandler } from './services/handlers/list-link';
 | 
				
			||||||
import { AddonModChatModuleHandler, AddonModChatModuleHandlerService } from './services/handlers/module';
 | 
					import { AddonModChatModuleHandler, AddonModChatModuleHandlerService } from './services/handlers/module';
 | 
				
			||||||
import { AddonModChatPrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModChatPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MOD_CHAT_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonModChatProvider,
 | 
					 * Get mod chat services.
 | 
				
			||||||
    AddonModChatHelperProvider,
 | 
					 *
 | 
				
			||||||
];
 | 
					 * @returns Returns mod chat services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getModChatServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonModChatProvider } = await import('@addons/mod/chat/services/chat');
 | 
				
			||||||
 | 
					    const { AddonModChatHelperProvider } = await import('@addons/mod/chat/services/chat-helper');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModChatProvider,
 | 
				
			||||||
 | 
					        AddonModChatHelperProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -24,8 +24,6 @@ import { CoreCronDelegate } from '@services/cron';
 | 
				
			|||||||
import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
					import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			||||||
import { AddonModChoiceComponentsModule } from './components/components.module';
 | 
					import { AddonModChoiceComponentsModule } from './components/components.module';
 | 
				
			||||||
import { AddonModChoiceProvider } from './services/choice';
 | 
					import { AddonModChoiceProvider } from './services/choice';
 | 
				
			||||||
import { AddonModChoiceOfflineProvider } from './services/choice-offline';
 | 
					 | 
				
			||||||
import { AddonModChoiceSyncProvider } from './services/choice-sync';
 | 
					 | 
				
			||||||
import { OFFLINE_SITE_SCHEMA } from './services/database/choice';
 | 
					import { OFFLINE_SITE_SCHEMA } from './services/database/choice';
 | 
				
			||||||
import { AddonModChoiceIndexLinkHandler } from './services/handlers/index-link';
 | 
					import { AddonModChoiceIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			||||||
import { AddonModChoiceListLinkHandler } from './services/handlers/list-link';
 | 
					import { AddonModChoiceListLinkHandler } from './services/handlers/list-link';
 | 
				
			||||||
@ -33,11 +31,22 @@ import { AddonModChoiceModuleHandler, AddonModChoiceModuleHandlerService } from
 | 
				
			|||||||
import { AddonModChoicePrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModChoicePrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
import { AddonModChoiceSyncCronHandler } from './services/handlers/sync-cron';
 | 
					import { AddonModChoiceSyncCronHandler } from './services/handlers/sync-cron';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MOD_CHOICE_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonModChoiceProvider,
 | 
					 * Get mod choice services.
 | 
				
			||||||
    AddonModChoiceOfflineProvider,
 | 
					 *
 | 
				
			||||||
    AddonModChoiceSyncProvider,
 | 
					 * @returns Returns mod choice services.
 | 
				
			||||||
];
 | 
					 */
 | 
				
			||||||
 | 
					export async function getModChoiceServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonModChoiceProvider } = await import('@addons/mod/choice/services/choice');
 | 
				
			||||||
 | 
					    const { AddonModChoiceOfflineProvider } = await import('@addons/mod/choice/services/choice-offline');
 | 
				
			||||||
 | 
					    const { AddonModChoiceSyncProvider } = await import('@addons/mod/choice/services/choice-sync');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModChoiceProvider,
 | 
				
			||||||
 | 
					        AddonModChoiceOfflineProvider,
 | 
				
			||||||
 | 
					        AddonModChoiceSyncProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -22,10 +22,6 @@ import { CoreTagAreaDelegate } from '@features/tag/services/tag-area-delegate';
 | 
				
			|||||||
import { CoreCronDelegate } from '@services/cron';
 | 
					import { CoreCronDelegate } from '@services/cron';
 | 
				
			||||||
import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
					import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			||||||
import { AddonModDataProvider } from './services/data';
 | 
					import { AddonModDataProvider } from './services/data';
 | 
				
			||||||
import { AddonModDataFieldsDelegateService } from './services/data-fields-delegate';
 | 
					 | 
				
			||||||
import { AddonModDataHelperProvider } from './services/data-helper';
 | 
					 | 
				
			||||||
import { AddonModDataOfflineProvider } from './services/data-offline';
 | 
					 | 
				
			||||||
import { AddonModDataSyncProvider } from './services/data-sync';
 | 
					 | 
				
			||||||
import { ADDON_MOD_DATA_OFFLINE_SITE_SCHEMA } from './services/database/data';
 | 
					import { ADDON_MOD_DATA_OFFLINE_SITE_SCHEMA } from './services/database/data';
 | 
				
			||||||
import { AddonModDataApproveLinkHandler } from './services/handlers/approve-link';
 | 
					import { AddonModDataApproveLinkHandler } from './services/handlers/approve-link';
 | 
				
			||||||
import { AddonModDataDeleteLinkHandler } from './services/handlers/delete-link';
 | 
					import { AddonModDataDeleteLinkHandler } from './services/handlers/delete-link';
 | 
				
			||||||
@ -41,14 +37,26 @@ import { AddonModDataFieldModule } from './fields/field.module';
 | 
				
			|||||||
import { AddonModDataComponentsModule } from './components/components.module';
 | 
					import { AddonModDataComponentsModule } from './components/components.module';
 | 
				
			||||||
import { CoreCourseHelper } from '@features/course/services/course-helper';
 | 
					import { CoreCourseHelper } from '@features/course/services/course-helper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// List of providers (without handlers).
 | 
					/**
 | 
				
			||||||
export const ADDON_MOD_DATA_SERVICES: Type<unknown>[] = [
 | 
					 * Get mod data services.
 | 
				
			||||||
    AddonModDataProvider,
 | 
					 *
 | 
				
			||||||
    AddonModDataHelperProvider,
 | 
					 * @returns Returns mod data services.
 | 
				
			||||||
    AddonModDataSyncProvider,
 | 
					 */
 | 
				
			||||||
    AddonModDataOfflineProvider,
 | 
					export async function getModDataServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
    AddonModDataFieldsDelegateService,
 | 
					    const { AddonModDataProvider } = await import('@addons/mod/data/services/data');
 | 
				
			||||||
];
 | 
					    const { AddonModDataOfflineProvider } = await import('@addons/mod/data/services/data-offline');
 | 
				
			||||||
 | 
					    const { AddonModDataSyncProvider } = await import('@addons/mod/data/services/data-sync');
 | 
				
			||||||
 | 
					    const { AddonModDataHelperProvider } = await import('@addons/mod/data/services/data-helper');
 | 
				
			||||||
 | 
					    const { AddonModDataFieldsDelegateService } = await import('@addons/mod/data/services/data-fields-delegate');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModDataProvider,
 | 
				
			||||||
 | 
					        AddonModDataHelperProvider,
 | 
				
			||||||
 | 
					        AddonModDataSyncProvider,
 | 
				
			||||||
 | 
					        AddonModDataOfflineProvider,
 | 
				
			||||||
 | 
					        AddonModDataFieldsDelegateService,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -25,9 +25,6 @@ import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			|||||||
import { AddonModFeedbackComponentsModule } from './components/components.module';
 | 
					import { AddonModFeedbackComponentsModule } from './components/components.module';
 | 
				
			||||||
import { OFFLINE_SITE_SCHEMA } from './services/database/feedback';
 | 
					import { OFFLINE_SITE_SCHEMA } from './services/database/feedback';
 | 
				
			||||||
import { AddonModFeedbackProvider } from './services/feedback';
 | 
					import { AddonModFeedbackProvider } from './services/feedback';
 | 
				
			||||||
import { AddonModFeedbackHelperProvider } from './services/feedback-helper';
 | 
					 | 
				
			||||||
import { AddonModFeedbackOfflineProvider } from './services/feedback-offline';
 | 
					 | 
				
			||||||
import { AddonModFeedbackSyncProvider } from './services/feedback-sync';
 | 
					 | 
				
			||||||
import { AddonModFeedbackAnalysisLinkHandler } from './services/handlers/analysis-link';
 | 
					import { AddonModFeedbackAnalysisLinkHandler } from './services/handlers/analysis-link';
 | 
				
			||||||
import { AddonModFeedbackCompleteLinkHandler } from './services/handlers/complete-link';
 | 
					import { AddonModFeedbackCompleteLinkHandler } from './services/handlers/complete-link';
 | 
				
			||||||
import { AddonModFeedbackIndexLinkHandler } from './services/handlers/index-link';
 | 
					import { AddonModFeedbackIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			||||||
@ -40,12 +37,24 @@ import { AddonModFeedbackShowEntriesLinkHandler } from './services/handlers/show
 | 
				
			|||||||
import { AddonModFeedbackShowNonRespondentsLinkHandler } from './services/handlers/show-non-respondents-link';
 | 
					import { AddonModFeedbackShowNonRespondentsLinkHandler } from './services/handlers/show-non-respondents-link';
 | 
				
			||||||
import { AddonModFeedbackSyncCronHandler } from './services/handlers/sync-cron';
 | 
					import { AddonModFeedbackSyncCronHandler } from './services/handlers/sync-cron';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MOD_FEEDBACK_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonModFeedbackProvider,
 | 
					 * Get mod Feedback services.
 | 
				
			||||||
    AddonModFeedbackOfflineProvider,
 | 
					 *
 | 
				
			||||||
    AddonModFeedbackHelperProvider,
 | 
					 * @returns Returns mod Feedback services.
 | 
				
			||||||
    AddonModFeedbackSyncProvider,
 | 
					 */
 | 
				
			||||||
];
 | 
					export async function getModFeedbackServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonModFeedbackProvider } = await import('@addons/mod/feedback/services/feedback');
 | 
				
			||||||
 | 
					    const { AddonModFeedbackOfflineProvider } = await import('@addons/mod/feedback/services/feedback-offline');
 | 
				
			||||||
 | 
					    const { AddonModFeedbackHelperProvider } = await import('@addons/mod/feedback/services/feedback-helper');
 | 
				
			||||||
 | 
					    const { AddonModFeedbackSyncProvider } = await import('@addons/mod/feedback/services/feedback-sync');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModFeedbackProvider,
 | 
				
			||||||
 | 
					        AddonModFeedbackOfflineProvider,
 | 
				
			||||||
 | 
					        AddonModFeedbackHelperProvider,
 | 
				
			||||||
 | 
					        AddonModFeedbackSyncProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -20,18 +20,26 @@ import { CoreCourseModulePrefetchDelegate } from '@features/course/services/modu
 | 
				
			|||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
import { CorePluginFileDelegate } from '@services/plugin-file-delegate';
 | 
					import { CorePluginFileDelegate } from '@services/plugin-file-delegate';
 | 
				
			||||||
import { AddonModFolderComponentsModule } from './components/components.module';
 | 
					import { AddonModFolderComponentsModule } from './components/components.module';
 | 
				
			||||||
import { AddonModFolderProvider } from './services/folder';
 | 
					 | 
				
			||||||
import { AddonModFolderHelperProvider } from './services/folder-helper';
 | 
					 | 
				
			||||||
import { AddonModFolderIndexLinkHandler } from './services/handlers/index-link';
 | 
					import { AddonModFolderIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			||||||
import { AddonModFolderListLinkHandler } from './services/handlers/list-link';
 | 
					import { AddonModFolderListLinkHandler } from './services/handlers/list-link';
 | 
				
			||||||
import { AddonModFolderModuleHandler, AddonModFolderModuleHandlerService } from './services/handlers/module';
 | 
					import { AddonModFolderModuleHandler, AddonModFolderModuleHandlerService } from './services/handlers/module';
 | 
				
			||||||
import { AddonModFolderPluginFileHandler } from './services/handlers/pluginfile';
 | 
					import { AddonModFolderPluginFileHandler } from './services/handlers/pluginfile';
 | 
				
			||||||
import { AddonModFolderPrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModFolderPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MOD_FOLDER_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonModFolderProvider,
 | 
					 * Get mod Folder services.
 | 
				
			||||||
    AddonModFolderHelperProvider,
 | 
					 *
 | 
				
			||||||
];
 | 
					 * @returns Returns mod Folder services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getModFolderServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonModFolderProvider } = await import('@addons/mod/folder/services/folder');
 | 
				
			||||||
 | 
					    const { AddonModFolderHelperProvider } = await import('@addons/mod/folder/services/folder-helper');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModFolderProvider,
 | 
				
			||||||
 | 
					        AddonModFolderHelperProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -39,18 +39,27 @@ import { AddonModForumTagAreaHandler } from './services/handlers/tag-area';
 | 
				
			|||||||
import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate';
 | 
					import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate';
 | 
				
			||||||
import { AddonModForumPushClickHandler } from './services/handlers/push-click';
 | 
					import { AddonModForumPushClickHandler } from './services/handlers/push-click';
 | 
				
			||||||
import { AddonModForumProvider } from './services/forum';
 | 
					import { AddonModForumProvider } from './services/forum';
 | 
				
			||||||
import { AddonModForumOfflineProvider } from './services/forum-offline';
 | 
					 | 
				
			||||||
import { AddonModForumHelperProvider } from './services/forum-helper';
 | 
					 | 
				
			||||||
import { AddonModForumSyncProvider } from './services/forum-sync';
 | 
					 | 
				
			||||||
import { COURSE_CONTENTS_PATH } from '@features/course/course.module';
 | 
					import { COURSE_CONTENTS_PATH } from '@features/course/course.module';
 | 
				
			||||||
import { CoreCourseHelper } from '@features/course/services/course-helper';
 | 
					import { CoreCourseHelper } from '@features/course/services/course-helper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MOD_FORUM_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonModForumProvider,
 | 
					 * Get mod Forum services.
 | 
				
			||||||
    AddonModForumOfflineProvider,
 | 
					 *
 | 
				
			||||||
    AddonModForumHelperProvider,
 | 
					 * @returns Returns mod Forum services.
 | 
				
			||||||
    AddonModForumSyncProvider,
 | 
					 */
 | 
				
			||||||
];
 | 
					export async function getModForumServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonModForumProvider } = await import('@addons/mod/forum/services/forum');
 | 
				
			||||||
 | 
					    const { AddonModForumOfflineProvider } = await import('@addons/mod/forum/services/forum-offline');
 | 
				
			||||||
 | 
					    const { AddonModForumHelperProvider } = await import('@addons/mod/forum/services/forum-helper');
 | 
				
			||||||
 | 
					    const { AddonModForumSyncProvider } = await import('@addons/mod/forum/services/forum-sync');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModForumProvider,
 | 
				
			||||||
 | 
					        AddonModForumOfflineProvider,
 | 
				
			||||||
 | 
					        AddonModForumHelperProvider,
 | 
				
			||||||
 | 
					        AddonModForumSyncProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const FORUM_SEARCH_PAGE_NAME = 'forum/search';
 | 
					export const FORUM_SEARCH_PAGE_NAME = 'forum/search';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -31,7 +31,6 @@ import { CoreSites } from '@services/sites';
 | 
				
			|||||||
import { CoreDomUtils } from '@services/utils/dom';
 | 
					import { CoreDomUtils } from '@services/utils/dom';
 | 
				
			||||||
import { CoreUtils } from '@services/utils/utils';
 | 
					import { CoreUtils } from '@services/utils/utils';
 | 
				
			||||||
import { NgZone, Translate } from '@singletons';
 | 
					import { NgZone, Translate } from '@singletons';
 | 
				
			||||||
import { CoreArray } from '@singletons/array';
 | 
					 | 
				
			||||||
import { CoreDom } from '@singletons/dom';
 | 
					import { CoreDom } from '@singletons/dom';
 | 
				
			||||||
import { CoreEventObserver, CoreEvents } from '@singletons/events';
 | 
					import { CoreEventObserver, CoreEvents } from '@singletons/events';
 | 
				
			||||||
import { Subscription } from 'rxjs';
 | 
					import { Subscription } from 'rxjs';
 | 
				
			||||||
@ -826,7 +825,7 @@ export class AddonModForumDiscussionPage implements OnInit, AfterViewInit, OnDes
 | 
				
			|||||||
    protected getAllPosts(): Post[] {
 | 
					    protected getAllPosts(): Post[] {
 | 
				
			||||||
        const allPosts = this.posts.map(post => this.flattenPostHierarchy(post));
 | 
					        const allPosts = this.posts.map(post => this.flattenPostHierarchy(post));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return CoreArray.flatten(allPosts);
 | 
					        return allPosts.flat();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 | 
				
			|||||||
@ -29,9 +29,6 @@ import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			|||||||
import { AddonModGlossaryComponentsModule } from './components/components.module';
 | 
					import { AddonModGlossaryComponentsModule } from './components/components.module';
 | 
				
			||||||
import { SITE_SCHEMA, OFFLINE_SITE_SCHEMA } from './services/database/glossary';
 | 
					import { SITE_SCHEMA, OFFLINE_SITE_SCHEMA } from './services/database/glossary';
 | 
				
			||||||
import { AddonModGlossaryProvider } from './services/glossary';
 | 
					import { AddonModGlossaryProvider } from './services/glossary';
 | 
				
			||||||
import { AddonModGlossaryHelperProvider } from './services/glossary-helper';
 | 
					 | 
				
			||||||
import { AddonModGlossaryOfflineProvider } from './services/glossary-offline';
 | 
					 | 
				
			||||||
import { AddonModGlossarySyncProvider } from './services/glossary-sync';
 | 
					 | 
				
			||||||
import { AddonModGlossaryEditLinkHandler } from './services/handlers/edit-link';
 | 
					import { AddonModGlossaryEditLinkHandler } from './services/handlers/edit-link';
 | 
				
			||||||
import { AddonModGlossaryEntryLinkHandler } from './services/handlers/entry-link';
 | 
					import { AddonModGlossaryEntryLinkHandler } from './services/handlers/entry-link';
 | 
				
			||||||
import { AddonModGlossaryIndexLinkHandler } from './services/handlers/index-link';
 | 
					import { AddonModGlossaryIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			||||||
@ -41,12 +38,24 @@ import { AddonModGlossaryPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			|||||||
import { AddonModGlossarySyncCronHandler } from './services/handlers/sync-cron';
 | 
					import { AddonModGlossarySyncCronHandler } from './services/handlers/sync-cron';
 | 
				
			||||||
import { AddonModGlossaryTagAreaHandler } from './services/handlers/tag-area';
 | 
					import { AddonModGlossaryTagAreaHandler } from './services/handlers/tag-area';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MOD_GLOSSARY_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonModGlossaryProvider,
 | 
					 * Get mod Glossary services.
 | 
				
			||||||
    AddonModGlossaryOfflineProvider,
 | 
					 *
 | 
				
			||||||
    AddonModGlossarySyncProvider,
 | 
					 * @returns Returns mod Glossary services.
 | 
				
			||||||
    AddonModGlossaryHelperProvider,
 | 
					 */
 | 
				
			||||||
];
 | 
					export async function getModGlossaryServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonModGlossaryProvider } = await import('@addons/mod/glossary/services/glossary');
 | 
				
			||||||
 | 
					    const { AddonModGlossaryOfflineProvider } = await import('@addons/mod/glossary/services/glossary-offline');
 | 
				
			||||||
 | 
					    const { AddonModGlossarySyncProvider } = await import('@addons/mod/glossary/services/glossary-sync');
 | 
				
			||||||
 | 
					    const { AddonModGlossaryHelperProvider } = await import('@addons/mod/glossary/services/glossary-helper');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModGlossaryProvider,
 | 
				
			||||||
 | 
					        AddonModGlossaryOfflineProvider,
 | 
				
			||||||
 | 
					        AddonModGlossarySyncProvider,
 | 
				
			||||||
 | 
					        AddonModGlossaryHelperProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mainMenuRoutes: Routes = [
 | 
					const mainMenuRoutes: Routes = [
 | 
				
			||||||
    // Link handlers navigation.
 | 
					    // Link handlers navigation.
 | 
				
			||||||
 | 
				
			|||||||
@ -20,19 +20,26 @@ import { CoreCourseModulePrefetchDelegate } from '@features/course/services/modu
 | 
				
			|||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
import { CoreCronDelegate } from '@services/cron';
 | 
					import { CoreCronDelegate } from '@services/cron';
 | 
				
			||||||
import { AddonModH5PActivityComponentsModule } from './components/components.module';
 | 
					import { AddonModH5PActivityComponentsModule } from './components/components.module';
 | 
				
			||||||
import { AddonModH5PActivityProvider } from './services/h5pactivity';
 | 
					 | 
				
			||||||
import { AddonModH5PActivitySyncProvider } from './services/h5pactivity-sync';
 | 
					 | 
				
			||||||
import { AddonModH5PActivityIndexLinkHandler } from './services/handlers/index-link';
 | 
					import { AddonModH5PActivityIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			||||||
import { AddonModH5PActivityModuleHandler, AddonModH5PActivityModuleHandlerService } from './services/handlers/module';
 | 
					import { AddonModH5PActivityModuleHandler, AddonModH5PActivityModuleHandlerService } from './services/handlers/module';
 | 
				
			||||||
import { AddonModH5PActivityPrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModH5PActivityPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
import { AddonModH5PActivityReportLinkHandler } from './services/handlers/report-link';
 | 
					import { AddonModH5PActivityReportLinkHandler } from './services/handlers/report-link';
 | 
				
			||||||
import { AddonModH5PActivitySyncCronHandler } from './services/handlers/sync-cron';
 | 
					import { AddonModH5PActivitySyncCronHandler } from './services/handlers/sync-cron';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// List of providers (without handlers).
 | 
					/**
 | 
				
			||||||
export const ADDON_MOD_H5P_ACTIVITY_SERVICES: Type<unknown>[] = [
 | 
					 * Get mod H5P activity services.
 | 
				
			||||||
    AddonModH5PActivityProvider,
 | 
					 *
 | 
				
			||||||
    AddonModH5PActivitySyncProvider,
 | 
					 * @returns Returns mod H5P activity services.
 | 
				
			||||||
];
 | 
					 */
 | 
				
			||||||
 | 
					export async function getModH5PActivityServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonModH5PActivityProvider } = await import('@addons/mod/h5pactivity/services/h5pactivity');
 | 
				
			||||||
 | 
					    const { AddonModH5PActivitySyncProvider } = await import('@addons/mod/h5pactivity/services/h5pactivity-sync');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModH5PActivityProvider,
 | 
				
			||||||
 | 
					        AddonModH5PActivitySyncProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -25,11 +25,19 @@ import { AddonModImscpListLinkHandler } from './services/handlers/list-link';
 | 
				
			|||||||
import { AddonModImscpModuleHandler, AddonModImscpModuleHandlerService } from './services/handlers/module';
 | 
					import { AddonModImscpModuleHandler, AddonModImscpModuleHandlerService } from './services/handlers/module';
 | 
				
			||||||
import { AddonModImscpPluginFileHandler } from './services/handlers/pluginfile';
 | 
					import { AddonModImscpPluginFileHandler } from './services/handlers/pluginfile';
 | 
				
			||||||
import { AddonModImscpPrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModImscpPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
import { AddonModImscpProvider } from './services/imscp';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MOD_IMSCP_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonModImscpProvider,
 | 
					 * Get mod Imscp services.
 | 
				
			||||||
];
 | 
					 *
 | 
				
			||||||
 | 
					 * @returns Returns mod Imscp services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getModImscpServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonModImscpProvider } = await import('@addons/mod/imscp/services/imscp');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModImscpProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -34,16 +34,25 @@ import { AddonModLessonPushClickHandler } from './services/handlers/push-click';
 | 
				
			|||||||
import { AddonModLessonReportLinkHandler } from './services/handlers/report-link';
 | 
					import { AddonModLessonReportLinkHandler } from './services/handlers/report-link';
 | 
				
			||||||
import { AddonModLessonSyncCronHandler } from './services/handlers/sync-cron';
 | 
					import { AddonModLessonSyncCronHandler } from './services/handlers/sync-cron';
 | 
				
			||||||
import { AddonModLessonProvider } from './services/lesson';
 | 
					import { AddonModLessonProvider } from './services/lesson';
 | 
				
			||||||
import { AddonModLessonHelperProvider } from './services/lesson-helper';
 | 
					 | 
				
			||||||
import { AddonModLessonOfflineProvider } from './services/lesson-offline';
 | 
					 | 
				
			||||||
import { AddonModLessonSyncProvider } from './services/lesson-sync';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MOD_LESSON_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonModLessonProvider,
 | 
					 * Get mod Lesson services.
 | 
				
			||||||
    AddonModLessonOfflineProvider,
 | 
					 *
 | 
				
			||||||
    AddonModLessonSyncProvider,
 | 
					 * @returns Returns mod Lesson services.
 | 
				
			||||||
    AddonModLessonHelperProvider,
 | 
					 */
 | 
				
			||||||
];
 | 
					export async function getModLessonServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonModLessonProvider } = await import('@addons/mod/lesson/services/lesson');
 | 
				
			||||||
 | 
					    const { AddonModLessonOfflineProvider } = await import('@addons/mod/lesson/services/lesson-offline');
 | 
				
			||||||
 | 
					    const { AddonModLessonSyncProvider } = await import('@addons/mod/lesson/services/lesson-sync');
 | 
				
			||||||
 | 
					    const { AddonModLessonHelperProvider } = await import('@addons/mod/lesson/services/lesson-helper');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModLessonProvider,
 | 
				
			||||||
 | 
					        AddonModLessonOfflineProvider,
 | 
				
			||||||
 | 
					        AddonModLessonSyncProvider,
 | 
				
			||||||
 | 
					        AddonModLessonHelperProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -23,13 +23,22 @@ import { AddonModLtiIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			|||||||
import { AddonModLtiListLinkHandler } from './services/handlers/list-link';
 | 
					import { AddonModLtiListLinkHandler } from './services/handlers/list-link';
 | 
				
			||||||
import { AddonModLtiModuleHandler, AddonModLtiModuleHandlerService } from './services/handlers/module';
 | 
					import { AddonModLtiModuleHandler, AddonModLtiModuleHandlerService } from './services/handlers/module';
 | 
				
			||||||
import { AddonModLtiPrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModLtiPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
import { AddonModLtiProvider } from './services/lti';
 | 
					import { AddonModLtiHelper } from './services/lti-helper';
 | 
				
			||||||
import { AddonModLtiHelper, AddonModLtiHelperProvider } from './services/lti-helper';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MOD_LTI_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonModLtiProvider,
 | 
					 * Get mod Lti services.
 | 
				
			||||||
    AddonModLtiHelperProvider,
 | 
					 *
 | 
				
			||||||
];
 | 
					 * @returns Returns mod Lti services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getModLtiServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonModLtiProvider } = await import('@addons/mod/lti/services/lti');
 | 
				
			||||||
 | 
					    const { AddonModLtiHelperProvider } = await import('@addons/mod/lti/services/lti-helper');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModLtiProvider,
 | 
				
			||||||
 | 
					        AddonModLtiHelperProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -25,13 +25,21 @@ import { AddonModPageListLinkHandler } from './services/handlers/list-link';
 | 
				
			|||||||
import { AddonModPageModuleHandler, AddonModPageModuleHandlerService } from './services/handlers/module';
 | 
					import { AddonModPageModuleHandler, AddonModPageModuleHandlerService } from './services/handlers/module';
 | 
				
			||||||
import { AddonModPagePluginFileHandler } from './services/handlers/pluginfile';
 | 
					import { AddonModPagePluginFileHandler } from './services/handlers/pluginfile';
 | 
				
			||||||
import { AddonModPagePrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModPagePrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
import { AddonModPageProvider } from './services/page';
 | 
					 | 
				
			||||||
import { AddonModPageHelperProvider } from './services/page-helper';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MOD_PAGE_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonModPageProvider,
 | 
					 * Get mod Page services.
 | 
				
			||||||
    AddonModPageHelperProvider,
 | 
					 *
 | 
				
			||||||
];
 | 
					 * @returns Returns mod Page services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getModPageServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonModPageProvider } = await import('@addons/mod/page/services/page');
 | 
				
			||||||
 | 
					    const { AddonModPageHelperProvider } = await import('@addons/mod/page/services/page-helper');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModPageProvider,
 | 
				
			||||||
 | 
					        AddonModPageHelperProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -25,7 +25,6 @@ import { CoreCronDelegate } from '@services/cron';
 | 
				
			|||||||
import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
					import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			||||||
import { AddonModQuizAccessRulesModule } from './accessrules/accessrules.module';
 | 
					import { AddonModQuizAccessRulesModule } from './accessrules/accessrules.module';
 | 
				
			||||||
import { AddonModQuizComponentsModule } from './components/components.module';
 | 
					import { AddonModQuizComponentsModule } from './components/components.module';
 | 
				
			||||||
import { AddonModQuizAccessRuleDelegateService } from './services/access-rules-delegate';
 | 
					 | 
				
			||||||
import { SITE_SCHEMA } from './services/database/quiz';
 | 
					import { SITE_SCHEMA } from './services/database/quiz';
 | 
				
			||||||
import { AddonModQuizGradeLinkHandler } from './services/handlers/grade-link';
 | 
					import { AddonModQuizGradeLinkHandler } from './services/handlers/grade-link';
 | 
				
			||||||
import { AddonModQuizIndexLinkHandler } from './services/handlers/index-link';
 | 
					import { AddonModQuizIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			||||||
@ -36,17 +35,27 @@ import { AddonModQuizPushClickHandler } from './services/handlers/push-click';
 | 
				
			|||||||
import { AddonModQuizReviewLinkHandler } from './services/handlers/review-link';
 | 
					import { AddonModQuizReviewLinkHandler } from './services/handlers/review-link';
 | 
				
			||||||
import { AddonModQuizSyncCronHandler } from './services/handlers/sync-cron';
 | 
					import { AddonModQuizSyncCronHandler } from './services/handlers/sync-cron';
 | 
				
			||||||
import { AddonModQuizProvider } from './services/quiz';
 | 
					import { AddonModQuizProvider } from './services/quiz';
 | 
				
			||||||
import { AddonModQuizHelperProvider } from './services/quiz-helper';
 | 
					 | 
				
			||||||
import { AddonModQuizOfflineProvider } from './services/quiz-offline';
 | 
					 | 
				
			||||||
import { AddonModQuizSyncProvider } from './services/quiz-sync';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MOD_QUIZ_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonModQuizAccessRuleDelegateService,
 | 
					 * Get mod Quiz services.
 | 
				
			||||||
    AddonModQuizProvider,
 | 
					 *
 | 
				
			||||||
    AddonModQuizOfflineProvider,
 | 
					 * @returns Returns mod Quiz services.
 | 
				
			||||||
    AddonModQuizHelperProvider,
 | 
					 */
 | 
				
			||||||
    AddonModQuizSyncProvider,
 | 
					export async function getModQuizServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
];
 | 
					    const { AddonModQuizProvider } = await import('@addons/mod/quiz/services/quiz');
 | 
				
			||||||
 | 
					    const { AddonModQuizOfflineProvider } = await import('@addons/mod/quiz/services/quiz-offline');
 | 
				
			||||||
 | 
					    const { AddonModQuizHelperProvider } = await import('@addons/mod/quiz/services/quiz-helper');
 | 
				
			||||||
 | 
					    const { AddonModQuizSyncProvider } = await import('@addons/mod/quiz/services/quiz-sync');
 | 
				
			||||||
 | 
					    const { AddonModQuizAccessRuleDelegateService } = await import('@addons/mod/quiz/services/access-rules-delegate');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModQuizAccessRuleDelegateService,
 | 
				
			||||||
 | 
					        AddonModQuizProvider,
 | 
				
			||||||
 | 
					        AddonModQuizOfflineProvider,
 | 
				
			||||||
 | 
					        AddonModQuizHelperProvider,
 | 
				
			||||||
 | 
					        AddonModQuizSyncProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -25,11 +25,19 @@ import { AddonModResourceListLinkHandler } from './services/handlers/list-link';
 | 
				
			|||||||
import { AddonModResourceModuleHandlerService, AddonModResourceModuleHandler } from './services/handlers/module';
 | 
					import { AddonModResourceModuleHandlerService, AddonModResourceModuleHandler } from './services/handlers/module';
 | 
				
			||||||
import { AddonModResourcePluginFileHandler } from './services/handlers/pluginfile';
 | 
					import { AddonModResourcePluginFileHandler } from './services/handlers/pluginfile';
 | 
				
			||||||
import { AddonModResourcePrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModResourcePrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
import { AddonModResourceProvider } from './services/resource';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MOD_RESOURCE_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonModResourceProvider,
 | 
					 * Get mod Resource services.
 | 
				
			||||||
];
 | 
					 *
 | 
				
			||||||
 | 
					 * @returns Returns mod Resource services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getModResourceServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonModResourceProvider } = await import('@addons/mod/resource/services/resource');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModResourceProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -33,16 +33,25 @@ import { AddonModScormPluginFileHandler } from './services/handlers/pluginfile';
 | 
				
			|||||||
import { AddonModScormPrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModScormPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
import { AddonModScormSyncCronHandler } from './services/handlers/sync-cron';
 | 
					import { AddonModScormSyncCronHandler } from './services/handlers/sync-cron';
 | 
				
			||||||
import { AddonModScormProvider } from './services/scorm';
 | 
					import { AddonModScormProvider } from './services/scorm';
 | 
				
			||||||
import { AddonModScormHelperProvider } from './services/scorm-helper';
 | 
					 | 
				
			||||||
import { AddonModScormOfflineProvider } from './services/scorm-offline';
 | 
					 | 
				
			||||||
import { AddonModScormSyncProvider } from './services/scorm-sync';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MOD_SCORM_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonModScormProvider,
 | 
					 * Get mod Scorm services.
 | 
				
			||||||
    AddonModScormOfflineProvider,
 | 
					 *
 | 
				
			||||||
    AddonModScormHelperProvider,
 | 
					 * @returns Returns mod Scorm services.
 | 
				
			||||||
    AddonModScormSyncProvider,
 | 
					 */
 | 
				
			||||||
];
 | 
					export async function getModScormServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonModScormProvider } = await import('@addons/mod/scorm/services/scorm');
 | 
				
			||||||
 | 
					    const { AddonModScormOfflineProvider } = await import('@addons/mod/scorm/services/scorm-offline');
 | 
				
			||||||
 | 
					    const { AddonModScormHelperProvider } = await import('@addons/mod/scorm/services/scorm-helper');
 | 
				
			||||||
 | 
					    const { AddonModScormSyncProvider } = await import('@addons/mod/scorm/services/scorm-sync');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModScormProvider,
 | 
				
			||||||
 | 
					        AddonModScormOfflineProvider,
 | 
				
			||||||
 | 
					        AddonModScormHelperProvider,
 | 
				
			||||||
 | 
					        AddonModScormSyncProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -27,18 +27,25 @@ import { AddonModSurveyListLinkHandler } from './services/handlers/list-link';
 | 
				
			|||||||
import { AddonModSurveyModuleHandler, AddonModSurveyModuleHandlerService } from './services/handlers/module';
 | 
					import { AddonModSurveyModuleHandler, AddonModSurveyModuleHandlerService } from './services/handlers/module';
 | 
				
			||||||
import { AddonModSurveyPrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModSurveyPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
import { AddonModSurveySyncCronHandler } from './services/handlers/sync-cron';
 | 
					import { AddonModSurveySyncCronHandler } from './services/handlers/sync-cron';
 | 
				
			||||||
import { AddonModSurveyProvider } from './services/survey';
 | 
					 | 
				
			||||||
import { AddonModSurveyHelperProvider } from './services/survey-helper';
 | 
					 | 
				
			||||||
import { AddonModSurveyOfflineProvider } from './services/survey-offline';
 | 
					 | 
				
			||||||
import { AddonModSurveySyncProvider } from './services/survey-sync';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// List of providers (without handlers).
 | 
					/**
 | 
				
			||||||
export const ADDON_MOD_SURVEY_SERVICES: Type<unknown>[] = [
 | 
					 * Get mod Survey services.
 | 
				
			||||||
    AddonModSurveyProvider,
 | 
					 *
 | 
				
			||||||
    AddonModSurveyHelperProvider,
 | 
					 * @returns Returns mod Survey services.
 | 
				
			||||||
    AddonModSurveySyncProvider,
 | 
					 */
 | 
				
			||||||
    AddonModSurveyOfflineProvider,
 | 
					export async function getModSurveyServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
];
 | 
					    const { AddonModSurveyProvider } = await import('@addons/mod/survey/services/survey');
 | 
				
			||||||
 | 
					    const { AddonModSurveyOfflineProvider } = await import('@addons/mod/survey/services/survey-offline');
 | 
				
			||||||
 | 
					    const { AddonModSurveySyncProvider } = await import('@addons/mod/survey/services/survey-sync');
 | 
				
			||||||
 | 
					    const { AddonModSurveyHelperProvider } = await import('@addons/mod/survey/services/survey-helper');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModSurveyProvider,
 | 
				
			||||||
 | 
					        AddonModSurveyHelperProvider,
 | 
				
			||||||
 | 
					        AddonModSurveySyncProvider,
 | 
				
			||||||
 | 
					        AddonModSurveyOfflineProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -23,13 +23,21 @@ import { AddonModUrlIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			|||||||
import { AddonModUrlListLinkHandler } from './services/handlers/list-link';
 | 
					import { AddonModUrlListLinkHandler } from './services/handlers/list-link';
 | 
				
			||||||
import { AddonModUrlModuleHandler, AddonModUrlModuleHandlerService } from './services/handlers/module';
 | 
					import { AddonModUrlModuleHandler, AddonModUrlModuleHandlerService } from './services/handlers/module';
 | 
				
			||||||
import { AddonModUrlPrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModUrlPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
import { AddonModUrlProvider } from './services/url';
 | 
					 | 
				
			||||||
import { AddonModUrlHelperProvider } from './services/url-helper';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MOD_URL_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonModUrlProvider,
 | 
					 * Get mod Url services.
 | 
				
			||||||
    AddonModUrlHelperProvider,
 | 
					 *
 | 
				
			||||||
];
 | 
					 * @returns Returns mod Url services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getModUrlServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonModUrlProvider } = await import('@addons/mod/url/services/url');
 | 
				
			||||||
 | 
					    const { AddonModUrlHelperProvider } = await import('@addons/mod/url/services/url-helper');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModUrlProvider,
 | 
				
			||||||
 | 
					        AddonModUrlHelperProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -34,14 +34,23 @@ import { AddonModWikiPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			|||||||
import { AddonModWikiSyncCronHandler } from './services/handlers/sync-cron';
 | 
					import { AddonModWikiSyncCronHandler } from './services/handlers/sync-cron';
 | 
				
			||||||
import { AddonModWikiTagAreaHandler } from './services/handlers/tag-area';
 | 
					import { AddonModWikiTagAreaHandler } from './services/handlers/tag-area';
 | 
				
			||||||
import { AddonModWikiProvider } from './services/wiki';
 | 
					import { AddonModWikiProvider } from './services/wiki';
 | 
				
			||||||
import { AddonModWikiOfflineProvider } from './services/wiki-offline';
 | 
					 | 
				
			||||||
import { AddonModWikiSyncProvider } from './services/wiki-sync';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_MOD_WIKI_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonModWikiProvider,
 | 
					 * Get mod Wiki services.
 | 
				
			||||||
    AddonModWikiOfflineProvider,
 | 
					 *
 | 
				
			||||||
    AddonModWikiSyncProvider,
 | 
					 * @returns Returns mod Wiki services.
 | 
				
			||||||
];
 | 
					 */
 | 
				
			||||||
 | 
					export async function getModWikiServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonModWikiProvider } = await import('@addons/mod/wiki/services/wiki');
 | 
				
			||||||
 | 
					    const { AddonModWikiOfflineProvider } = await import('@addons/mod/wiki/services/wiki-offline');
 | 
				
			||||||
 | 
					    const { AddonModWikiSyncProvider } = await import('@addons/mod/wiki/services/wiki-sync');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonModWikiProvider,
 | 
				
			||||||
 | 
					        AddonModWikiOfflineProvider,
 | 
				
			||||||
 | 
					        AddonModWikiSyncProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -31,11 +31,11 @@ import { getPrefetchHandlerInstance } from '@addons/mod/workshop/services/handle
 | 
				
			|||||||
import { getCronHandlerInstance } from '@addons/mod/workshop/services/handlers/sync-cron';
 | 
					import { getCronHandlerInstance } from '@addons/mod/workshop/services/handlers/sync-cron';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Get workshop services.
 | 
					 * Get modworkshop services.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @returns Workshop services.
 | 
					 * @returns modWorkshop services.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export async function getWorkshopServices(): Promise<Type<unknown>[]> {
 | 
					export async function getModWorkshopServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
    const { AddonModWorkshopProvider } = await import('@addons/mod/workshop/services/workshop');
 | 
					    const { AddonModWorkshopProvider } = await import('@addons/mod/workshop/services/workshop');
 | 
				
			||||||
    const { AddonModWorkshopOfflineProvider } = await import('@addons/mod/workshop/services/workshop-offline');
 | 
					    const { AddonModWorkshopOfflineProvider } = await import('@addons/mod/workshop/services/workshop-offline');
 | 
				
			||||||
    const { AddonModWorkshopSyncProvider } = await import('@addons/mod/workshop/services/workshop-sync');
 | 
					    const { AddonModWorkshopSyncProvider } = await import('@addons/mod/workshop/services/workshop-sync');
 | 
				
			||||||
@ -57,7 +57,7 @@ export async function getWorkshopServices(): Promise<Type<unknown>[]> {
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 * @returns Workshop component modules.
 | 
					 * @returns Workshop component modules.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export async function getWorkshopComponentModules(): Promise<unknown[]> {
 | 
					export async function getModWorkshopComponentModules(): Promise<unknown[]> {
 | 
				
			||||||
    const { AddonModWorkshopComponentsModule } = await import('@addons/mod/workshop/components/components.module');
 | 
					    const { AddonModWorkshopComponentsModule } = await import('@addons/mod/workshop/components/components.module');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return [AddonModWorkshopComponentsModule];
 | 
					    return [AddonModWorkshopComponentsModule];
 | 
				
			||||||
 | 
				
			|||||||
@ -13,9 +13,6 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { AddonNotesProvider } from './services/notes';
 | 
					 | 
				
			||||||
import { AddonNotesOfflineProvider } from './services/notes-offline';
 | 
					 | 
				
			||||||
import { AddonNotesSyncProvider } from './services/notes-sync';
 | 
					 | 
				
			||||||
import { CoreCronDelegate } from '@services/cron';
 | 
					import { CoreCronDelegate } from '@services/cron';
 | 
				
			||||||
import { CoreCourseOptionsDelegate } from '@features/course/services/course-options-delegate';
 | 
					import { CoreCourseOptionsDelegate } from '@features/course/services/course-options-delegate';
 | 
				
			||||||
import { CoreUserDelegate } from '@features/user/services/user-delegate';
 | 
					import { CoreUserDelegate } from '@features/user/services/user-delegate';
 | 
				
			||||||
@ -29,12 +26,22 @@ import { Routes } from '@angular/router';
 | 
				
			|||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
import { CoreCourseIndexRoutingModule } from '@features/course/course-routing.module';
 | 
					import { CoreCourseIndexRoutingModule } from '@features/course/course-routing.module';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// List of providers (without handlers).
 | 
					/**
 | 
				
			||||||
export const ADDON_NOTES_SERVICES: Type<unknown>[] = [
 | 
					 * Get notes services.
 | 
				
			||||||
    AddonNotesProvider,
 | 
					 *
 | 
				
			||||||
    AddonNotesOfflineProvider,
 | 
					 * @returns Returns notes services.
 | 
				
			||||||
    AddonNotesSyncProvider,
 | 
					 */
 | 
				
			||||||
];
 | 
					export async function getNotesServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonNotesProvider } = await import('@addons/notes/services/notes');
 | 
				
			||||||
 | 
					    const { AddonNotesOfflineProvider } = await import('@addons/notes/services/notes-offline');
 | 
				
			||||||
 | 
					    const { AddonNotesSyncProvider } = await import('@addons/notes/services/notes-sync');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonNotesProvider,
 | 
				
			||||||
 | 
					        AddonNotesOfflineProvider,
 | 
				
			||||||
 | 
					        AddonNotesSyncProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -26,16 +26,24 @@ import { AddonNotificationsCronHandler } from './services/handlers/cron';
 | 
				
			|||||||
import { AddonNotificationsPushClickHandler } from './services/handlers/push-click';
 | 
					import { AddonNotificationsPushClickHandler } from './services/handlers/push-click';
 | 
				
			||||||
import { AddonNotificationsSettingsHandler, AddonNotificationsSettingsHandlerService } from './services/handlers/settings';
 | 
					import { AddonNotificationsSettingsHandler, AddonNotificationsSettingsHandlerService } from './services/handlers/settings';
 | 
				
			||||||
import { CoreSitePreferencesRoutingModule } from '@features/settings/settings-site-routing.module';
 | 
					import { CoreSitePreferencesRoutingModule } from '@features/settings/settings-site-routing.module';
 | 
				
			||||||
import { AddonNotificationsProvider } from './services/notifications';
 | 
					 | 
				
			||||||
import { AddonNotificationsHelperProvider } from './services/notifications-helper';
 | 
					 | 
				
			||||||
import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
					import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
				
			||||||
import { AddonNotificationsPreferencesLinkHandler } from './services/handlers/preferences-link';
 | 
					import { AddonNotificationsPreferencesLinkHandler } from './services/handlers/preferences-link';
 | 
				
			||||||
import { AddonNotificationsLinkHandler } from './services/handlers/notifications-link';
 | 
					import { AddonNotificationsLinkHandler } from './services/handlers/notifications-link';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_NOTIFICATIONS_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonNotificationsProvider,
 | 
					 * Get notifications services.
 | 
				
			||||||
    AddonNotificationsHelperProvider,
 | 
					 *
 | 
				
			||||||
];
 | 
					 * @returns Returns notifications services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getNotificationsServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonNotificationsProvider } = await import('@addons/notifications/services/notifications');
 | 
				
			||||||
 | 
					    const { AddonNotificationsHelperProvider } = await import('@addons/notifications/services/notifications-helper');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonNotificationsProvider,
 | 
				
			||||||
 | 
					        AddonNotificationsHelperProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -17,15 +17,23 @@ import { Routes } from '@angular/router';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { CoreMainMenuRoutingModule } from '@features/mainmenu/mainmenu-routing.module';
 | 
					import { CoreMainMenuRoutingModule } from '@features/mainmenu/mainmenu-routing.module';
 | 
				
			||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
import { AddonPrivateFilesProvider } from './services/privatefiles';
 | 
					 | 
				
			||||||
import { AddonPrivateFilesHelperProvider } from './services/privatefiles-helper';
 | 
					 | 
				
			||||||
import { CoreUserDelegate } from '@features/user/services/user-delegate';
 | 
					import { CoreUserDelegate } from '@features/user/services/user-delegate';
 | 
				
			||||||
import { AddonPrivateFilesUserHandler, AddonPrivateFilesUserHandlerService } from './services/handlers/user';
 | 
					import { AddonPrivateFilesUserHandler, AddonPrivateFilesUserHandlerService } from './services/handlers/user';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ADDON_PRIVATEFILES_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    AddonPrivateFilesProvider,
 | 
					 * Get private files services.
 | 
				
			||||||
    AddonPrivateFilesHelperProvider,
 | 
					 *
 | 
				
			||||||
];
 | 
					 * @returns Returns private files services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getPrivateFilesServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { AddonPrivateFilesProvider } = await import('@addons/privatefiles/services/privatefiles');
 | 
				
			||||||
 | 
					    const { AddonPrivateFilesHelperProvider } = await import('@addons/privatefiles/services/privatefiles-helper');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        AddonPrivateFilesProvider,
 | 
				
			||||||
 | 
					        AddonPrivateFilesHelperProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -231,7 +231,7 @@ export class AddonStorageManagerCoursesStoragePage implements OnInit, OnDestroy
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    private async calculateDownloadedCourseSize(courseId: number): Promise<number> {
 | 
					    private async calculateDownloadedCourseSize(courseId: number): Promise<number> {
 | 
				
			||||||
        const sections = await CoreCourse.getSections(courseId);
 | 
					        const sections = await CoreCourse.getSections(courseId);
 | 
				
			||||||
        const modules = CoreArray.flatten(sections.map((section) => section.modules));
 | 
					        const modules = sections.map((section) => section.modules).flat();
 | 
				
			||||||
        const promisedModuleSizes = modules.map(async (module) => {
 | 
					        const promisedModuleSizes = modules.map(async (module) => {
 | 
				
			||||||
            const size = await CoreCourseModulePrefetchDelegate.getModuleStoredSize(module, courseId);
 | 
					            const size = await CoreCourseModulePrefetchDelegate.getModuleStoredSize(module, courseId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -24,8 +24,6 @@ import {
 | 
				
			|||||||
    UrlSegmentGroup,
 | 
					    UrlSegmentGroup,
 | 
				
			||||||
} from '@angular/router';
 | 
					} from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreArray } from '@singletons/array';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const modulesRoutes: WeakMap<InjectionToken<unknown>, ModuleRoutes> = new WeakMap();
 | 
					const modulesRoutes: WeakMap<InjectionToken<unknown>, ModuleRoutes> = new WeakMap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@ -35,7 +33,7 @@ const modulesRoutes: WeakMap<InjectionToken<unknown>, ModuleRoutes> = new WeakMa
 | 
				
			|||||||
 * @returns App routes.
 | 
					 * @returns App routes.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
function buildAppRoutes(injector: Injector): Routes {
 | 
					function buildAppRoutes(injector: Injector): Routes {
 | 
				
			||||||
    return CoreArray.flatten(injector.get<Routes[]>(APP_ROUTES, []));
 | 
					    return injector.get<Routes[]>(APP_ROUTES, []).flat();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@ -210,8 +208,8 @@ export function resolveModuleRoutes(injector: Injector, token: InjectionToken<Mo
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const moduleRoutes = {
 | 
					    const moduleRoutes = {
 | 
				
			||||||
        children: CoreArray.flatten(routes.map(r => r.children)),
 | 
					        children: routes.map(r => r.children).flat(),
 | 
				
			||||||
        siblings: CoreArray.flatten(routes.map(r => r.siblings)),
 | 
					        siblings: routes.map(r => r.siblings).flat(),
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    modulesRoutes.set(token, moduleRoutes);
 | 
					    modulesRoutes.set(token, moduleRoutes);
 | 
				
			||||||
 | 
				
			|||||||
@ -31,9 +31,7 @@ export class CoreSortedDelegate<
 | 
				
			|||||||
    protected sortedHandlers: DisplayType[] = [];
 | 
					    protected sortedHandlers: DisplayType[] = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Constructor of the Delegate.
 | 
					     * @inheritdoc
 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param delegateName Delegate name used for logging purposes.
 | 
					 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    constructor(delegateName: string) {
 | 
					    constructor(delegateName: string) {
 | 
				
			||||||
        super(delegateName, true);
 | 
					        super(delegateName, true);
 | 
				
			||||||
 | 
				
			|||||||
@ -21,65 +21,73 @@ import { CoreInterceptor } from './classes/interceptor';
 | 
				
			|||||||
import { getDatabaseProviders } from './services/database';
 | 
					import { getDatabaseProviders } from './services/database';
 | 
				
			||||||
import { getInitializerProviders } from './initializers';
 | 
					import { getInitializerProviders } from './initializers';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreAppProvider } from '@services/app';
 | 
					/**
 | 
				
			||||||
import { CoreConfigProvider } from '@services/config';
 | 
					 * Get core services.
 | 
				
			||||||
import { CoreCronDelegateService } from '@services/cron';
 | 
					 *
 | 
				
			||||||
import { CoreCustomURLSchemesProvider } from '@services/urlschemes';
 | 
					 * @returns Core services.
 | 
				
			||||||
import { CoreDbProvider } from '@services/db';
 | 
					 */
 | 
				
			||||||
import { CoreDomUtilsProvider } from '@services/utils/dom';
 | 
					export async function getCoreServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
import { CoreFileHelperProvider } from '@services/file-helper';
 | 
					 | 
				
			||||||
import { CoreFilepoolProvider } from '@services/filepool';
 | 
					 | 
				
			||||||
import { CoreFileProvider } from '@services/file';
 | 
					 | 
				
			||||||
import { CoreFileSessionProvider } from '@services/file-session';
 | 
					 | 
				
			||||||
import { CoreGeolocationProvider } from '@services/geolocation';
 | 
					 | 
				
			||||||
import { CoreGroupsProvider } from '@services/groups';
 | 
					 | 
				
			||||||
import { CoreIframeUtilsProvider } from '@services/utils/iframe';
 | 
					 | 
				
			||||||
import { CoreLangProvider } from '@services/lang';
 | 
					 | 
				
			||||||
import { CoreLocalNotificationsProvider } from '@services/local-notifications';
 | 
					 | 
				
			||||||
import { CoreMimetypeUtilsProvider } from '@services/utils/mimetype';
 | 
					 | 
				
			||||||
import { CoreNavigatorService } from '@services/navigator';
 | 
					 | 
				
			||||||
import { CorePluginFileDelegateService } from '@services/plugin-file-delegate';
 | 
					 | 
				
			||||||
import { CoreScreenService } from '@services/screen';
 | 
					 | 
				
			||||||
import { CoreSitesProvider } from '@services/sites';
 | 
					 | 
				
			||||||
import { CoreSyncProvider } from '@services/sync';
 | 
					 | 
				
			||||||
import { CoreTextUtilsProvider } from '@services/utils/text';
 | 
					 | 
				
			||||||
import { CoreTimeUtilsProvider } from '@services/utils/time';
 | 
					 | 
				
			||||||
import { CoreUpdateManagerProvider } from '@services/update-manager';
 | 
					 | 
				
			||||||
import { CoreUrlUtilsProvider } from '@services/utils/url';
 | 
					 | 
				
			||||||
import { CoreUtilsProvider } from '@services/utils/utils';
 | 
					 | 
				
			||||||
import { CoreWSProvider } from '@services/ws';
 | 
					 | 
				
			||||||
import { CorePlatformService } from '@services/platform';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const CORE_SERVICES: Type<unknown>[] = [
 | 
					    const { CoreAppProvider } = await import('@services/app');
 | 
				
			||||||
    CoreAppProvider,
 | 
					    const { CoreConfigProvider } = await import('@services/config');
 | 
				
			||||||
    CoreConfigProvider,
 | 
					    const { CoreCronDelegateService } = await import('@services/cron');
 | 
				
			||||||
    CoreCronDelegateService,
 | 
					    const { CoreCustomURLSchemesProvider } = await import('@services/urlschemes');
 | 
				
			||||||
    CoreCustomURLSchemesProvider,
 | 
					    const { CoreDbProvider } = await import('@services/db');
 | 
				
			||||||
    CoreDbProvider,
 | 
					    const { CoreDomUtilsProvider } = await import('@services/utils/dom');
 | 
				
			||||||
    CoreDomUtilsProvider,
 | 
					    const { CoreFileHelperProvider } = await import('@services/file-helper');
 | 
				
			||||||
    CoreFileHelperProvider,
 | 
					    const { CoreFilepoolProvider } = await import('@services/filepool');
 | 
				
			||||||
    CoreFilepoolProvider,
 | 
					    const { CoreFileProvider } = await import('@services/file');
 | 
				
			||||||
    CoreFileProvider,
 | 
					    const { CoreFileSessionProvider } = await import('@services/file-session');
 | 
				
			||||||
    CoreFileSessionProvider,
 | 
					    const { CoreGeolocationProvider } = await import('@services/geolocation');
 | 
				
			||||||
    CoreGeolocationProvider,
 | 
					    const { CoreGroupsProvider } = await import('@services/groups');
 | 
				
			||||||
    CoreGroupsProvider,
 | 
					    const { CoreIframeUtilsProvider } = await import('@services/utils/iframe');
 | 
				
			||||||
    CoreIframeUtilsProvider,
 | 
					    const { CoreLangProvider } = await import('@services/lang');
 | 
				
			||||||
    CoreLangProvider,
 | 
					    const { CoreLocalNotificationsProvider } = await import('@services/local-notifications');
 | 
				
			||||||
    CoreLocalNotificationsProvider,
 | 
					    const { CoreMimetypeUtilsProvider } = await import('@services/utils/mimetype');
 | 
				
			||||||
    CoreMimetypeUtilsProvider,
 | 
					    const { CoreNavigatorService } = await import('@services/navigator');
 | 
				
			||||||
    CoreNavigatorService,
 | 
					    const { CorePluginFileDelegateService } = await import('@services/plugin-file-delegate');
 | 
				
			||||||
    CorePluginFileDelegateService,
 | 
					    const { CoreScreenService } = await import('@services/screen');
 | 
				
			||||||
    CorePlatformService,
 | 
					    const { CoreSitesProvider } = await import('@services/sites');
 | 
				
			||||||
    CoreScreenService,
 | 
					    const { CoreSyncProvider } = await import('@services/sync');
 | 
				
			||||||
    CoreSitesProvider,
 | 
					    const { CoreTextUtilsProvider } = await import('@services/utils/text');
 | 
				
			||||||
    CoreSyncProvider,
 | 
					    const { CoreTimeUtilsProvider } = await import('@services/utils/time');
 | 
				
			||||||
    CoreTextUtilsProvider,
 | 
					    const { CoreUpdateManagerProvider } = await import('@services/update-manager');
 | 
				
			||||||
    CoreTimeUtilsProvider,
 | 
					    const { CoreUrlUtilsProvider } = await import('@services/utils/url');
 | 
				
			||||||
    CoreUpdateManagerProvider,
 | 
					    const { CoreUtilsProvider } = await import('@services/utils/utils');
 | 
				
			||||||
    CoreUrlUtilsProvider,
 | 
					    const { CoreWSProvider } = await import('@services/ws');
 | 
				
			||||||
    CoreUtilsProvider,
 | 
					    const { CorePlatformService } = await import('@services/platform');
 | 
				
			||||||
    CoreWSProvider,
 | 
					
 | 
				
			||||||
];
 | 
					    return [
 | 
				
			||||||
 | 
					        CoreAppProvider,
 | 
				
			||||||
 | 
					        CoreConfigProvider,
 | 
				
			||||||
 | 
					        CoreCronDelegateService,
 | 
				
			||||||
 | 
					        CoreCustomURLSchemesProvider,
 | 
				
			||||||
 | 
					        CoreDbProvider,
 | 
				
			||||||
 | 
					        CoreDomUtilsProvider,
 | 
				
			||||||
 | 
					        CoreFileHelperProvider,
 | 
				
			||||||
 | 
					        CoreFilepoolProvider,
 | 
				
			||||||
 | 
					        CoreFileProvider,
 | 
				
			||||||
 | 
					        CoreFileSessionProvider,
 | 
				
			||||||
 | 
					        CoreGeolocationProvider,
 | 
				
			||||||
 | 
					        CoreGroupsProvider,
 | 
				
			||||||
 | 
					        CoreIframeUtilsProvider,
 | 
				
			||||||
 | 
					        CoreLangProvider,
 | 
				
			||||||
 | 
					        CoreLocalNotificationsProvider,
 | 
				
			||||||
 | 
					        CoreMimetypeUtilsProvider,
 | 
				
			||||||
 | 
					        CoreNavigatorService,
 | 
				
			||||||
 | 
					        CorePluginFileDelegateService,
 | 
				
			||||||
 | 
					        CorePlatformService,
 | 
				
			||||||
 | 
					        CoreScreenService,
 | 
				
			||||||
 | 
					        CoreSitesProvider,
 | 
				
			||||||
 | 
					        CoreSyncProvider,
 | 
				
			||||||
 | 
					        CoreTextUtilsProvider,
 | 
				
			||||||
 | 
					        CoreTimeUtilsProvider,
 | 
				
			||||||
 | 
					        CoreUpdateManagerProvider,
 | 
				
			||||||
 | 
					        CoreUrlUtilsProvider,
 | 
				
			||||||
 | 
					        CoreUtilsProvider,
 | 
				
			||||||
 | 
					        CoreWSProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
 | 
				
			|||||||
@ -14,13 +14,20 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { NgModule, Type } from '@angular/core';
 | 
					import { NgModule, Type } from '@angular/core';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreBlockDelegateService } from './services/block-delegate';
 | 
					/**
 | 
				
			||||||
import { CoreBlockHelperProvider } from './services/block-helper';
 | 
					 * Get block services.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @returns Block services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getBlockServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { CoreBlockDelegateService } = await import('@features/block/services/block-delegate');
 | 
				
			||||||
 | 
					    const { CoreBlockHelperProvider } = await import('@features/block/services/block-helper');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const CORE_BLOCK_SERVICES: Type<unknown>[] = [
 | 
					    return [
 | 
				
			||||||
    CoreBlockDelegateService,
 | 
					        CoreBlockDelegateService,
 | 
				
			||||||
    CoreBlockHelperProvider,
 | 
					        CoreBlockHelperProvider,
 | 
				
			||||||
];
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({})
 | 
					@NgModule({})
 | 
				
			||||||
export class CoreBlockModule {}
 | 
					export class CoreBlockModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -109,6 +109,13 @@ export class CoreBlockDelegateService extends CoreDelegate<CoreBlockHandler> {
 | 
				
			|||||||
        this.blocksUpdateObservable = new Subject<void>();
 | 
					        this.blocksUpdateObservable = new Subject<void>();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @inheritdoc
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    async isEnabled(): Promise<boolean> {
 | 
				
			||||||
 | 
					        return !this.areBlocksDisabledInSite();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Check if blocks are disabled in a certain site.
 | 
					     * Check if blocks are disabled in a certain site.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 | 
				
			|||||||
@ -16,6 +16,7 @@ import { Injectable } from '@angular/core';
 | 
				
			|||||||
import { CoreCourse, CoreCourseBlock } from '@features/course/services/course';
 | 
					import { CoreCourse, CoreCourseBlock } from '@features/course/services/course';
 | 
				
			||||||
import { CoreBlockDelegate } from './block-delegate';
 | 
					import { CoreBlockDelegate } from './block-delegate';
 | 
				
			||||||
import { makeSingleton } from '@singletons';
 | 
					import { makeSingleton } from '@singletons';
 | 
				
			||||||
 | 
					import { CoreSite } from '@classes/sites/site';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Service that provides helper functions for blocks.
 | 
					 * Service that provides helper functions for blocks.
 | 
				
			||||||
@ -26,10 +27,11 @@ export class CoreBlockHelperProvider {
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Return if it get course blocks options is enabled for the current site.
 | 
					     * Return if it get course blocks options is enabled for the current site.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 | 
					     * @param site Site. If not defined, current site.
 | 
				
			||||||
     * @returns true if enabled, false otherwise.
 | 
					     * @returns true if enabled, false otherwise.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    canGetCourseBlocks(): boolean {
 | 
					    canGetCourseBlocks(site?: CoreSite): boolean {
 | 
				
			||||||
        return CoreCourse.canGetCourseBlocks() && !CoreBlockDelegate.areBlocksDisabledInCourses();
 | 
					        return CoreCourse.canGetCourseBlocks(site) && !CoreBlockDelegate.areBlocksDisabledInCourses(site);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 | 
				
			|||||||
@ -17,7 +17,6 @@ import { CoreSites } from '@services/sites';
 | 
				
			|||||||
import { CoreTimeUtils } from '@services/utils/time';
 | 
					import { CoreTimeUtils } from '@services/utils/time';
 | 
				
			||||||
import { makeSingleton } from '@singletons';
 | 
					import { makeSingleton } from '@singletons';
 | 
				
			||||||
import { COMMENTS_TABLE, COMMENTS_DELETED_TABLE, CoreCommentsDBRecord, CoreCommentsDeletedDBRecord } from './database/comments';
 | 
					import { COMMENTS_TABLE, COMMENTS_DELETED_TABLE, CoreCommentsDBRecord, CoreCommentsDeletedDBRecord } from './database/comments';
 | 
				
			||||||
import { CoreArray } from '@singletons/array';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Service to handle offline comments.
 | 
					 * Service to handle offline comments.
 | 
				
			||||||
@ -38,7 +37,7 @@ export class CoreCommentsOfflineProvider {
 | 
				
			|||||||
            site.getDb().getRecords<CoreCommentsDeletedDBRecord>(COMMENTS_DELETED_TABLE),
 | 
					            site.getDb().getRecords<CoreCommentsDeletedDBRecord>(COMMENTS_DELETED_TABLE),
 | 
				
			||||||
        ]);
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return CoreArray.flatten<CoreCommentsDBRecord | CoreCommentsDeletedDBRecord>(results);
 | 
					        return results.flat();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 | 
				
			|||||||
@ -40,33 +40,32 @@ import { CoreEvents } from '@singletons/events';
 | 
				
			|||||||
import { makeSingleton } from '@singletons';
 | 
					import { makeSingleton } from '@singletons';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Import core services.
 | 
					// Import core services.
 | 
				
			||||||
import { CORE_SERVICES } from '@/core/core.module';
 | 
					import { getCoreServices } from '@/core/core.module';
 | 
				
			||||||
import { CORE_BLOCK_SERVICES } from '@features/block/block.module';
 | 
					import { getBlockServices } from '@features/block/block.module';
 | 
				
			||||||
import { getCommentsServices } from '@features/comments/comments.module';
 | 
					import { getCommentsServices } from '@features/comments/comments.module';
 | 
				
			||||||
import { CORE_CONTENTLINKS_SERVICES } from '@features/contentlinks/contentlinks.module';
 | 
					import { getContentLinksServices } from '@features/contentlinks/contentlinks.module';
 | 
				
			||||||
import { CORE_COURSE_SERVICES } from '@features/course/course.module';
 | 
					import { getCourseServices } from '@features/course/course.module';
 | 
				
			||||||
import { CORE_COURSES_SERVICES } from '@features/courses/courses.module';
 | 
					import { getCoursesServices } from '@features/courses/courses.module';
 | 
				
			||||||
import { CORE_EDITOR_SERVICES } from '@features/editor/editor.module';
 | 
					import { getEditorServices } from '@features/editor/editor.module';
 | 
				
			||||||
import { CORE_ENROL_SERVICES } from '@features/enrol/enrol.module';
 | 
					import { getEnrolServices } from '@features/enrol/enrol.module';
 | 
				
			||||||
import { CORE_NATIVE_SERVICES } from '@features/native/native.module';
 | 
					import { getFileUploadedServices } from '@features/fileuploader/fileuploader.module';
 | 
				
			||||||
import { CORE_FILEUPLOADER_SERVICES } from '@features/fileuploader/fileuploader.module';
 | 
					import { getFilterServices } from '@features/filter/filter.module';
 | 
				
			||||||
import { CORE_FILTER_SERVICES } from '@features/filter/filter.module';
 | 
					import { getGradesServices } from '@features/grades/grades.module';
 | 
				
			||||||
import { CORE_GRADES_SERVICES } from '@features/grades/grades.module';
 | 
					import { getH5PServices } from '@features/h5p/h5p.module';
 | 
				
			||||||
import { CORE_H5P_SERVICES } from '@features/h5p/h5p.module';
 | 
					import { getLoginServices } from '@features/login/login.module';
 | 
				
			||||||
import { CORE_LOGIN_SERVICES } from '@features/login/login.module';
 | 
					import { getMainMenuServices } from '@features/mainmenu/mainmenu.module';
 | 
				
			||||||
import { CORE_MAINMENU_SERVICES } from '@features/mainmenu/mainmenu.module';
 | 
					import { getNativeServices } from '@features/native/native.module';
 | 
				
			||||||
import { CORE_PUSHNOTIFICATIONS_SERVICES } from '@features/pushnotifications/pushnotifications.module';
 | 
					import { getPushNotificationsServices } from '@features/pushnotifications/pushnotifications.module';
 | 
				
			||||||
import { CORE_QUESTION_SERVICES } from '@features/question/question.module';
 | 
					import { getQuestionServices } from '@features/question/question.module';
 | 
				
			||||||
import { CORE_SHAREDFILES_SERVICES } from '@features/sharedfiles/sharedfiles.module';
 | 
					import { getRatingServices } from '@features/rating/rating.module';
 | 
				
			||||||
import { CORE_RATING_SERVICES } from '@features/rating/rating.module';
 | 
					import { getSearchServices } from '@features/search/search.module';
 | 
				
			||||||
import { CORE_SEARCH_SERVICES } from '@features/search/search.module';
 | 
					import { getSettingsServices } from '@features/settings/settings.module';
 | 
				
			||||||
import { CORE_SETTINGS_SERVICES } from '@features/settings/settings.module';
 | 
					import { getSharedFilesServices } from '@features/sharedfiles/sharedfiles.module';
 | 
				
			||||||
import { CORE_SITEHOME_SERVICES } from '@features/sitehome/sitehome.module';
 | 
					import { getSiteHomeServices } from '@features/sitehome/sitehome.module';
 | 
				
			||||||
 | 
					import { getStyleServices } from '@features/styles/styles.module';
 | 
				
			||||||
import { getTagServices } from '@features/tag/tag.module';
 | 
					import { getTagServices } from '@features/tag/tag.module';
 | 
				
			||||||
import { CORE_STYLE_SERVICES } from '@features/styles/styles.module';
 | 
					import { getUsersServices } from '@features/user/user.module';
 | 
				
			||||||
import { CORE_USER_SERVICES } from '@features/user/user.module';
 | 
					import { getXAPIServices } from '@features/xapi/xapi.module';
 | 
				
			||||||
import { CORE_XAPI_SERVICES } from '@features/xapi/xapi.module';
 | 
					 | 
				
			||||||
import { CoreSitePluginsProvider } from '@features/siteplugins/services/siteplugins';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Import other libraries and providers.
 | 
					// Import other libraries and providers.
 | 
				
			||||||
import { DomSanitizer } from '@angular/platform-browser';
 | 
					import { DomSanitizer } from '@angular/platform-browser';
 | 
				
			||||||
@ -124,41 +123,43 @@ import { CoreSitePluginsAssignFeedbackComponent } from '@features/siteplugins/co
 | 
				
			|||||||
import { CoreSitePluginsAssignSubmissionComponent } from '@features/siteplugins/components/assign-submission/assign-submission';
 | 
					import { CoreSitePluginsAssignSubmissionComponent } from '@features/siteplugins/components/assign-submission/assign-submission';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Import addon providers. Do not import database module because it causes circular dependencies.
 | 
					// Import addon providers. Do not import database module because it causes circular dependencies.
 | 
				
			||||||
import { ADDON_BADGES_SERVICES } from '@addons/badges/badges.module';
 | 
					import { getBadgesServices } from '@addons/badges/badges.module';
 | 
				
			||||||
import { ADDON_CALENDAR_SERVICES } from '@addons/calendar/calendar.module';
 | 
					import { getCalendarServices } from '@addons/calendar/calendar.module';
 | 
				
			||||||
import { getCourseCompletionServices } from '@addons/coursecompletion/coursecompletion.module';
 | 
					 | 
				
			||||||
import { getCompetencyServices } from '@addons/competency/competency.module';
 | 
					import { getCompetencyServices } from '@addons/competency/competency.module';
 | 
				
			||||||
import { ADDON_MESSAGEOUTPUT_SERVICES } from '@addons/messageoutput/messageoutput.module';
 | 
					import { getCourseCompletionServices } from '@addons/coursecompletion/coursecompletion.module';
 | 
				
			||||||
import { ADDON_MESSAGES_SERVICES } from '@addons/messages/messages.module';
 | 
					import { getMessageOutputServices } from '@addons/messageoutput/messageoutput.module';
 | 
				
			||||||
import { ADDON_MOD_ASSIGN_SERVICES } from '@addons/mod/assign/assign.module';
 | 
					import { getMessagesServices } from '@addons/messages/messages.module';
 | 
				
			||||||
import { ADDON_MOD_BOOK_SERVICES } from '@addons/mod/book/book.module';
 | 
					import { getModAssignServices } from '@addons/mod/assign/assign.module';
 | 
				
			||||||
import { ADDON_MOD_CHAT_SERVICES } from '@addons/mod/chat/chat.module';
 | 
					import { getModBookServices } from '@addons/mod/book/book.module';
 | 
				
			||||||
import { ADDON_MOD_CHOICE_SERVICES } from '@addons/mod/choice/choice.module';
 | 
					import { getModChatServices } from '@addons/mod/chat/chat.module';
 | 
				
			||||||
import { ADDON_MOD_FEEDBACK_SERVICES } from '@addons/mod/feedback/feedback.module';
 | 
					import { getModChoiceServices } from '@addons/mod/choice/choice.module';
 | 
				
			||||||
import { ADDON_MOD_FOLDER_SERVICES } from '@addons/mod/folder/folder.module';
 | 
					import { getModFeedbackServices } from '@addons/mod/feedback/feedback.module';
 | 
				
			||||||
import { ADDON_MOD_FORUM_SERVICES } from '@addons/mod/forum/forum.module';
 | 
					import { getModFolderServices } from '@addons/mod/folder/folder.module';
 | 
				
			||||||
import { ADDON_MOD_GLOSSARY_SERVICES } from '@addons/mod/glossary/glossary.module';
 | 
					import { getModForumServices } from '@addons/mod/forum/forum.module';
 | 
				
			||||||
import { ADDON_MOD_H5P_ACTIVITY_SERVICES } from '@addons/mod/h5pactivity/h5pactivity.module';
 | 
					import { getModGlossaryServices } from '@addons/mod/glossary/glossary.module';
 | 
				
			||||||
import { ADDON_MOD_IMSCP_SERVICES } from '@addons/mod/imscp/imscp.module';
 | 
					import { getModH5PActivityServices } from '@addons/mod/h5pactivity/h5pactivity.module';
 | 
				
			||||||
import { ADDON_MOD_LESSON_SERVICES } from '@addons/mod/lesson/lesson.module';
 | 
					import { getModImscpServices } from '@addons/mod/imscp/imscp.module';
 | 
				
			||||||
import { ADDON_MOD_LTI_SERVICES } from '@addons/mod/lti/lti.module';
 | 
					import { getModLessonServices } from '@addons/mod/lesson/lesson.module';
 | 
				
			||||||
import { ADDON_MOD_PAGE_SERVICES } from '@addons/mod/page/page.module';
 | 
					import { getModLtiServices } from '@addons/mod/lti/lti.module';
 | 
				
			||||||
import { ADDON_MOD_QUIZ_SERVICES } from '@addons/mod/quiz/quiz.module';
 | 
					import { getModPageServices } from '@addons/mod/page/page.module';
 | 
				
			||||||
import { ADDON_MOD_RESOURCE_SERVICES } from '@addons/mod/resource/resource.module';
 | 
					import { getModQuizServices } from '@addons/mod/quiz/quiz.module';
 | 
				
			||||||
import { ADDON_MOD_SCORM_SERVICES } from '@addons/mod/scorm/scorm.module';
 | 
					import { getModResourceServices } from '@addons/mod/resource/resource.module';
 | 
				
			||||||
import { ADDON_MOD_SURVEY_SERVICES } from '@addons/mod/survey/survey.module';
 | 
					import { getModScormServices } from '@addons/mod/scorm/scorm.module';
 | 
				
			||||||
import { ADDON_MOD_URL_SERVICES } from '@addons/mod/url/url.module';
 | 
					import { getModSurveyServices } from '@addons/mod/survey/survey.module';
 | 
				
			||||||
import { ADDON_MOD_WIKI_SERVICES } from '@addons/mod/wiki/wiki.module';
 | 
					import { getModUrlServices } from '@addons/mod/url/url.module';
 | 
				
			||||||
import { getWorkshopComponentModules, getWorkshopServices } from '@addons/mod/workshop/workshop.module';
 | 
					import { getModWikiServices } from '@addons/mod/wiki/wiki.module';
 | 
				
			||||||
import { ADDON_NOTES_SERVICES } from '@addons/notes/notes.module';
 | 
					import { getModWorkshopComponentModules, getModWorkshopServices } from '@addons/mod/workshop/workshop.module';
 | 
				
			||||||
import { ADDON_NOTIFICATIONS_SERVICES } from '@addons/notifications/notifications.module';
 | 
					import { getNotesServices } from '@addons/notes/notes.module';
 | 
				
			||||||
import { ADDON_PRIVATEFILES_SERVICES } from '@addons/privatefiles/privatefiles.module';
 | 
					import { getNotificationsServices } from '@addons/notifications/notifications.module';
 | 
				
			||||||
 | 
					import { getPrivateFilesServices } from '@addons/privatefiles/privatefiles.module';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Import some addon modules that define components, directives and pipes. Only import the important ones.
 | 
					// Import some addon modules that define components, directives and pipes. Only import the important ones.
 | 
				
			||||||
import { AddonModAssignComponentsModule } from '@addons/mod/assign/components/components.module';
 | 
					import { AddonModAssignComponentsModule } from '@addons/mod/assign/components/components.module';
 | 
				
			||||||
import { CorePromisedValue } from '@classes/promised-value';
 | 
					import { CorePromisedValue } from '@classes/promised-value';
 | 
				
			||||||
import { CorePlatform } from '@services/platform';
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreAutoLogoutService } from '@features/autologout/services/autologout';
 | 
					import { CoreAutoLogoutService } from '@features/autologout/services/autologout';
 | 
				
			||||||
 | 
					import { CoreSitePluginsProvider } from '@features/siteplugins/services/siteplugins';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Service to provide functionalities regarding compiling dynamic HTML and Javascript.
 | 
					 * Service to provide functionalities regarding compiling dynamic HTML and Javascript.
 | 
				
			||||||
@ -182,7 +183,7 @@ export class CoreCompileProvider {
 | 
				
			|||||||
    ];
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected readonly LAZY_IMPORTS = [
 | 
					    protected readonly LAZY_IMPORTS = [
 | 
				
			||||||
        getWorkshopComponentModules,
 | 
					        getModWorkshopComponentModules,
 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    constructor(protected injector: Injector) {
 | 
					    constructor(protected injector: Injector) {
 | 
				
			||||||
@ -212,7 +213,7 @@ export class CoreCompileProvider {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        const lazyImports = await Promise.all(this.LAZY_IMPORTS.map(getModules => getModules()));
 | 
					        const lazyImports = await Promise.all(this.LAZY_IMPORTS.map(getModules => getModules()));
 | 
				
			||||||
        const imports = [
 | 
					        const imports = [
 | 
				
			||||||
            ...CoreArray.flatten(lazyImports),
 | 
					            ...lazyImports.flat(),
 | 
				
			||||||
            ...this.IMPORTS,
 | 
					            ...this.IMPORTS,
 | 
				
			||||||
            ...extraImports,
 | 
					            ...extraImports,
 | 
				
			||||||
            TranslatePipeForCompile,
 | 
					            TranslatePipeForCompile,
 | 
				
			||||||
@ -277,60 +278,10 @@ export class CoreCompileProvider {
 | 
				
			|||||||
    // eslint-disable-next-line @typescript-eslint/no-explicit-any
 | 
					    // eslint-disable-next-line @typescript-eslint/no-explicit-any
 | 
				
			||||||
    injectLibraries(instance: any, extraProviders: Type<unknown>[] = []): void {
 | 
					    injectLibraries(instance: any, extraProviders: Type<unknown>[] = []): void {
 | 
				
			||||||
        const providers = [
 | 
					        const providers = [
 | 
				
			||||||
            ...CORE_SERVICES,
 | 
					 | 
				
			||||||
            CoreAutoLogoutService,
 | 
					 | 
				
			||||||
            ...CORE_BLOCK_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_CONTENTLINKS_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_COURSE_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_COURSES_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_EDITOR_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_ENROL_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_FILEUPLOADER_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_FILTER_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_GRADES_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_H5P_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_MAINMENU_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_LOGIN_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_QUESTION_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_PUSHNOTIFICATIONS_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_RATING_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_SEARCH_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_SETTINGS_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_SHAREDFILES_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_SITEHOME_SERVICES,
 | 
					 | 
				
			||||||
            CoreSitePluginsProvider,
 | 
					 | 
				
			||||||
            ...CORE_STYLE_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_USER_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_XAPI_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_NATIVE_SERVICES,
 | 
					 | 
				
			||||||
            ...this.OTHER_SERVICES,
 | 
					 | 
				
			||||||
            ...extraProviders,
 | 
					            ...extraProviders,
 | 
				
			||||||
            ...ADDON_BADGES_SERVICES,
 | 
					            CoreAutoLogoutService,
 | 
				
			||||||
            ...ADDON_CALENDAR_SERVICES,
 | 
					            CoreSitePluginsProvider,
 | 
				
			||||||
            ...ADDON_MESSAGEOUTPUT_SERVICES,
 | 
					            ...this.OTHER_SERVICES,
 | 
				
			||||||
            ...ADDON_MESSAGES_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_ASSIGN_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_BOOK_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_CHAT_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_CHOICE_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_FEEDBACK_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_FOLDER_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_FORUM_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_GLOSSARY_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_H5P_ACTIVITY_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_IMSCP_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_LESSON_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_LTI_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_PAGE_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_QUIZ_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_RESOURCE_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_SCORM_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_SURVEY_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_URL_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_MOD_WIKI_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_NOTES_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_NOTIFICATIONS_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_PRIVATEFILES_SERVICES,
 | 
					 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // We cannot inject anything to this constructor. Use the Injector to inject all the providers into the instance.
 | 
					        // We cannot inject anything to this constructor. Use the Injector to inject all the providers into the instance.
 | 
				
			||||||
@ -405,20 +356,66 @@ export class CoreCompileProvider {
 | 
				
			|||||||
     * @returns Lazy libraries.
 | 
					     * @returns Lazy libraries.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    async getLazyLibraries(): Promise<Type<unknown>[]> {
 | 
					    async getLazyLibraries(): Promise<Type<unknown>[]> {
 | 
				
			||||||
        const ADDON_MOD_WORKSHOP_SERVICES = await getWorkshopServices();
 | 
					        const services = await Promise.all([
 | 
				
			||||||
        const ADDON_COMPETENCY_SERVICES = await getCompetencyServices();
 | 
					            getCoreServices(),
 | 
				
			||||||
        const ADDON_COURSECOMPLETION_SERVICES = await getCourseCompletionServices();
 | 
					            getBlockServices(),
 | 
				
			||||||
 | 
					            getCommentsServices(),
 | 
				
			||||||
 | 
					            getContentLinksServices(),
 | 
				
			||||||
 | 
					            getCourseServices(),
 | 
				
			||||||
 | 
					            getCoursesServices(),
 | 
				
			||||||
 | 
					            getEditorServices(),
 | 
				
			||||||
 | 
					            getEnrolServices(),
 | 
				
			||||||
 | 
					            getFileUploadedServices(),
 | 
				
			||||||
 | 
					            getFilterServices(),
 | 
				
			||||||
 | 
					            getGradesServices(),
 | 
				
			||||||
 | 
					            getH5PServices(),
 | 
				
			||||||
 | 
					            getLoginServices(),
 | 
				
			||||||
 | 
					            getMainMenuServices(),
 | 
				
			||||||
 | 
					            getNativeServices(),
 | 
				
			||||||
 | 
					            getPushNotificationsServices(),
 | 
				
			||||||
 | 
					            getQuestionServices(),
 | 
				
			||||||
 | 
					            getRatingServices(),
 | 
				
			||||||
 | 
					            getSearchServices(),
 | 
				
			||||||
 | 
					            getSettingsServices(),
 | 
				
			||||||
 | 
					            getSharedFilesServices(),
 | 
				
			||||||
 | 
					            getSiteHomeServices(),
 | 
				
			||||||
 | 
					            getStyleServices(),
 | 
				
			||||||
 | 
					            getTagServices(),
 | 
				
			||||||
 | 
					            getUsersServices(),
 | 
				
			||||||
 | 
					            getXAPIServices(),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const CORE_COMMENTS_SERVICES = await getCommentsServices();
 | 
					            getBadgesServices(),
 | 
				
			||||||
        const CORE_TAG_SERVICES = await getTagServices();
 | 
					            getCalendarServices(),
 | 
				
			||||||
 | 
					            getCompetencyServices(),
 | 
				
			||||||
 | 
					            getCourseCompletionServices(),
 | 
				
			||||||
 | 
					            getMessageOutputServices(),
 | 
				
			||||||
 | 
					            getMessagesServices(),
 | 
				
			||||||
 | 
					            getModAssignServices(),
 | 
				
			||||||
 | 
					            getModBookServices(),
 | 
				
			||||||
 | 
					            getModChatServices(),
 | 
				
			||||||
 | 
					            getModChoiceServices(),
 | 
				
			||||||
 | 
					            getModFeedbackServices(),
 | 
				
			||||||
 | 
					            getModFolderServices(),
 | 
				
			||||||
 | 
					            getModForumServices(),
 | 
				
			||||||
 | 
					            getModGlossaryServices(),
 | 
				
			||||||
 | 
					            getModH5PActivityServices(),
 | 
				
			||||||
 | 
					            getModImscpServices(),
 | 
				
			||||||
 | 
					            getModLessonServices(),
 | 
				
			||||||
 | 
					            getModLtiServices(),
 | 
				
			||||||
 | 
					            getModPageServices(),
 | 
				
			||||||
 | 
					            getModQuizServices(),
 | 
				
			||||||
 | 
					            getModResourceServices(),
 | 
				
			||||||
 | 
					            getModScormServices(),
 | 
				
			||||||
 | 
					            getModSurveyServices(),
 | 
				
			||||||
 | 
					            getModUrlServices(),
 | 
				
			||||||
 | 
					            getModWikiServices(),
 | 
				
			||||||
 | 
					            getModWorkshopServices(),
 | 
				
			||||||
 | 
					            getNotesServices(),
 | 
				
			||||||
 | 
					            getNotificationsServices(),
 | 
				
			||||||
 | 
					            getPrivateFilesServices(),
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return [
 | 
					        return services.flat();
 | 
				
			||||||
            ...ADDON_MOD_WORKSHOP_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_COMPETENCY_SERVICES,
 | 
					 | 
				
			||||||
            ...ADDON_COURSECOMPLETION_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_COMMENTS_SERVICES,
 | 
					 | 
				
			||||||
            ...CORE_TAG_SERVICES,
 | 
					 | 
				
			||||||
        ];
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -14,13 +14,21 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { NgModule, Type } from '@angular/core';
 | 
					import { NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { CoreContentLinksComponentsModule } from './components/components.module';
 | 
					import { CoreContentLinksComponentsModule } from './components/components.module';
 | 
				
			||||||
import { CoreContentLinksDelegateService } from './services/contentlinks-delegate';
 | 
					 | 
				
			||||||
import { CoreContentLinksHelperProvider } from './services/contentlinks-helper';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const CORE_CONTENTLINKS_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    CoreContentLinksDelegateService,
 | 
					 * Get content links services.
 | 
				
			||||||
    CoreContentLinksHelperProvider,
 | 
					 *
 | 
				
			||||||
];
 | 
					 * @returns Content links services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getContentLinksServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { CoreContentLinksDelegateService } = await import('@features/contentlinks/services/contentlinks-delegate');
 | 
				
			||||||
 | 
					    const { CoreContentLinksHelperProvider } = await import('@features/contentlinks/services/contentlinks-helper');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        CoreContentLinksDelegateService,
 | 
				
			||||||
 | 
					        CoreContentLinksHelperProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
 | 
				
			|||||||
@ -21,36 +21,46 @@ import { CoreCourseFormatModule } from '@features/course/format/formats.module';
 | 
				
			|||||||
import { SITE_SCHEMA, OFFLINE_SITE_SCHEMA } from './services/database/course';
 | 
					import { SITE_SCHEMA, OFFLINE_SITE_SCHEMA } from './services/database/course';
 | 
				
			||||||
import { SITE_SCHEMA as LOG_SITE_SCHEMA } from './services/database/log';
 | 
					import { SITE_SCHEMA as LOG_SITE_SCHEMA } from './services/database/log';
 | 
				
			||||||
import { SITE_SCHEMA as PREFETCH_SITE_SCHEMA } from './services/database/module-prefetch';
 | 
					import { SITE_SCHEMA as PREFETCH_SITE_SCHEMA } from './services/database/module-prefetch';
 | 
				
			||||||
import { CoreCourseModulePrefetchDelegate, CoreCourseModulePrefetchDelegateService } from './services/module-prefetch-delegate';
 | 
					import { CoreCourseModulePrefetchDelegate } from './services/module-prefetch-delegate';
 | 
				
			||||||
import { CoreCronDelegate } from '@services/cron';
 | 
					import { CoreCronDelegate } from '@services/cron';
 | 
				
			||||||
import { CoreCourseLogCronHandler } from './services/handlers/log-cron';
 | 
					import { CoreCourseLogCronHandler } from './services/handlers/log-cron';
 | 
				
			||||||
import { CoreCourseSyncCronHandler } from './services/handlers/sync-cron';
 | 
					import { CoreCourseSyncCronHandler } from './services/handlers/sync-cron';
 | 
				
			||||||
import { CoreTagAreaDelegate } from '@features/tag/services/tag-area-delegate';
 | 
					import { CoreTagAreaDelegate } from '@features/tag/services/tag-area-delegate';
 | 
				
			||||||
import { CoreCourseTagAreaHandler } from './services/handlers/course-tag-area';
 | 
					import { CoreCourseTagAreaHandler } from './services/handlers/course-tag-area';
 | 
				
			||||||
import { CoreCourseModulesTagAreaHandler } from './services/handlers/modules-tag-area';
 | 
					import { CoreCourseModulesTagAreaHandler } from './services/handlers/modules-tag-area';
 | 
				
			||||||
import { CoreCourse, CoreCourseProvider } from './services/course';
 | 
					import { CoreCourse } from './services/course';
 | 
				
			||||||
import { CoreCourseHelperProvider } from './services/course-helper';
 | 
					 | 
				
			||||||
import { CoreCourseLogHelperProvider } from './services/log-helper';
 | 
					 | 
				
			||||||
import { CoreCourseFormatDelegateService } from './services/format-delegate';
 | 
					 | 
				
			||||||
import { CoreCourseModuleDelegateService } from './services/module-delegate';
 | 
					 | 
				
			||||||
import { CoreCourseOptionsDelegateService } from './services/course-options-delegate';
 | 
					 | 
				
			||||||
import { CoreCourseOfflineProvider } from './services/course-offline';
 | 
					 | 
				
			||||||
import { CoreCourseSyncProvider } from './services/sync';
 | 
					 | 
				
			||||||
import { COURSE_INDEX_PATH } from '@features/course/course-lazy.module';
 | 
					import { COURSE_INDEX_PATH } from '@features/course/course-lazy.module';
 | 
				
			||||||
import { buildRegExpUrlMatcher } from '@/app/app-routing.module';
 | 
					import { buildRegExpUrlMatcher } from '@/app/app-routing.module';
 | 
				
			||||||
import { CoreCourseIndexRoutingModule } from '@features/course/course-routing.module';
 | 
					import { CoreCourseIndexRoutingModule } from '@features/course/course-routing.module';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const CORE_COURSE_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    CoreCourseProvider,
 | 
					 * Get course services.
 | 
				
			||||||
    CoreCourseHelperProvider,
 | 
					 *
 | 
				
			||||||
    CoreCourseLogHelperProvider,
 | 
					 * @returns Course services.
 | 
				
			||||||
    CoreCourseFormatDelegateService,
 | 
					 */
 | 
				
			||||||
    CoreCourseModuleDelegateService,
 | 
					export async function getCourseServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
    CoreCourseModulePrefetchDelegateService,
 | 
					    const { CoreCourseProvider } = await import('@features/course/services/course');
 | 
				
			||||||
    CoreCourseOptionsDelegateService,
 | 
					    const { CoreCourseHelperProvider } = await import('@features/course/services/course-helper');
 | 
				
			||||||
    CoreCourseOfflineProvider,
 | 
					    const { CoreCourseLogHelperProvider } = await import('@features/course/services/log-helper');
 | 
				
			||||||
    CoreCourseSyncProvider,
 | 
					    const { CoreCourseFormatDelegateService } = await import('@features/course/services/format-delegate');
 | 
				
			||||||
];
 | 
					    const { CoreCourseModuleDelegateService } = await import('@features/course/services/module-delegate');
 | 
				
			||||||
 | 
					    const { CoreCourseModulePrefetchDelegateService } = await import('@features/course/services/module-prefetch-delegate');
 | 
				
			||||||
 | 
					    const { CoreCourseOptionsDelegateService } = await import('@features/course/services/course-options-delegate');
 | 
				
			||||||
 | 
					    const { CoreCourseOfflineProvider } = await import('@features/course/services/course-offline');
 | 
				
			||||||
 | 
					    const { CoreCourseSyncProvider } = await import('@features/course/services/sync');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        CoreCourseProvider,
 | 
				
			||||||
 | 
					        CoreCourseHelperProvider,
 | 
				
			||||||
 | 
					        CoreCourseLogHelperProvider,
 | 
				
			||||||
 | 
					        CoreCourseFormatDelegateService,
 | 
				
			||||||
 | 
					        CoreCourseModuleDelegateService,
 | 
				
			||||||
 | 
					        CoreCourseModulePrefetchDelegateService,
 | 
				
			||||||
 | 
					        CoreCourseOptionsDelegateService,
 | 
				
			||||||
 | 
					        CoreCourseOfflineProvider,
 | 
				
			||||||
 | 
					        CoreCourseSyncProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const COURSE_PAGE_NAME = 'course';
 | 
					export const COURSE_PAGE_NAME = 'course';
 | 
				
			||||||
export const CONTENTS_PAGE_NAME = 'contents';
 | 
					export const CONTENTS_PAGE_NAME = 'contents';
 | 
				
			||||||
 | 
				
			|||||||
@ -41,7 +41,6 @@ import {
 | 
				
			|||||||
    CoreCourseSearchedData,
 | 
					    CoreCourseSearchedData,
 | 
				
			||||||
    CoreEnrolledCourseData,
 | 
					    CoreEnrolledCourseData,
 | 
				
			||||||
} from '@features/courses/services/courses';
 | 
					} from '@features/courses/services/courses';
 | 
				
			||||||
import { CoreArray } from '@singletons/array';
 | 
					 | 
				
			||||||
import { CoreCourseOffline } from './course-offline';
 | 
					import { CoreCourseOffline } from './course-offline';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
    CoreCourseOptionsDelegate,
 | 
					    CoreCourseOptionsDelegate,
 | 
				
			||||||
@ -1909,7 +1908,7 @@ export class CoreCourseHelperProvider {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    async deleteCourseFiles(courseId: number): Promise<void> {
 | 
					    async deleteCourseFiles(courseId: number): Promise<void> {
 | 
				
			||||||
        const sections = await CoreCourse.getSections(courseId);
 | 
					        const sections = await CoreCourse.getSections(courseId);
 | 
				
			||||||
        const modules = CoreArray.flatten(sections.map((section) => section.modules));
 | 
					        const modules = sections.map((section) => section.modules).flat();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        await Promise.all(
 | 
					        await Promise.all(
 | 
				
			||||||
            modules.map((module) => this.removeModuleStoredData(module, courseId)),
 | 
					            modules.map((module) => this.removeModuleStoredData(module, courseId)),
 | 
				
			||||||
 | 
				
			|||||||
@ -26,9 +26,6 @@ import { CorePushNotificationsDelegate } from '@features/pushnotifications/servi
 | 
				
			|||||||
import { CoreRemindersPushNotificationData } from '@features/reminders/services/reminders';
 | 
					import { CoreRemindersPushNotificationData } from '@features/reminders/services/reminders';
 | 
				
			||||||
import { CoreLocalNotifications } from '@services/local-notifications';
 | 
					import { CoreLocalNotifications } from '@services/local-notifications';
 | 
				
			||||||
import { ApplicationInit } from '@singletons';
 | 
					import { ApplicationInit } from '@singletons';
 | 
				
			||||||
import { CoreCoursesProvider } from './services/courses';
 | 
					 | 
				
			||||||
import { CoreCoursesHelperProvider } from './services/courses-helper';
 | 
					 | 
				
			||||||
import { CoreCoursesDashboardProvider } from './services/dashboard';
 | 
					 | 
				
			||||||
import { CoreCoursesCourseLinkHandler } from './services/handlers/course-link';
 | 
					import { CoreCoursesCourseLinkHandler } from './services/handlers/course-link';
 | 
				
			||||||
import { CoreCoursesIndexLinkHandler } from './services/handlers/courses-index-link';
 | 
					import { CoreCoursesIndexLinkHandler } from './services/handlers/courses-index-link';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -42,11 +39,22 @@ import {
 | 
				
			|||||||
import { CoreCoursesRequestPushClickHandler } from './services/handlers/request-push-click';
 | 
					import { CoreCoursesRequestPushClickHandler } from './services/handlers/request-push-click';
 | 
				
			||||||
import { CoreCoursesMyCoursesLinkHandler } from './services/handlers/my-courses-link';
 | 
					import { CoreCoursesMyCoursesLinkHandler } from './services/handlers/my-courses-link';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const CORE_COURSES_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    CoreCoursesProvider,
 | 
					 * Get courses services.
 | 
				
			||||||
    CoreCoursesDashboardProvider,
 | 
					 *
 | 
				
			||||||
    CoreCoursesHelperProvider,
 | 
					 * @returns Returns courses services.
 | 
				
			||||||
];
 | 
					 */
 | 
				
			||||||
 | 
					export async function getCoursesServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { CoreCoursesProvider } = await import('@features/courses/services/courses');
 | 
				
			||||||
 | 
					    const { CoreCoursesDashboardProvider } = await import('@features/courses/services/dashboard');
 | 
				
			||||||
 | 
					    const { CoreCoursesHelperProvider } = await import('@features/courses/services/courses-helper');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        CoreCoursesProvider,
 | 
				
			||||||
 | 
					        CoreCoursesDashboardProvider,
 | 
				
			||||||
 | 
					        CoreCoursesHelperProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mainMenuHomeChildrenRoutes: Routes = [
 | 
					const mainMenuHomeChildrenRoutes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -17,11 +17,19 @@ import { NgModule, Type } from '@angular/core';
 | 
				
			|||||||
import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
					import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			||||||
import { CoreEditorComponentsModule } from './components/components.module';
 | 
					import { CoreEditorComponentsModule } from './components/components.module';
 | 
				
			||||||
import { SITE_SCHEMA } from './services/database/editor';
 | 
					import { SITE_SCHEMA } from './services/database/editor';
 | 
				
			||||||
import { CoreEditorOfflineProvider } from './services/editor-offline';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const CORE_EDITOR_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    CoreEditorOfflineProvider,
 | 
					 * Get editor services.
 | 
				
			||||||
];
 | 
					 *
 | 
				
			||||||
 | 
					 * @returns Returns editor services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getEditorServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { CoreEditorOfflineProvider } = await import('@features/editor/services/editor-offline');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        CoreEditorOfflineProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
 | 
				
			|||||||
@ -61,35 +61,35 @@ import { CoreDbProviderMock } from '@features/emulator/services/db';
 | 
				
			|||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: Camera,
 | 
					            provide: Camera,
 | 
				
			||||||
            useFactory: (): Camera => CorePlatform.is('cordova') ? new Camera() : new CameraMock(),
 | 
					            useFactory: (): Camera => CorePlatform.isMobile() ? new Camera() : new CameraMock(),
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: Clipboard,
 | 
					            provide: Clipboard,
 | 
				
			||||||
            useFactory: (): Clipboard => CorePlatform.is('cordova') ? new Clipboard() : new ClipboardMock(),
 | 
					            useFactory: (): Clipboard => CorePlatform.isMobile() ? new Clipboard() : new ClipboardMock(),
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: File,
 | 
					            provide: File,
 | 
				
			||||||
            useFactory: (): File => CorePlatform.is('cordova') ? new File() : new FileMock(),
 | 
					            useFactory: (): File => CorePlatform.isMobile() ? new File() : new FileMock(),
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: FileOpener,
 | 
					            provide: FileOpener,
 | 
				
			||||||
            useFactory: (): FileOpener => CorePlatform.is('cordova') ? new FileOpener() : new FileOpenerMock(),
 | 
					            useFactory: (): FileOpener => CorePlatform.isMobile() ? new FileOpener() : new FileOpenerMock(),
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: Geolocation,
 | 
					            provide: Geolocation,
 | 
				
			||||||
            useFactory: (): Geolocation => CorePlatform.is('cordova') ? new Geolocation() : new GeolocationMock(),
 | 
					            useFactory: (): Geolocation => CorePlatform.isMobile() ? new Geolocation() : new GeolocationMock(),
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: InAppBrowser,
 | 
					            provide: InAppBrowser,
 | 
				
			||||||
            useFactory: (): InAppBrowser => CorePlatform.is('cordova') ? new InAppBrowser() : new InAppBrowserMock(),
 | 
					            useFactory: (): InAppBrowser => CorePlatform.isMobile() ? new InAppBrowser() : new InAppBrowserMock(),
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: MediaCapture,
 | 
					            provide: MediaCapture,
 | 
				
			||||||
            useFactory: (): MediaCapture => CorePlatform.is('cordova') ? new MediaCapture() : new MediaCaptureMock(),
 | 
					            useFactory: (): MediaCapture => CorePlatform.isMobile() ? new MediaCapture() : new MediaCaptureMock(),
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: Zip,
 | 
					            provide: Zip,
 | 
				
			||||||
            useFactory: (): Zip => CorePlatform.is('cordova') ? new Zip() : new ZipMock(),
 | 
					            useFactory: (): Zip => CorePlatform.isMobile() ? new Zip() : new ZipMock(),
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: LocalNotifications,
 | 
					            provide: LocalNotifications,
 | 
				
			||||||
@ -99,12 +99,12 @@ import { CoreDbProviderMock } from '@features/emulator/services/db';
 | 
				
			|||||||
        },
 | 
					        },
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: CoreDbProvider,
 | 
					            provide: CoreDbProvider,
 | 
				
			||||||
            useFactory: (): CoreDbProvider => CorePlatform.is('cordova') ? new CoreDbProvider() : new CoreDbProviderMock(),
 | 
					            useFactory: (): CoreDbProvider => CorePlatform.isMobile() ? new CoreDbProvider() : new CoreDbProviderMock(),
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            provide: APP_INITIALIZER,
 | 
					            provide: APP_INITIALIZER,
 | 
				
			||||||
            useValue: async () => {
 | 
					            useValue: async () => {
 | 
				
			||||||
                if (CorePlatform.is('cordova')) {
 | 
					                if (CorePlatform.isMobile()) {
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -55,11 +55,13 @@ class FileError {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Native APIs used in webkit window.
 | 
					 * Native APIs used in webkit window.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @deprecated since 4.4
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
interface WebkitWindow {
 | 
					interface WebkitWindow {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @deprecated
 | 
					     * @deprecated since 4.4
 | 
				
			||||||
     * @see https://www.w3.org/TR/2012/WD-file-system-api-20120417/
 | 
					     * @see https://www.w3.org/TR/2012/WD-file-system-api-20120417/
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    // eslint-disable-next-line @typescript-eslint/naming-convention
 | 
					    // eslint-disable-next-line @typescript-eslint/naming-convention
 | 
				
			||||||
@ -69,7 +71,7 @@ interface WebkitWindow {
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @deprecated
 | 
					     * @deprecated since 4.4
 | 
				
			||||||
     * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/requestFileSystem
 | 
					     * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/requestFileSystem
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    requestFileSystem(
 | 
					    requestFileSystem(
 | 
				
			||||||
@ -80,7 +82,7 @@ interface WebkitWindow {
 | 
				
			|||||||
    ): void;
 | 
					    ): void;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @deprecated
 | 
					     * @deprecated since 4.4
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    webkitRequestFileSystem(
 | 
					    webkitRequestFileSystem(
 | 
				
			||||||
        type: LocalFileSystem,
 | 
					        type: LocalFileSystem,
 | 
				
			||||||
@ -90,7 +92,7 @@ interface WebkitWindow {
 | 
				
			|||||||
    ): void;
 | 
					    ): void;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @deprecated
 | 
					     * @deprecated since 4.4
 | 
				
			||||||
     * @see https://www.w3.org/TR/2012/WD-file-system-api-20120417/
 | 
					     * @see https://www.w3.org/TR/2012/WD-file-system-api-20120417/
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    resolveLocalFileSystemURL(
 | 
					    resolveLocalFileSystemURL(
 | 
				
			||||||
@ -100,7 +102,7 @@ interface WebkitWindow {
 | 
				
			|||||||
    ): void;
 | 
					    ): void;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @deprecated
 | 
					     * @deprecated since 4.4
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    webkitResolveLocalFileSystemURL(
 | 
					    webkitResolveLocalFileSystemURL(
 | 
				
			||||||
        url: string,
 | 
					        url: string,
 | 
				
			||||||
@ -112,11 +114,13 @@ interface WebkitWindow {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Native APIs used in webkit navigator.
 | 
					 * Native APIs used in webkit navigator.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @deprecated since 4.4
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
interface WebkitNavigator {
 | 
					interface WebkitNavigator {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @deprecated
 | 
					     * @deprecated since 4.4
 | 
				
			||||||
     * @see https://developer.chrome.com/docs/apps/offline_storage/
 | 
					     * @see https://developer.chrome.com/docs/apps/offline_storage/
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    webkitPersistentStorage: {
 | 
					    webkitPersistentStorage: {
 | 
				
			||||||
 | 
				
			|||||||
@ -14,15 +14,22 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { NgModule, Type } from '@angular/core';
 | 
					import { NgModule, Type } from '@angular/core';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreEnrolDelegateService } from './services/enrol-delegate';
 | 
					/**
 | 
				
			||||||
import { CoreEnrolService } from './services/enrol';
 | 
					 * Get enrol services.
 | 
				
			||||||
import { CoreEnrolHelperService } from './services/enrol-helper';
 | 
					 *
 | 
				
			||||||
 | 
					 * @returns Returns enrol services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getEnrolServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { CoreEnrolDelegateService } = await import('@features/enrol/services/enrol-delegate');
 | 
				
			||||||
 | 
					    const { CoreEnrolService } = await import('@features/enrol/services/enrol');
 | 
				
			||||||
 | 
					    const { CoreEnrolHelperService } = await import('@features/enrol/services/enrol-helper');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const CORE_ENROL_SERVICES: Type<unknown>[] = [
 | 
					    return [
 | 
				
			||||||
    CoreEnrolService,
 | 
					        CoreEnrolService,
 | 
				
			||||||
    CoreEnrolHelperService,
 | 
					        CoreEnrolHelperService,
 | 
				
			||||||
    CoreEnrolDelegateService,
 | 
					        CoreEnrolDelegateService,
 | 
				
			||||||
];
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({})
 | 
					@NgModule({})
 | 
				
			||||||
export class CoreEnrolModule {}
 | 
					export class CoreEnrolModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -14,20 +14,29 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreFileUploaderProvider } from './services/fileuploader';
 | 
					import { CoreFileUploaderDelegate } from './services/fileuploader-delegate';
 | 
				
			||||||
import { CoreFileUploaderDelegate, CoreFileUploaderDelegateService } from './services/fileuploader-delegate';
 | 
					 | 
				
			||||||
import { CoreFileUploaderHelperProvider } from './services/fileuploader-helper';
 | 
					 | 
				
			||||||
import { CoreFileUploaderAlbumHandler } from './services/handlers/album';
 | 
					import { CoreFileUploaderAlbumHandler } from './services/handlers/album';
 | 
				
			||||||
import { CoreFileUploaderAudioHandler } from './services/handlers/audio';
 | 
					import { CoreFileUploaderAudioHandler } from './services/handlers/audio';
 | 
				
			||||||
import { CoreFileUploaderCameraHandler } from './services/handlers/camera';
 | 
					import { CoreFileUploaderCameraHandler } from './services/handlers/camera';
 | 
				
			||||||
import { CoreFileUploaderFileHandler } from './services/handlers/file';
 | 
					import { CoreFileUploaderFileHandler } from './services/handlers/file';
 | 
				
			||||||
import { CoreFileUploaderVideoHandler } from './services/handlers/video';
 | 
					import { CoreFileUploaderVideoHandler } from './services/handlers/video';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const CORE_FILEUPLOADER_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    CoreFileUploaderProvider,
 | 
					 * Get file uploaded services.
 | 
				
			||||||
    CoreFileUploaderHelperProvider,
 | 
					 *
 | 
				
			||||||
    CoreFileUploaderDelegateService,
 | 
					 * @returns Returns file uploaded services.
 | 
				
			||||||
];
 | 
					 */
 | 
				
			||||||
 | 
					export async function getFileUploadedServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { CoreFileUploaderProvider } = await import('@features/fileuploader/services/fileuploader');
 | 
				
			||||||
 | 
					    const { CoreFileUploaderDelegateService } = await import('@features/fileuploader/services/fileuploader-delegate');
 | 
				
			||||||
 | 
					    const { CoreFileUploaderHelperProvider } = await import('@features/fileuploader/services/fileuploader-helper');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        CoreFileUploaderProvider,
 | 
				
			||||||
 | 
					        CoreFileUploaderHelperProvider,
 | 
				
			||||||
 | 
					        CoreFileUploaderDelegateService,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
 | 
				
			|||||||
@ -13,15 +13,23 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { NgModule, Type } from '@angular/core';
 | 
					import { NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { CoreFilterProvider } from './services/filter';
 | 
					 | 
				
			||||||
import { CoreFilterDelegateService } from './services/filter-delegate';
 | 
					 | 
				
			||||||
import { CoreFilterHelperProvider } from './services/filter-helper';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const CORE_FILTER_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    CoreFilterProvider,
 | 
					 * Get filter services.
 | 
				
			||||||
    CoreFilterDelegateService,
 | 
					 *
 | 
				
			||||||
    CoreFilterHelperProvider,
 | 
					 * @returns Returns filter services.
 | 
				
			||||||
];
 | 
					 */
 | 
				
			||||||
 | 
					export async function getFilterServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { CoreFilterProvider } = await import('@features/filter/services/filter');
 | 
				
			||||||
 | 
					    const { CoreFilterDelegateService } = await import('@features/filter/services/filter-delegate');
 | 
				
			||||||
 | 
					    const { CoreFilterHelperProvider } = await import('@features/filter/services/filter-helper');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        CoreFilterProvider,
 | 
				
			||||||
 | 
					        CoreFilterDelegateService,
 | 
				
			||||||
 | 
					        CoreFilterHelperProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({})
 | 
					@NgModule({})
 | 
				
			||||||
export class CoreFilterModule {}
 | 
					export class CoreFilterModule {}
 | 
				
			||||||
 | 
				
			|||||||
@ -32,6 +32,7 @@ import { CoreLogger } from '@singletons/logger';
 | 
				
			|||||||
import { CoreSite } from '@classes/sites/site';
 | 
					import { CoreSite } from '@classes/sites/site';
 | 
				
			||||||
import { CoreCourseHelper } from '@features/course/services/course-helper';
 | 
					import { CoreCourseHelper } from '@features/course/services/course-helper';
 | 
				
			||||||
import { firstValueFrom } from 'rxjs';
 | 
					import { firstValueFrom } from 'rxjs';
 | 
				
			||||||
 | 
					import { CoreBlockHelper } from '@features/block/services/block-helper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Helper service to provide filter functionalities.
 | 
					 * Helper service to provide filter functionalities.
 | 
				
			||||||
@ -246,7 +247,7 @@ export class CoreFilterHelperProvider {
 | 
				
			|||||||
                const getFilters = () => this.getCourseContexts(instanceId, siteId);
 | 
					                const getFilters = () => this.getCourseContexts(instanceId, siteId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                return await this.getCacheableFilters(contextLevel, instanceId, getFilters, options, site);
 | 
					                return await this.getCacheableFilters(contextLevel, instanceId, getFilters, options, site);
 | 
				
			||||||
            } else if (contextLevel == 'block' && courseId && CoreCourse.canGetCourseBlocks(site)) {
 | 
					            } else if (contextLevel == 'block' && courseId && CoreBlockHelper.canGetCourseBlocks(site)) {
 | 
				
			||||||
                // Get all the course blocks filters with a single call to decrease number of WS calls.
 | 
					                // Get all the course blocks filters with a single call to decrease number of WS calls.
 | 
				
			||||||
                const getFilters = () => this.getBlocksContexts(courseId, siteId);
 | 
					                const getFilters = () => this.getBlocksContexts(courseId, siteId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -21,8 +21,7 @@ import { CoreCourseOptionsDelegate } from '@features/course/services/course-opti
 | 
				
			|||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
import { CoreUserDelegate } from '@features/user/services/user-delegate';
 | 
					import { CoreUserDelegate } from '@features/user/services/user-delegate';
 | 
				
			||||||
import { PARTICIPANTS_PAGE_NAME } from '@features/user/user.module';
 | 
					import { PARTICIPANTS_PAGE_NAME } from '@features/user/user.module';
 | 
				
			||||||
import { CoreGradesProvider } from './services/grades';
 | 
					import { GRADES_PAGE_NAME, GRADES_PARTICIPANTS_PAGE_NAME } from './services/grades-helper';
 | 
				
			||||||
import { CoreGradesHelperProvider, GRADES_PAGE_NAME, GRADES_PARTICIPANTS_PAGE_NAME } from './services/grades-helper';
 | 
					 | 
				
			||||||
import { CoreGradesCourseOptionHandler } from './services/handlers/course-option';
 | 
					import { CoreGradesCourseOptionHandler } from './services/handlers/course-option';
 | 
				
			||||||
import { CoreGradesOverviewLinkHandler } from './services/handlers/overview-link';
 | 
					import { CoreGradesOverviewLinkHandler } from './services/handlers/overview-link';
 | 
				
			||||||
import { CoreGradesUserHandler } from './services/handlers/user';
 | 
					import { CoreGradesUserHandler } from './services/handlers/user';
 | 
				
			||||||
@ -33,10 +32,20 @@ import { conditionalRoutes } from '@/app/app-routing.module';
 | 
				
			|||||||
import { COURSE_INDEX_PATH } from '@features/course/course-lazy.module';
 | 
					import { COURSE_INDEX_PATH } from '@features/course/course-lazy.module';
 | 
				
			||||||
import { CoreScreen } from '@services/screen';
 | 
					import { CoreScreen } from '@services/screen';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const CORE_GRADES_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    CoreGradesProvider,
 | 
					 * Get grades services.
 | 
				
			||||||
    CoreGradesHelperProvider,
 | 
					 *
 | 
				
			||||||
];
 | 
					 * @returns Returns grades services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getGradesServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { CoreGradesProvider } = await import('@features/grades/services/grades');
 | 
				
			||||||
 | 
					    const { CoreGradesHelperProvider } = await import('@features/grades/services/grades-helper');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        CoreGradesProvider,
 | 
				
			||||||
 | 
					        CoreGradesHelperProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mainMenuChildrenRoutes: Routes = [
 | 
					const mainMenuChildrenRoutes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -18,12 +18,20 @@ import { CorePluginFileDelegate } from '@services/plugin-file-delegate';
 | 
				
			|||||||
import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
					import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			||||||
import { CoreH5PComponentsModule } from './components/components.module';
 | 
					import { CoreH5PComponentsModule } from './components/components.module';
 | 
				
			||||||
import { SITE_SCHEMA } from './services/database/h5p';
 | 
					import { SITE_SCHEMA } from './services/database/h5p';
 | 
				
			||||||
import { CoreH5PProvider } from './services/h5p';
 | 
					 | 
				
			||||||
import { CoreH5PPluginFileHandler } from './services/handlers/pluginfile';
 | 
					import { CoreH5PPluginFileHandler } from './services/handlers/pluginfile';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const CORE_H5P_SERVICES: Type<unknown>[] = [
 | 
					/**
 | 
				
			||||||
    CoreH5PProvider,
 | 
					 * Get H5P services.
 | 
				
			||||||
];
 | 
					 *
 | 
				
			||||||
 | 
					 * @returns Returns H5P services.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getH5PServices(): Promise<Type<unknown>[]> {
 | 
				
			||||||
 | 
					    const { CoreH5PProvider } = await import('@features/h5p/services/h5p');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [
 | 
				
			||||||
 | 
					        CoreH5PProvider,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user