Skip to content

Commit 2fd05b6

Browse files
committed
MOBILE-2018 forum: Prevent showing WS error in old sites
1 parent 81e73e1 commit 2fd05b6

File tree

3 files changed

+71
-56
lines changed

3 files changed

+71
-56
lines changed

www/addons/mod/forum/controllers/discussions.js

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -68,48 +68,48 @@ angular.module('mm.addons.mod_forum')
6868
});
6969
}
7070
}).then(function() {
71-
return $mmGroups.getActivityGroupMode(forum.cmid).then(function(mode) {
72-
usesGroups = mode === $mmGroups.SEPARATEGROUPS || mode === $mmGroups.VISIBLEGROUPS;
73-
}).finally(function() {
74-
var promises = [];
75-
76-
// Check if there are discussions stored in offline.
77-
promises.push($mmaModForumOffline.hasNewDiscussions(forum.id).then(function(hasOffline) {
78-
$scope.hasOffline = hasOffline;
71+
// Check if the activity uses groups.
72+
if ($mmGroups.canGetActivityGroupMode()) {
73+
return $mmGroups.getActivityGroupMode(forum.cmid).then(function(mode) {
74+
usesGroups = mode === $mmGroups.SEPARATEGROUPS || mode === $mmGroups.VISIBLEGROUPS;
75+
});
76+
}
77+
}).then(function() {
78+
var promises = [];
79+
80+
// Get offline discussions if any.
81+
promises.push($mmaModForumOffline.getNewDiscussions(forum.id).then(function(offlineDiscussions) {
82+
$scope.hasOffline = !!offlineDiscussions.length;
83+
84+
if ($scope.hasOffline) {
85+
var promise = usesGroups ?
86+
$mmaModForum.formatDiscussionsGroups(forum.cmid, offlineDiscussions) : $q.when(offlineDiscussions);
87+
88+
return promise.then(function(offlineDiscussions) {
89+
// Fill user data for Offline discussions (should be already cached).
90+
var userPromises = [];
91+
angular.forEach(offlineDiscussions, function(discussion) {
92+
if (discussion.parent != 0 || forum.type != 'single') {
93+
// Do not show author for first post and type single.
94+
userPromises.push($mmUser.getProfile(discussion.userid, courseid, true).then(function(user) {
95+
discussion.userfullname = user.fullname;
96+
discussion.userpictureurl = user.profileimageurl;
97+
}));
98+
}
99+
});
79100

80-
if (hasOffline) {
81-
// Get offline discussions.
82-
return $mmaModForumOffline.getNewDiscussions(forum.id).then(function(offlineDiscussions) {
83-
var promise = usesGroups ?
84-
$mmaModForum.formatDiscussionsGroups(forum.cmid, offlineDiscussions) : $q.when(offlineDiscussions);
85-
86-
return promise.then(function(offlineDiscussions) {
87-
// Fill user data for Offline discussions (should be already cached).
88-
var userPromises = [];
89-
angular.forEach(offlineDiscussions, function(discussion) {
90-
if (discussion.parent != 0 || forum.type != 'single') {
91-
// Do not show author for first post and type single.
92-
userPromises.push($mmUser.getProfile(discussion.userid, courseid, true).then(function(user) {
93-
discussion.userfullname = user.fullname;
94-
discussion.userpictureurl = user.profileimageurl;
95-
}));
96-
}
97-
});
98-
99-
return $q.all(userPromises).then(function() {
100-
$scope.offlineDiscussions = offlineDiscussions;
101-
});
102-
});
101+
return $q.all(userPromises).then(function() {
102+
$scope.offlineDiscussions = offlineDiscussions;
103103
});
104-
} else {
105-
$scope.offlineDiscussions = [];
106-
}
107-
}));
104+
});
105+
} else {
106+
$scope.offlineDiscussions = [];
107+
}
108+
}));
108109

109-
promises.push(fetchDiscussions(refresh));
110+
promises.push(fetchDiscussions(refresh));
110111

111-
return $q.all(promises);
112-
});
112+
return $q.all(promises);
113113
}).then(function() {
114114
// All data obtained, now fill the context menu.
115115
$mmCourseHelper.fillContextMenu($scope, module, courseid, refresh, mmaModForumComponent);

www/addons/mod/forum/services/forum.js

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -313,33 +313,36 @@ angular.module('mm.addons.mod_forum')
313313
/**
314314
* Format discussions, setting groupname if the discussion group is valid.
315315
*
316+
* @module mm.addons.mod_forum
317+
* @ngdoc method
318+
* @name $mmaModForum#formatDiscussionsGroups
316319
* @param {Number} cmid Forum cmid.
317320
* @param {Object[]} discussions List of discussions to format.
318321
* @return {Promise} Promise resolved with the formatted discussions.
319322
*/
320323
self.formatDiscussionsGroups = function(cmid, discussions) {
321324
discussions = angular.copy(discussions);
322-
return $translate('mm.core.allparticipants').then(function(strAllParts) {
323-
return $mmGroups.getActivityAllowedGroups(cmid).then(function(forumgroups) {
324-
// Turn groups into an object where each group is identified by id.
325-
var groups = {};
326-
angular.forEach(forumgroups, function(fg) {
327-
groups[fg.id] = fg;
328-
});
329325

330-
// Format discussions.
331-
angular.forEach(discussions, function(disc) {
332-
if (disc.groupid === -1) {
333-
disc.groupname = strAllParts;
334-
} else {
335-
var group = groups[disc.groupid];
336-
if (group) {
337-
disc.groupname = group.name;
338-
}
326+
var strAllParts = $translate.instant('mm.core.allparticipants');
327+
return $mmGroups.getActivityAllowedGroups(cmid).then(function(forumgroups) {
328+
// Turn groups into an object where each group is identified by id.
329+
var groups = {};
330+
angular.forEach(forumgroups, function(fg) {
331+
groups[fg.id] = fg;
332+
});
333+
334+
// Format discussions.
335+
angular.forEach(discussions, function(disc) {
336+
if (disc.groupid === -1) {
337+
disc.groupname = strAllParts;
338+
} else {
339+
var group = groups[disc.groupid];
340+
if (group) {
341+
disc.groupname = group.name;
339342
}
340-
});
341-
return discussions;
343+
}
342344
});
345+
return discussions;
343346
}).catch(function() {
344347
return discussions;
345348
});

www/core/lib/groups.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,18 @@ angular.module('mm.core')
3232
self.SEPARATEGROUPS = 1;
3333
self.VISIBLEGROUPS = 2;
3434

35+
/**
36+
* Check if current site allows getting activity group mode.
37+
*
38+
* @module mm.core.groups
39+
* @ngdoc method
40+
* @name $mmGroups#canGetActivityGroupMode
41+
* @return {Boolean} True if can get, false otherwise.
42+
*/
43+
self.canGetActivityGroupMode = function() {
44+
return $mmSite.wsAvailable('core_group_get_activity_groupmode');
45+
};
46+
3547
/**
3648
* Get the groups allowed in an activity.
3749
*

0 commit comments

Comments
 (0)