Merge pull request #3957 from crazyserver/MOBILE-3947

Mobile 3947
main
Dani Palou 2024-03-07 13:30:35 +01:00 committed by GitHub
commit 8a1774bd24
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
119 changed files with 1079 additions and 897 deletions

22
package-lock.json generated
View File

@ -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"
}, },

View File

@ -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",

View File

@ -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 = [
{ {

View File

@ -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,

View File

@ -25,8 +25,5 @@ import { AddonBlockActivityModulesComponent } from './activitymodules/activitymo
imports: [ imports: [
CoreSharedModule, CoreSharedModule,
], ],
exports: [
AddonBlockActivityModulesComponent,
],
}) })
export class AddonBlockActivityModulesComponentsModule {} export class AddonBlockActivityModulesComponentsModule {}

View File

@ -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,

View File

@ -24,8 +24,5 @@ import { AddonBlockActivityResultsComponent } from './activityresults/activityre
imports: [ imports: [
CoreSharedModule, CoreSharedModule,
], ],
exports: [
AddonBlockActivityResultsComponent,
],
}) })
export class AddonBlockActivityResultsComponentsModule {} export class AddonBlockActivityResultsComponentsModule {}

View File

@ -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,

View File

@ -24,8 +24,5 @@ import { AddonBlockBadgesComponent } from './badges/badges';
imports: [ imports: [
CoreSharedModule, CoreSharedModule,
], ],
exports: [
AddonBlockBadgesComponent,
],
}) })
export class AddonBlockBadgesComponentsModule {} export class AddonBlockBadgesComponentsModule {}

View File

@ -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,

View File

@ -24,8 +24,5 @@ import { AddonBlockBlogMenuComponent } from './blogmenu/blogmenu';
imports: [ imports: [
CoreSharedModule, CoreSharedModule,
], ],
exports: [
AddonBlockBlogMenuComponent,
],
}) })
export class AddonBlockBlogMenuComponentsModule {} export class AddonBlockBlogMenuComponentsModule {}

View File

@ -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,

View File

@ -24,8 +24,5 @@ import { AddonBlockBlogRecentComponent } from './blogrecent/blogrecent';
imports: [ imports: [
CoreSharedModule, CoreSharedModule,
], ],
exports: [
AddonBlockBlogRecentComponent,
],
}) })
export class AddonBlockBlogRecentComponentsModule {} export class AddonBlockBlogRecentComponentsModule {}

View File

@ -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,

View File

@ -24,8 +24,5 @@ import { AddonBlockBlogTagsComponent } from './blogtags/blogtags';
imports: [ imports: [
CoreSharedModule, CoreSharedModule,
], ],
exports: [
AddonBlockBlogTagsComponent,
],
}) })
export class AddonBlockBlogTagsComponentsModule {} export class AddonBlockBlogTagsComponentsModule {}

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -26,8 +26,5 @@ import { AddonBlockMyOverviewComponent } from './myoverview/myoverview';
CoreSharedModule, CoreSharedModule,
CoreCoursesComponentsModule, CoreCoursesComponentsModule,
], ],
exports: [
AddonBlockMyOverviewComponent,
],
}) })
export class AddonBlockMyOverviewComponentsModule {} export class AddonBlockMyOverviewComponentsModule {}

View File

@ -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,

View File

@ -24,8 +24,5 @@ import { AddonBlockNewsItemsComponent } from './newsitems/newsitems';
imports: [ imports: [
CoreSharedModule, CoreSharedModule,
], ],
exports: [
AddonBlockNewsItemsComponent,
],
}) })
export class AddonBlockNewsItemsComponentsModule {} export class AddonBlockNewsItemsComponentsModule {}

View File

@ -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,

View File

@ -24,8 +24,5 @@ import { AddonBlockOnlineUsersComponent } from './onlineusers/onlineusers';
imports: [ imports: [
CoreSharedModule, CoreSharedModule,
], ],
exports: [
AddonBlockOnlineUsersComponent,
],
}) })
export class AddonBlockOnlineUsersComponentsModule {} export class AddonBlockOnlineUsersComponentsModule {}

View File

@ -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,

View File

@ -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,

View File

