diff --git a/website/client/src/components/tasks/taskModal.vue b/website/client/src/components/tasks/taskModal.vue
index 40dce98644..b85e48bc43 100644
--- a/website/client/src/components/tasks/taskModal.vue
+++ b/website/client/src/components/tasks/taskModal.vue
@@ -448,20 +448,6 @@
v-if="groupId"
class="option group-options mt-3"
>
-
-
-
-
-
-
-
-
= 0) userGroups.splice(index, 1);
+ await Tasks.Task.remove({ userId: user._id, 'group.id': group._id }).exec();
+
const groupPlansQuery = {
// type: { $in: ['guild', 'party'] },
// privacy: 'private',
diff --git a/website/server/middlewares/cron.js b/website/server/middlewares/cron.js
index 664d65cc3e..4c86fb2817 100644
--- a/website/server/middlewares/cron.js
+++ b/website/server/middlewares/cron.js
@@ -73,13 +73,37 @@ async function cronAsync (req, res) {
return null;
}
- const tasks = await Tasks.Task.find({
- userId: user._id,
- $or: [ // Exclude completed todos
- { type: 'todo', completed: false },
- { type: { $in: ['habit', 'daily', 'reward'] } },
- ],
- }).exec();
+ const teamsLed = await user.teamsLed();
+ let tasksQuery;
+
+ if (teamsLed.length > 0) {
+ tasksQuery = {
+ $and: [
+ {
+ $or: [
+ { userId: user._id },
+ { userId: { $exists: false }, 'group.id': { $in: teamsLed } },
+ ],
+ },
+ {
+ $or: [
+ { type: 'todo', completed: false },
+ { type: { $in: ['habit', 'daily'] } },
+ ],
+ },
+ ],
+ };
+ } else {
+ tasksQuery = {
+ userId: user._id,
+ $or: [
+ { type: 'todo', completed: false },
+ { type: { $in: ['habit', 'daily'] } },
+ ],
+ };
+ }
+
+ const tasks = await Tasks.Task.find(tasksQuery).exec();
const tasksByType = {
habits: [], dailys: [], todos: [], rewards: [],
diff --git a/website/server/models/user/methods.js b/website/server/models/user/methods.js
index c4231fbaa2..897be48dd1 100644
--- a/website/server/models/user/methods.js
+++ b/website/server/models/user/methods.js
@@ -1,6 +1,6 @@
import moment from 'moment';
import {
- defaults, map, flatten, flow, compact, uniq, partialRight,
+ defaults, map, flatten, flow, compact, uniq, partialRight, remove,
} from 'lodash';
import common from '../../../common';
@@ -498,6 +498,21 @@ schema.methods.isMemberOfGroupPlan = async function isMemberOfGroupPlan () {
return groups.some(g => g.hasActiveGroupPlan());
};
+schema.methods.teamsLed = async function teamsLed () {
+ const user = this;
+ const groups = await getUserGroupData(user);
+
+ remove(groups, group => !group.hasActiveGroupPlan);
+ remove(groups, group => user._id !== group.leader);
+
+ const groupIds = [];
+ groups.forEach(group => {
+ groupIds.push(group._id);
+ });
+
+ return groupIds;
+};
+
schema.methods.isAdmin = function isAdmin () {
return Boolean(this.contributor && this.contributor.admin);
};