diff --git a/habitica-images b/habitica-images index 5afe493854..5a79037fca 160000 --- a/habitica-images +++ b/habitica-images @@ -1 +1 @@ -Subproject commit 5afe493854d104d9105e627ac6f132885e55f6da +Subproject commit 5a79037fca74f76c9342190b584baeda419c6c47 diff --git a/package-lock.json b/package-lock.json index 7ce87f6a90..154b545ba1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "habitica", - "version": "4.225.0", + "version": "4.225.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 797d7a3dfc..15c6a40684 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.225.0", + "version": "4.225.2", "main": "./website/server/index.js", "dependencies": { "@babel/core": "^7.17.8", diff --git a/website/client/src/assets/css/sprites/spritesmith-main.css b/website/client/src/assets/css/sprites/spritesmith-main.css index 828d014cde..1e5c04e4e6 100644 --- a/website/client/src/assets/css/sprites/spritesmith-main.css +++ b/website/client/src/assets/css/sprites/spritesmith-main.css @@ -25953,8 +25953,8 @@ width: 114px; height: 90px; } -.shield_special_spring2022Mage { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_spring2022Mage.png'); +.shield_special_spring2022Rogue { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_spring2022Rogue.png'); width: 114px; height: 117px; } diff --git a/website/server/controllers/api-v3/tasks.js b/website/server/controllers/api-v3/tasks.js index 5c20a9f4d7..c168cd4ca5 100644 --- a/website/server/controllers/api-v3/tasks.js +++ b/website/server/controllers/api-v3/tasks.js @@ -838,6 +838,32 @@ api.moveTask = { // In memory updates const order = owner.tasksOrder[`${task.type}s`]; + + if (order.indexOf(task._id) === -1) { // task is missing from list, list needs repair + const taskListQuery = { type: task.type }; + if (group) { + taskListQuery['group.id'] = owner._id; + taskListQuery.userId = { $exists: false }; + } else if (challenge) { + taskListQuery['challenge.id'] = owner._id; + taskListQuery.userId = { $exists: false }; + } else { + taskListQuery.userId = owner._id; + } + const taskList = await Tasks.Task.find( + taskListQuery, + { _id: 1 }, + ).exec(); + for (const foundTask of taskList) { + if (order.indexOf(foundTask._id) === -1) { + order.push(foundTask._id); + } + } + const fixQuery = { $set: {} }; + fixQuery.$set[`tasksOrder.${task.type}s`] = order; + await owner.update(fixQuery).exec(); + } + moveTask(order, task._id, to); // Server updates diff --git a/website/server/controllers/api-v3/tasks/groups.js b/website/server/controllers/api-v3/tasks/groups.js index 98da938496..ab18f7faad 100644 --- a/website/server/controllers/api-v3/tasks/groups.js +++ b/website/server/controllers/api-v3/tasks/groups.js @@ -160,6 +160,21 @@ api.groupMoveTask = { const order = group.tasksOrder[`${task.type}s`]; + if (order.indexOf(task._id) === -1) { // task is missing from list, list needs repair + const taskList = await Tasks.Task.find( + { 'group.id': group._id, userId: { $exists: false }, type: task.type }, + { _id: 1 }, + ).exec(); + for (const foundTask of taskList) { + if (order.indexOf(foundTask._id) === -1) { + order.push(foundTask._id); + } + } + const fixQuery = { $set: {} }; + fixQuery.$set[`tasksOrder.${task.type}s`] = order; + await group.update(fixQuery).exec(); + } + moveTask(order, task._id, to); await group.save();