From ff24186a3296167ff4bf3955c9076706aef5c415 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Mon, 23 Nov 2020 12:29:56 +0100 Subject: [PATCH] MOBILE-3565 core: Listen to some login events to apply customizations --- config.xml | 1 + src/app/app.component.ts | 77 ++++++++++++++++++++++++++++++++++- src/core/services/lang.ts | 14 +++++++ src/core/singletons/events.ts | 5 +++ 4 files changed, 96 insertions(+), 1 deletion(-) diff --git a/config.xml b/config.xml index 6c14fa033..66c859986 100644 --- a/config.xml +++ b/config.xml @@ -31,6 +31,7 @@ + diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 1bd3a63de..0135f049a 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -17,9 +17,16 @@ import { NavController } from '@ionic/angular'; import { CoreLangProvider } from '@services/lang'; import { CoreLoginHelperProvider } from '@features/login/services/login.helper'; -import { CoreEvents, CoreEventSessionExpiredData } from '@singletons/events'; +import { + CoreEvents, + CoreEventSessionExpiredData, + CoreEventSiteAddedData, + CoreEventSiteData, + CoreEventSiteUpdatedData, +} from '@singletons/events'; import { Network, NgZone, Platform } from '@singletons/core.singletons'; import { CoreApp } from '@services/app'; +import { CoreSites } from '@services/sites'; @Component({ selector: 'app-root', @@ -37,6 +44,14 @@ export class AppComponent implements OnInit { /** * Component being initialized. + * + * @todo Review all old code to see if something is missing: + * - IAB events listening. + * - Platform pause/resume subscriptions. + * - handleOpenURL and openWindowSafely. + * - Screen orientation events (probably it can be removed). + * - Back button registering to close modal first. + * - Note: HideKeyboardFormAccessoryBar has been moved to config.xml. */ ngOnInit(): void { CoreEvents.on(CoreEvents.LOGOUT, () => { @@ -55,9 +70,59 @@ export class AppComponent implements OnInit { this.loginHelper.sessionExpired(data); }); + // Listen for passwordchange and usernotfullysetup events to open InAppBrowser. + CoreEvents.on(CoreEvents.PASSWORD_CHANGE_FORCED, (data: CoreEventSiteData) => { + this.loginHelper.passwordChangeForced(data.siteId!); + }); + CoreEvents.on(CoreEvents.USER_NOT_FULLY_SETUP, (data: CoreEventSiteData) => { + this.loginHelper.openInAppForEdit(data.siteId!, '/user/edit.php', 'core.usernotfullysetup'); + }); + + // Listen for sitepolicynotagreed event to accept the site policy. + CoreEvents.on(CoreEvents.SITE_POLICY_NOT_AGREED, (data: CoreEventSiteData) => { + this.loginHelper.sitePolicyNotAgreed(data.siteId); + }); + + CoreEvents.on(CoreEvents.LOGIN, async (data: CoreEventSiteData) => { + if (data.siteId) { + const site = await CoreSites.instance.getSite(data.siteId); + const info = site.getInfo(); + if (info) { + // Add version classes to body. + this.removeVersionClass(); + this.addVersionClass(CoreSites.instance.getReleaseNumber(info.release || '')); + } + } + + this.loadCustomStrings(); + }); + + CoreEvents.on(CoreEvents.SITE_UPDATED, (data: CoreEventSiteUpdatedData) => { + if (data.siteId == CoreSites.instance.getCurrentSiteId()) { + this.loadCustomStrings(); + + // Add version classes to body. + this.removeVersionClass(); + this.addVersionClass(CoreSites.instance.getReleaseNumber(data.release || '')); + } + }); + + CoreEvents.on(CoreEvents.SITE_ADDED, (data: CoreEventSiteAddedData) => { + if (data.siteId == CoreSites.instance.getCurrentSiteId()) { + this.loadCustomStrings(); + + // Add version classes to body. + this.removeVersionClass(); + this.addVersionClass(CoreSites.instance.getReleaseNumber(data.release || '')); + } + }); + this.onPlatformReady(); } + /** + * Async init function on platform ready. + */ protected async onPlatformReady(): Promise { await Platform.instance.ready(); @@ -83,6 +148,16 @@ export class AppComponent implements OnInit { }); } + /** + * Load custom lang strings. This cannot be done inside the lang provider because it causes circular dependencies. + */ + protected loadCustomStrings(): void { + const currentSite = CoreSites.instance.getCurrentSite(); + if (currentSite) { + this.langProvider.loadCustomStringsFromSite(currentSite); + } + } + /** * Convenience function to add version to body classes. * diff --git a/src/core/services/lang.ts b/src/core/services/lang.ts index e1e0d6879..e4663d0a7 100644 --- a/src/core/services/lang.ts +++ b/src/core/services/lang.ts @@ -21,6 +21,7 @@ import { CoreConfig } from '@services/config'; import { makeSingleton, Translate, Platform } from '@singletons/core.singletons'; import * as moment from 'moment'; +import { CoreSite } from '../classes/site'; /* * Service to handle language features, like changing the current language. @@ -311,6 +312,19 @@ export class CoreLangProvider { }); } + /** + * Loads custom strings obtained from site. + * + * @param currentSite Current site object. + */ + loadCustomStringsFromSite(currentSite: CoreSite): void { + const customStrings = currentSite.getStoredConfig('tool_mobile_customlangstrings'); + + if (typeof customStrings != 'undefined') { + this.loadCustomStrings(customStrings); + } + } + /** * Load certain custom strings. * diff --git a/src/core/singletons/events.ts b/src/core/singletons/events.ts index e58dc9740..f7033acd0 100644 --- a/src/core/singletons/events.ts +++ b/src/core/singletons/events.ts @@ -205,6 +205,11 @@ export type CoreEventSiteData = { */ export type CoreEventSiteUpdatedData = CoreEventSiteData & CoreSiteInfoResponse; +/** + * Data passed to SITE_ADDED event. + */ +export type CoreEventSiteAddedData = CoreEventSiteData & CoreSiteInfoResponse; + /** * Data passed to SESSION_EXPIRED event. */