diff --git a/migrations/tasks/team-tasks-v2.js b/migrations/tasks/team-tasks-v2.js index 2b56a66627..a5c90cab95 100644 --- a/migrations/tasks/team-tasks-v2.js +++ b/migrations/tasks/team-tasks-v2.js @@ -26,7 +26,7 @@ async function updateTeamTasks (team) { const userTask = find(teamUserTasks, task => task.userId === assignedUserId && task.group.taskId === boardTask._id); if (!boardTask.group.assignedUsersDetail) boardTask.group.assignedUsersDetail = {}; - if (userTask) { + if (userTask && assignedUser) { boardTask.group.assignedUsersDetail[assignedUserId] = { assignedDate: userTask.group.assignedDate, assignedUsername: assignedUser.auth.local.username, @@ -34,8 +34,7 @@ async function updateTeamTasks (team) { completed: userTask.completed || false, completedDate: userTask.dateCompleted, }; - toSave.push(Tasks.Task.findByIdAndDelete(userTask._id)); - } else { + } else if (assignedUser) { boardTask.group.assignedUsersDetail[assignedUserId] = { assignedDate: new Date(), assignedUsername: assignedUser.auth.local.username, @@ -43,7 +42,11 @@ async function updateTeamTasks (team) { completed: false, completedDate: null, }; + } else { + const taskIndex = boardTask.group.assignedUsers.indexOf(assignedUserId); + boardTask.group.assignedUsers.splice(taskIndex, 1); } + if (userTask) toSave.push(Tasks.Task.findByIdAndDelete(userTask._id)); } boardTask.markModified('group'); toSave.push(boardTask.save()); diff --git a/package-lock.json b/package-lock.json index 0b2090c758..917cea0311 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "habitica", - "version": "4.241.0", + "version": "4.241.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index d8349eb211..2b811f98f1 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": "4.241.0", + "version": "4.241.2", "main": "./website/server/index.js", "dependencies": { "@babel/core": "^7.18.13", diff --git a/website/client/src/components/group-plans/groupPlansUpdateModal.vue b/website/client/src/components/group-plans/groupPlansUpdateModal.vue index e79c2dd39f..30205a0576 100644 --- a/website/client/src/components/group-plans/groupPlansUpdateModal.vue +++ b/website/client/src/components/group-plans/groupPlansUpdateModal.vue @@ -6,6 +6,7 @@ hide-footer="hide-footer" :no-close-on-backdrop="true" :no-close-on-esc="true" + :centered="true" >
@import '~@/assets/scss/colors.scss'; #group-plans-update { - overflow-y: hidden; - .modal-content { border-top-left-radius: 10px; border-top-right-radius: 10px; @@ -107,8 +106,7 @@ .modal-dialog { max-width: 566px; - margin-top: 50vh; - transform: translateY(-50%); + margin-top: 0px; } .modal-header { diff --git a/website/client/src/components/tasks/taskModal.vue b/website/client/src/components/tasks/taskModal.vue index 6a2d7b0372..0dae29e9a5 100644 --- a/website/client/src/components/tasks/taskModal.vue +++ b/website/client/src/components/tasks/taskModal.vue @@ -79,7 +79,6 @@
@@ -363,7 +361,7 @@
diff --git a/website/server/controllers/api-v3/tasks.js b/website/server/controllers/api-v3/tasks.js index a386420ad6..c937f5efb0 100644 --- a/website/server/controllers/api-v3/tasks.js +++ b/website/server/controllers/api-v3/tasks.js @@ -961,7 +961,8 @@ api.scoreCheckListItem = { if (!task || (!task.userId && !task.group.id)) throw new NotFound(res.t('messageTaskNotFound')); if (task.userId && task.userId !== user._id) { throw new BadRequest('Cannot score task belonging to another user.'); - } else if (user.guilds.indexOf(task.group.id) === -1 && user.party._id !== task.group.id) { + } else if (task.group.id && user.guilds.indexOf(task.group.id) === -1 + && user.party._id !== task.group.id) { throw new BadRequest('Cannot score task belonging to another user.'); } if (task.type !== 'daily' && task.type !== 'todo') throw new BadRequest(res.t('checklistOnlyDailyTodo')); diff --git a/website/server/libs/tasks/index.js b/website/server/libs/tasks/index.js index 9dd0ef77d9..d32280fd3c 100644 --- a/website/server/libs/tasks/index.js +++ b/website/server/libs/tasks/index.js @@ -156,6 +156,7 @@ async function getTasks (req, res, options = {}) { let limit; let sort; let upgradedGroups = []; + const upgradedGroupIds = []; const owner = group || challenge || user; if (challenge) { @@ -179,15 +180,19 @@ async function getTasks (req, res, options = {}) { ).exec(); } if (upgradedGroups.length > 0) { - const upgradedGroupIds = []; for (const upgradedGroup of upgradedGroups) { upgradedGroupIds.push(upgradedGroup._id); } query = { $or: [ { userId: user._id }, - { 'group.assignedUsers': user._id }, - { 'group.id': { $in: upgradedGroupIds }, 'group.assignedUsers.0': { $exists: false } }, + { + 'group.id': { $in: upgradedGroupIds }, + $or: [ + { 'group.assignedUsers': user._id }, + { 'group.assignedUsers.0': { $exists: false } }, + ], + }, ], }; } else { @@ -214,8 +219,13 @@ async function getTasks (req, res, options = {}) { if (upgradedGroups.length > 0) { query.$or = [ { userId: user._id }, - { 'group.assignedUsers': user._id }, - { 'group.completedBy.userId': user._id }, + { + 'group.id': { $in: upgradedGroupIds }, + $or: [ + { 'group.assignedUsers': user._id }, + { 'group.completedBy.userId': user._id }, + ], + }, ]; } else if (owner._id === user._id) { query.userId = user._id;