MOBILE-3565 core: Listen to some login events to apply customizations

main
Pau Ferrer Ocaña 2020-11-23 12:29:56 +01:00
parent e070c7864e
commit ff24186a32
4 changed files with 96 additions and 1 deletions

View File

@ -31,6 +31,7 @@
<preference name="BackupWebStorage" value="none" />
<preference name="ScrollEnabled" value="false" />
<preference name="KeyboardDisplayRequiresUserAction" value="false" />
<preference name="HideKeyboardFormAccessoryBar" value="false" />
<preference name="AllowInlineMediaPlayback" value="true" />
<preference name="LoadUrlTimeoutValue" value="60000" />
<preference name="load-url-timeout" value="60000" />

View File

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

View File

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

View File

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