@ -24,8 +24,5 @@ import { AddonBlockRecentActivityComponent } from './recentactivity/recentactivi
imports: [ imports: [
CoreSharedModule, CoreSharedModule,
], ],
exports: [
AddonBlockRecentActivityComponent,
],
}) })
export class AddonBlockRecentActivityComponentsModule {} export class AddonBlockRecentActivityComponentsModule {}

View File

@ -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,

View File

@ -27,8 +27,5 @@ import { AddonBlockRecentlyAccessedCoursesComponent } from './recentlyaccessedco
CoreSharedModule, CoreSharedModule,
CoreCoursesComponentsModule, CoreCoursesComponentsModule,
], ],
exports: [
AddonBlockRecentlyAccessedCoursesComponent,
],
}) })
export class AddonBlockRecentlyAccessedCoursesComponentsModule {} export class AddonBlockRecentlyAccessedCoursesComponentsModule {}

View File

@ -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,

View File

@ -27,8 +27,5 @@ import { AddonBlockRecentlyAccessedItemsComponent } from './recentlyaccesseditem
CoreSharedModule, CoreSharedModule,
CoreCoursesComponentsModule, CoreCoursesComponentsModule,
], ],
exports: [
AddonBlockRecentlyAccessedItemsComponent,
],
}) })
export class AddonBlockRecentlyAccessedItemsComponentsModule {} export class AddonBlockRecentlyAccessedItemsComponentsModule {}

View File

@ -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,

View File

@ -24,8 +24,5 @@ import { AddonBlockRssClientComponent } from './rssclient/rssclient';
imports: [ imports: [
CoreSharedModule, CoreSharedModule,
], ],
exports: [
AddonBlockRssClientComponent,
],
}) })
export class AddonBlockRssClientComponentsModule {} export class AddonBlockRssClientComponentsModule {}

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -27,8 +27,5 @@ import { AddonBlockSiteMainMenuComponent } from './sitemainmenu/sitemainmenu';
CoreSharedModule, CoreSharedModule,
CoreCourseComponentsModule, CoreCourseComponentsModule,
], ],
exports: [
AddonBlockSiteMainMenuComponent,
],
}) })
export class AddonBlockSiteMainMenuComponentsModule {} export class AddonBlockSiteMainMenuComponentsModule {}

View File

@ -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,

View File

@ -27,8 +27,5 @@ import { AddonBlockStarredCoursesComponent } from './starredcourses/starredcours
CoreSharedModule, CoreSharedModule,
CoreCoursesComponentsModule, CoreCoursesComponentsModule,
], ],
exports: [
AddonBlockStarredCoursesComponent,
],
}) })
export class AddonBlockStarredCoursesComponentsModule {} export class AddonBlockStarredCoursesComponentsModule {}

View File

@ -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,

View File

@ -24,8 +24,5 @@ import { AddonBlockTagsComponent } from './tags/tags';
imports: [ imports: [
CoreSharedModule, CoreSharedModule,
], ],
exports: [
AddonBlockTagsComponent,
],
}) })
export class AddonBlockTagsComponentsModule {} export class AddonBlockTagsComponentsModule {}

View File

@ -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,

View File

@ -29,9 +29,5 @@ import { CoreSearchComponentsModule } from '@features/search/components/componen
CoreSharedModule, CoreSharedModule,
CoreSearchComponentsModule, CoreSearchComponentsModule,
], ],
exports: [
AddonBlockTimelineComponent,
AddonBlockTimelineEventsComponent,
],
}) })
export class AddonBlockTimelineComponentsModule {} export class AddonBlockTimelineComponentsModule {}

View File

@ -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,

View File

@ -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 = [
{ {

View File

@ -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: [

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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);

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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';

View File

@ -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();
} }
/** /**

View File

@ -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.

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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];

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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 = [
{ {

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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: [

View File

@ -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 {}

View File

@ -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.
* *

View File

@ -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);
} }
/** /**

View File

@ -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();
} }
/** /**

View File

@ -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,
];
} }
} }

View File

@ -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: [

View File

@ -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';

View File

@ -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)),

View File

@ -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 = [
{ {

View File

@ -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: [

View File

@ -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;
} }

View File

@ -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: {

View File

@ -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 {}

View File

@ -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: [

View File

@ -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 {}

View File

@ -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);

View File

@ -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 = [
{ {

View File

@ -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