From 6503555a1bb5d28940ef21e85817ba2d25a133cc Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 2 Feb 2016 16:22:57 +0100 Subject: [PATCH] MOBILE-1399 site: Fix some DB errors due to logout --- www/addons/calendar/services/calendar.js | 9 ++++++++ .../mod_scorm/services/scorm_offline.js | 5 ++++ www/core/components/user/services/user.js | 23 ++++++++++++++----- www/core/lib/sitesmanager.js | 5 +++- 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/www/addons/calendar/services/calendar.js b/www/addons/calendar/services/calendar.js index 0c02d43b379..3db7090af95 100644 --- a/www/addons/calendar/services/calendar.js +++ b/www/addons/calendar/services/calendar.js @@ -175,6 +175,10 @@ angular.module('mm.addons.calendar') * @return {Promise} Promise resolved when the event data is retrieved. */ self.getEventFromLocalDb = function(id) { + if (!$mmSite.isLoggedIn()) { + // Not logged in, we can't get the site DB. User logged out or session expired while an operation was ongoing. + return $q.reject(); + } return $mmSite.getDb().get(mmaCalendarEventsStore, id); }; @@ -426,6 +430,11 @@ angular.module('mm.addons.calendar') * @return {Promise} Promise resolved when the notification is updated. */ self.updateNotificationTime = function(event, time) { + if (!$mmSite.isLoggedIn()) { + // Not logged in, we can't get the site DB. User logged out or session expired while an operation was ongoing. + return $q.reject(); + } + var db = $mmSite.getDb(); event.notificationtime = time; diff --git a/www/addons/mod_scorm/services/scorm_offline.js b/www/addons/mod_scorm/services/scorm_offline.js index 35bd0995aec..3efd34b0431 100644 --- a/www/addons/mod_scorm/services/scorm_offline.js +++ b/www/addons/mod_scorm/services/scorm_offline.js @@ -685,6 +685,11 @@ angular.module('mm.addons.mod_scorm') userId = userId || $mmSite.getUserId(); scoData = scoData || {}; + if (!$mmSite.isLoggedIn()) { + // Not logged in, we can't get the site DB. User logged out or session expired while an operation was ongoing. + return false; + } + var lessonStatusInserted = false, scoUserData = scoData.userdata || {}, db = $mmSite.getDb(); diff --git a/www/core/components/user/services/user.js b/www/core/components/user/services/user.js index 559211832c3..6bee52a42ed 100644 --- a/www/core/components/user/services/user.js +++ b/www/core/components/user/services/user.js @@ -46,9 +46,13 @@ angular.module('mm.core.user') * @return {Promise} Promise resolve when the user is deleted. */ self.deleteStoredUser = function(id) { - var db = $mmSite.getDb(); + if (!$mmSite.isLoggedIn()) { + // Not logged in, we can't get the site DB. User logged out or session expired while an operation was ongoing. + return $q.reject(); + } + self.invalidateUserCache(id); // Invalidate WS calls. - return db.remove(mmCoreUsersStore, parseInt(id)); + return $mmSite.getDb().remove(mmCoreUsersStore, parseInt(id)); }; /** @@ -155,8 +159,11 @@ angular.module('mm.core.user') * @return {Promise} Promise resolve when the user is retrieved. */ self.getUserFromLocal = function(id) { - var db = $mmSite.getDb(); - return db.get(mmCoreUsersStore, parseInt(id)); + if (!$mmSite.isLoggedIn()) { + // Not logged in, we can't get the site DB. User logged out or session expired while an operation was ongoing. + return $q.reject(); + } + return $mmSite.getDb().get(mmCoreUsersStore, parseInt(id)); }; /** @@ -239,8 +246,12 @@ angular.module('mm.core.user') * @return {Promise} Promise resolve when the user is stored. */ self.storeUser = function(id, fullname, avatar) { - var db = $mmSite.getDb(); - return db.insert(mmCoreUsersStore, { + if (!$mmSite.isLoggedIn()) { + // Not logged in, we can't get the site DB. User logged out or session expired while an operation was ongoing. + return $q.reject(); + } + + return $mmSite.getDb().insert(mmCoreUsersStore, { id: parseInt(id), fullname: fullname, profileimageurl: avatar diff --git a/www/core/lib/sitesmanager.js b/www/core/lib/sitesmanager.js index 641889138e4..0e0fee231fd 100644 --- a/www/core/lib/sitesmanager.js +++ b/www/core/lib/sitesmanager.js @@ -471,7 +471,10 @@ angular.module('mm.core') * @return {Promise} */ self.getSite = function(siteId) { - if (currentSite && currentSite.getId() === siteId) { + if (!siteId) { + // Site ID not valid, reject. + return $q.reject(); + } else if (currentSite && currentSite.getId() === siteId) { return $q.when(currentSite); } else if (typeof sites[siteId] != 'undefined') { return $q.when(sites[siteId]);