diff --git a/src/core/contentlinks/providers/helper.ts b/src/core/contentlinks/providers/helper.ts index c160a86b1..1ee1ea864 100644 --- a/src/core/contentlinks/providers/helper.ts +++ b/src/core/contentlinks/providers/helper.ts @@ -27,6 +27,7 @@ import { CoreLoginHelperProvider } from '../../login/providers/helper'; import { CoreContentLinksDelegate, CoreContentLinksAction } from './delegate'; import { CoreConstants } from '../../constants'; import { CoreConfigConstants } from '../../../configconstants'; +import { CoreSitePluginsProvider } from '../../siteplugins/providers/siteplugins'; /** * Service that provides some features regarding content links. @@ -38,7 +39,8 @@ export class CoreContentLinksHelperProvider { constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private loginHelper: CoreLoginHelperProvider, private contentLinksDelegate: CoreContentLinksDelegate, private appProvider: CoreAppProvider, private domUtils: CoreDomUtilsProvider, private urlUtils: CoreUrlUtilsProvider, private translate: TranslateService, - private initDelegate: CoreInitDelegate, eventsProvider: CoreEventsProvider, private textUtils: CoreTextUtilsProvider) { + private initDelegate: CoreInitDelegate, eventsProvider: CoreEventsProvider, private textUtils: CoreTextUtilsProvider, + private sitePluginsProvider: CoreSitePluginsProvider) { this.logger = logger.getInstance('CoreContentLinksHelperProvider'); // Listen for app launched URLs. If we receive one, check if it's a content link. @@ -144,7 +146,6 @@ export class CoreContentLinksHelperProvider { return this.sitesProvider.checkSite(siteUrl).then((result) => { // Site exists. We'll allow to add it. const ssoNeeded = this.loginHelper.isSSOLoginNeeded(result.code), - hasRemoteAddonsLoaded = false, pageName = 'CoreLoginCredentialsPage', pageParams = { siteUrl: result.siteUrl, @@ -152,7 +153,8 @@ export class CoreContentLinksHelperProvider { urlToOpen: url, siteConfig: result.config }; - let promise; + let promise, + hasSitePluginsLoaded = false; modal.dismiss(); // Dismiss modal so it doesn't collide with confirms. @@ -164,8 +166,8 @@ export class CoreContentLinksHelperProvider { const confirmMsg = this.translate.instant('core.contentlinks.confirmurlothersite'); promise = this.domUtils.showConfirm(confirmMsg).then(() => { if (!ssoNeeded) { - // @todo hasRemoteAddonsLoaded = $mmAddonManager.hasRemoteAddonsLoaded(); @todo - if (hasRemoteAddonsLoaded) { + hasSitePluginsLoaded = this.sitePluginsProvider.hasSitePluginsLoaded; + if (hasSitePluginsLoaded) { // Store the redirect since logout will restart the app. this.appProvider.storeRedirect(CoreConstants.NO_SITE_ID, pageName, pageParams); } @@ -181,7 +183,7 @@ export class CoreContentLinksHelperProvider { if (ssoNeeded) { this.loginHelper.confirmAndOpenBrowserForSSOLogin( result.siteUrl, result.code, result.service, result.config && result.config.launchurl); - } else if (!hasRemoteAddonsLoaded) { + } else if (!hasSitePluginsLoaded) { this.appProvider.getRootNavController().setRoot(pageName, pageParams); } }); diff --git a/src/core/login/providers/helper.ts b/src/core/login/providers/helper.ts index d75c7f3e5..41443cce2 100644 --- a/src/core/login/providers/helper.ts +++ b/src/core/login/providers/helper.ts @@ -26,8 +26,9 @@ import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreUrlUtilsProvider } from '@providers/utils/url'; import { CoreUtilsProvider } from '@providers/utils/utils'; +import { CoreSitePluginsProvider } from '@core/siteplugins/providers/siteplugins'; import { CoreConfigConstants } from '../../../configconstants'; -import { CoreConstants } from '../../constants'; +import { CoreConstants } from '@core/constants'; import { Md5 } from 'ts-md5/dist/md5'; /** @@ -80,7 +81,7 @@ export class CoreLoginHelperProvider { private wsProvider: CoreWSProvider, private translate: TranslateService, private textUtils: CoreTextUtilsProvider, private eventsProvider: CoreEventsProvider, private appProvider: CoreAppProvider, private utils: CoreUtilsProvider, private urlUtils: CoreUrlUtilsProvider, private configProvider: CoreConfigProvider, private platform: Platform, - private initDelegate: CoreInitDelegate) { + private initDelegate: CoreInitDelegate, private sitePluginsProvider: CoreSitePluginsProvider) { this.logger = logger.getInstance('CoreLoginHelper'); } @@ -768,10 +769,15 @@ export class CoreLoginHelperProvider { if (this.sitesProvider.isLoggedIn()) { if (siteId && siteId != this.sitesProvider.getCurrentSiteId()) { // Target page belongs to a different site. Change site. - // @todo Store redirect once we have addon manager. - this.sitesProvider.logout().then(() => { - this.loadSiteAndPage(page, params, siteId); - }); + if (this.sitePluginsProvider.hasSitePluginsLoaded) { + // The site has site plugins so the app will be restarted. Store the data and logout. + this.appProvider.storeRedirect(siteId, page, params); + this.sitesProvider.logout(); + } else { + this.sitesProvider.logout().then(() => { + this.loadSiteAndPage(page, params, siteId); + }); + } } else { this.loadPageInMainMenu(page, params); } diff --git a/src/core/siteplugins/providers/helper.ts b/src/core/siteplugins/providers/helper.ts index 7ab692c38..8ecdac53a 100644 --- a/src/core/siteplugins/providers/helper.ts +++ b/src/core/siteplugins/providers/helper.ts @@ -52,7 +52,6 @@ import { CoreSitePluginsUserProfileFieldHandler } from '../classes/user-profile- @Injectable() export class CoreSitePluginsHelperProvider { protected logger; - protected hasSitePluginsLoaded = false; constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private injector: Injector, private mainMenuDelegate: CoreMainMenuDelegate, private moduleDelegate: CoreCourseModuleDelegate, @@ -80,7 +79,7 @@ export class CoreSitePluginsHelperProvider { // Unload plugins on logout if any. eventsProvider.on(CoreEventsProvider.LOGOUT, () => { - if (this.hasSitePluginsLoaded) { + if (this.sitePluginsProvider.hasSitePluginsLoaded) { // Temporary fix. Reload the page to unload all plugins. window.location.reload(); } @@ -251,7 +250,7 @@ export class CoreSitePluginsHelperProvider { plugin.parsedHandlers = JSON.parse(plugin.handlers); } - this.hasSitePluginsLoaded = true; + this.sitePluginsProvider.hasSitePluginsLoaded = true; // Register all the handlers. for (const name in plugin.parsedHandlers) { diff --git a/src/core/siteplugins/providers/siteplugins.ts b/src/core/siteplugins/providers/siteplugins.ts index fc868077e..3ca664d7c 100644 --- a/src/core/siteplugins/providers/siteplugins.ts +++ b/src/core/siteplugins/providers/siteplugins.ts @@ -62,6 +62,7 @@ export class CoreSitePluginsProvider { protected logger; protected sitePlugins: {[name: string]: CoreSitePluginsHandler} = {}; // Site plugins registered. + hasSitePluginsLoaded = false; constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private utils: CoreUtilsProvider, private langProvider: CoreLangProvider, private appProvider: CoreAppProvider, private platform: Platform,