From 7e67fce585ec4f1670cfdbae08c77041904aa1d0 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 25 Aug 2017 13:12:09 +0200 Subject: [PATCH] MOBILE-2210 core: Fix URLs to new site when current has remote addons --- .../contentlinks/services/helper.js | 24 ++++++++++++------ www/core/components/login/controllers/init.js | 25 ++++++++++++------- www/core/main.js | 24 +++++++++++------- 3 files changed, 47 insertions(+), 26 deletions(-) diff --git a/www/core/components/contentlinks/services/helper.js b/www/core/components/contentlinks/services/helper.js index a9b83428c04..e64326cd7e9 100644 --- a/www/core/components/contentlinks/services/helper.js +++ b/www/core/components/contentlinks/services/helper.js @@ -23,7 +23,7 @@ angular.module('mm.core.contentlinks') */ .factory('$mmContentLinksHelper', function($log, $ionicHistory, $state, $mmSite, $mmContentLinksDelegate, $mmUtil, $translate, $mmCourseHelper, $mmSitesManager, $q, $mmLoginHelper, $mmText, mmCoreConfigConstants, $mmCourse, $mmApp, - $mmContentLinkHandlerFactory) { + $mmContentLinkHandlerFactory, $mmAddonManager, mmCoreNoSiteId) { $log = $log.getInstance('$mmContentLinksHelper'); @@ -220,7 +220,13 @@ angular.module('mm.core.contentlinks') return $mmSitesManager.checkSite(siteUrl).then(function(result) { // Site exists. We'll allow to add it. var promise, - ssoNeeded = $mmLoginHelper.isSSOLoginNeeded(result.code); + ssoNeeded = $mmLoginHelper.isSSOLoginNeeded(result.code), + hasRemoteAddonsLoaded = false, + stateParams = { + siteurl: result.siteurl, + username: username, + urltoopen: url + }; modal.dismiss(); // Dismiss modal so it doesn't collide with confirms. @@ -231,6 +237,12 @@ angular.module('mm.core.contentlinks') // Ask the user before changing site. promise = $mmUtil.showConfirm($translate('mm.contentlinks.confirmurlothersite')).then(function() { if (!ssoNeeded) { + hasRemoteAddonsLoaded = $mmAddonManager.hasRemoteAddonsLoaded(); + if (hasRemoteAddonsLoaded) { + // Store the redirect since logout will restart the app. + $mmApp.storeRedirect(mmCoreNoSiteId, 'mm_login.credentials', stateParams); + } + return $mmSitesManager.logout().catch(function() { // Ignore errors (shouldn't happen). }); @@ -242,12 +254,8 @@ angular.module('mm.core.contentlinks') if (ssoNeeded) { $mmLoginHelper.confirmAndOpenBrowserForSSOLogin( result.siteurl, result.code, result.service, result.config && result.config.launchurl); - } else { - $state.go('mm_login.credentials', { - siteurl: result.siteurl, - username: username, - urltoopen: url - }); + } else if (!hasRemoteAddonsLoaded) { + $state.go('mm_login.credentials', stateParams); } }); diff --git a/www/core/components/login/controllers/init.js b/www/core/components/login/controllers/init.js index 48c0fe01f58..7a9ad0f1e57 100644 --- a/www/core/components/login/controllers/init.js +++ b/www/core/components/login/controllers/init.js @@ -21,7 +21,8 @@ angular.module('mm.core.login') * @ngdoc controller * @name mmLoginInitCtrl */ -.controller('mmLoginInitCtrl', function($log, $ionicHistory, $state, $mmSitesManager, $mmSite, $mmApp, $mmLoginHelper) { +.controller('mmLoginInitCtrl', function($log, $ionicHistory, $state, $mmSitesManager, $mmSite, $mmApp, $mmLoginHelper, + mmCoreNoSiteId) { $log = $log.getInstance('mmLoginInitCtrl'); @@ -41,14 +42,20 @@ angular.module('mm.core.login') // Only accept the redirect if it was stored less than 20 seconds ago. if (new Date().getTime() - redirectData.timemodified < 20000) { - return $mmSitesManager.loadSite(redirectData.siteid).then(function() { - if (!$mmLoginHelper.isSiteLoggedOut(redirectData.state, redirectData.params)) { - $state.go(redirectData.state, redirectData.params); - } - }).catch(function() { - // Site doesn't exist. - loadCurrent(); - }); + if (redirectData.siteid != mmCoreNoSiteId) { + // The redirect is pointing to a site, load it. + return $mmSitesManager.loadSite(redirectData.siteid).then(function() { + if (!$mmLoginHelper.isSiteLoggedOut(redirectData.state, redirectData.params)) { + $state.go(redirectData.state, redirectData.params); + } + }).catch(function() { + // Site doesn't exist. + loadCurrent(); + }); + } else { + // No site to load, just open the state. + return $state.go(redirectData.state, redirectData.params); + } } } diff --git a/www/core/main.js b/www/core/main.js index 7889fd96dfa..da2ddf938e2 100644 --- a/www/core/main.js +++ b/www/core/main.js @@ -25,6 +25,7 @@ angular.module('mm.core', ['pascalprecht.translate']) .constant('mmCoreSecondsHour', 3600) .constant('mmCoreSecondsMinute', 60) .constant('mmCoreDontShowError', 'mmCoreDontShowError') // Pass it to reject functions to indicate that no error should be shown. +.constant('mmCoreNoSiteId', 'NoSite') // States for downloading files/modules. .constant('mmCoreDownloaded', 'downloaded') @@ -96,19 +97,24 @@ angular.module('mm.core', ['pascalprecht.translate']) cache: false, template: '', controller: function($scope, $state, $stateParams, $mmSite, $mmSitesManager, $ionicHistory, $mmAddonManager, $mmApp, - $mmLoginHelper) { + $mmLoginHelper, mmCoreNoSiteId) { $ionicHistory.nextViewOptions({disableBack: true}); function loadSiteAndGo() { - $mmSitesManager.loadSite($stateParams.siteid).then(function() { - if (!$mmLoginHelper.isSiteLoggedOut($stateParams.state, $stateParams.params)) { - $state.go($stateParams.state, $stateParams.params); - } - }, function() { - // Site doesn't exist. - $state.go('mm_login.sites'); - }); + if ($stateParams.siteid == mmCoreNoSiteId) { + // No site to load, just go to the state. + $state.go($stateParams.state, $stateParams.params); + } else { + $mmSitesManager.loadSite($stateParams.siteid).then(function() { + if (!$mmLoginHelper.isSiteLoggedOut($stateParams.state, $stateParams.params)) { + $state.go($stateParams.state, $stateParams.params); + } + }, function() { + // Site doesn't exist. + $state.go('mm_login.sites'); + }); + } } $scope.$on('$ionicView.enter', function() {