Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 38 additions & 38 deletions www/addons/mod/forum/controllers/discussions.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
39 changes: 21 additions & 18 deletions www/addons/mod/forum/services/forum.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
});
Expand Down
12 changes: 12 additions & 0 deletions www/core/lib/groups.js
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand Down