From 2fd05b66172b2207f9a9a691c9ac7165eeac8b61 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 20 Feb 2017 08:55:12 +0100 Subject: [PATCH] MOBILE-2018 forum: Prevent showing WS error in old sites --- .../mod/forum/controllers/discussions.js | 76 +++++++++---------- www/addons/mod/forum/services/forum.js | 39 +++++----- www/core/lib/groups.js | 12 +++ 3 files changed, 71 insertions(+), 56 deletions(-) diff --git a/www/addons/mod/forum/controllers/discussions.js b/www/addons/mod/forum/controllers/discussions.js index 43aaeb7fe83..cb1d3d40e4a 100644 --- a/www/addons/mod/forum/controllers/discussions.js +++ b/www/addons/mod/forum/controllers/discussions.js @@ -68,48 +68,48 @@ angular.module('mm.addons.mod_forum') }); } }).then(function() { - return $mmGroups.getActivityGroupMode(forum.cmid).then(function(mode) { - usesGroups = mode === $mmGroups.SEPARATEGROUPS || mode === $mmGroups.VISIBLEGROUPS; - }).finally(function() { - var promises = []; - - // Check if there are discussions stored in offline. - promises.push($mmaModForumOffline.hasNewDiscussions(forum.id).then(function(hasOffline) { - $scope.hasOffline = hasOffline; + // Check if the activity uses groups. + if ($mmGroups.canGetActivityGroupMode()) { + return $mmGroups.getActivityGroupMode(forum.cmid).then(function(mode) { + usesGroups = mode === $mmGroups.SEPARATEGROUPS || mode === $mmGroups.VISIBLEGROUPS; + }); + } + }).then(function() { + var promises = []; + + // Get offline discussions if any. + promises.push($mmaModForumOffline.getNewDiscussions(forum.id).then(function(offlineDiscussions) { + $scope.hasOffline = !!offlineDiscussions.length; + + if ($scope.hasOffline) { + var promise = usesGroups ? + $mmaModForum.formatDiscussionsGroups(forum.cmid, offlineDiscussions) : $q.when(offlineDiscussions); + + return promise.then(function(offlineDiscussions) { + // Fill user data for Offline discussions (should be already cached). + var userPromises = []; + angular.forEach(offlineDiscussions, function(discussion) { + if (discussion.parent != 0 || forum.type != 'single') { + // Do not show author for first post and type single. + userPromises.push($mmUser.getProfile(discussion.userid, courseid, true).then(function(user) { + discussion.userfullname = user.fullname; + discussion.userpictureurl = user.profileimageurl; + })); + } + }); - if (hasOffline) { - // Get offline discussions. - return $mmaModForumOffline.getNewDiscussions(forum.id).then(function(offlineDiscussions) { - var promise = usesGroups ? - $mmaModForum.formatDiscussionsGroups(forum.cmid, offlineDiscussions) : $q.when(offlineDiscussions); - - return promise.then(function(offlineDiscussions) { - // Fill user data for Offline discussions (should be already cached). - var userPromises = []; - angular.forEach(offlineDiscussions, function(discussion) { - if (discussion.parent != 0 || forum.type != 'single') { - // Do not show author for first post and type single. - userPromises.push($mmUser.getProfile(discussion.userid, courseid, true).then(function(user) { - discussion.userfullname = user.fullname; - discussion.userpictureurl = user.profileimageurl; - })); - } - }); - - return $q.all(userPromises).then(function() { - $scope.offlineDiscussions = offlineDiscussions; - }); - }); + return $q.all(userPromises).then(function() { + $scope.offlineDiscussions = offlineDiscussions; }); - } else { - $scope.offlineDiscussions = []; - } - })); + }); + } else { + $scope.offlineDiscussions = []; + } + })); - promises.push(fetchDiscussions(refresh)); + promises.push(fetchDiscussions(refresh)); - return $q.all(promises); - }); + return $q.all(promises); }).then(function() { // All data obtained, now fill the context menu. $mmCourseHelper.fillContextMenu($scope, module, courseid, refresh, mmaModForumComponent); diff --git a/www/addons/mod/forum/services/forum.js b/www/addons/mod/forum/services/forum.js index 2210bfb3950..d465e96eee6 100644 --- a/www/addons/mod/forum/services/forum.js +++ b/www/addons/mod/forum/services/forum.js @@ -313,33 +313,36 @@ angular.module('mm.addons.mod_forum') /** * Format discussions, setting groupname if the discussion group is valid. * + * @module mm.addons.mod_forum + * @ngdoc method + * @name $mmaModForum#formatDiscussionsGroups * @param {Number} cmid Forum cmid. * @param {Object[]} discussions List of discussions to format. * @return {Promise} Promise resolved with the formatted discussions. */ self.formatDiscussionsGroups = function(cmid, discussions) { discussions = angular.copy(discussions); - return $translate('mm.core.allparticipants').then(function(strAllParts) { - return $mmGroups.getActivityAllowedGroups(cmid).then(function(forumgroups) { - // Turn groups into an object where each group is identified by id. - var groups = {}; - angular.forEach(forumgroups, function(fg) { - groups[fg.id] = fg; - }); - // Format discussions. - angular.forEach(discussions, function(disc) { - if (disc.groupid === -1) { - disc.groupname = strAllParts; - } else { - var group = groups[disc.groupid]; - if (group) { - disc.groupname = group.name; - } + var strAllParts = $translate.instant('mm.core.allparticipants'); + return $mmGroups.getActivityAllowedGroups(cmid).then(function(forumgroups) { + // Turn groups into an object where each group is identified by id. + var groups = {}; + angular.forEach(forumgroups, function(fg) { + groups[fg.id] = fg; + }); + + // Format discussions. + angular.forEach(discussions, function(disc) { + if (disc.groupid === -1) { + disc.groupname = strAllParts; + } else { + var group = groups[disc.groupid]; + if (group) { + disc.groupname = group.name; } - }); - return discussions; + } }); + return discussions; }).catch(function() { return discussions; }); diff --git a/www/core/lib/groups.js b/www/core/lib/groups.js index e8f9806aa23..df509edf29c 100644 --- a/www/core/lib/groups.js +++ b/www/core/lib/groups.js @@ -32,6 +32,18 @@ angular.module('mm.core') self.SEPARATEGROUPS = 1; self.VISIBLEGROUPS = 2; + /** + * Check if current site allows getting activity group mode. + * + * @module mm.core.groups + * @ngdoc method + * @name $mmGroups#canGetActivityGroupMode + * @return {Boolean} True if can get, false otherwise. + */ + self.canGetActivityGroupMode = function() { + return $mmSite.wsAvailable('core_group_get_activity_groupmode'); + }; + /** * Get the groups allowed in an activity. *