diff --git a/package-lock.json b/package-lock.json index 5aed2314cc..648087fb58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "habitica", - "version": "5.1.1", + "version": "5.1.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 074985daad..72d445ad8c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "habitica", "description": "A habit tracker app which treats your goals like a Role Playing Game.", - "version": "5.1.1", + "version": "5.1.2", "main": "./website/server/index.js", "dependencies": { "@babel/core": "^7.22.5", diff --git a/website/client/src/components/memberDetails.vue b/website/client/src/components/memberDetails.vue index 844e599935..e59ad25587 100644 --- a/website/client/src/components/memberDetails.vue +++ b/website/client/src/components/memberDetails.vue @@ -270,6 +270,9 @@ export default { methods: { percent, showMemberModal (member) { + if (this.$route.name === 'userProfile' && this.$route.params?.userId === member._id) { + return; + } this.$router.push({ name: 'userProfile', params: { userId: member._id } }); }, }, diff --git a/website/server/controllers/api-v3/challenges.js b/website/server/controllers/api-v3/challenges.js index 109422080c..7db05352c2 100644 --- a/website/server/controllers/api-v3/challenges.js +++ b/website/server/controllers/api-v3/challenges.js @@ -575,13 +575,15 @@ api.getChallenge = { // Fetching basic group data const group = await Group.getGroup({ - user, groupId: challenge.group, fields: `${basicGroupFields} purchased`, optionalMembership: true, + user, groupId: challenge.group, fields: `${basicGroupFields} purchased`, }); - if (!group || !challenge.canView(user, group)) throw new NotFound(res.t('challengeNotFound')); - group.purchased = undefined; - + if (!group && !challenge.canView(user, group)) throw new NotFound(res.t('challengeNotFound')); const chalRes = challenge.toJSON(); - chalRes.group = group.toJSON({ minimize: true }); + if (group) { + group.purchased = undefined; + chalRes.group = group.toJSON({ minimize: true }); + } + // Instead of populate we make a find call manually because of https://github.com/Automattic/mongoose/issues/3833 const chalLeader = await User.findById(chalRes.leader).select(nameFields).exec(); chalRes.leader = chalLeader ? chalLeader.toJSON({ minimize: true }) : null; diff --git a/website/server/models/challenge.js b/website/server/models/challenge.js index 73092238cf..e5a7814558 100644 --- a/website/server/models/challenge.js +++ b/website/server/models/challenge.js @@ -93,6 +93,7 @@ schema.methods.canModify = function canModifyChallenge (user) { schema.methods.canJoin = function canJoinChallenge (user, group) { // for when leader has left private group that contains the challenge if (this.isLeader(user)) return true; + if (!group) return false; if (group.type === 'guild' && group.privacy === 'public') { return group._id === TAVERN_ID; }