summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLauri Ojansivu <x@xet7.org>2019-07-11 22:47:48 +0300
committerGitHub <noreply@github.com>2019-07-11 22:47:48 +0300
commitb39bbfc97a6c1a5c3995ca7f8b82a47aa19bc9b3 (patch)
treed85b4b3dad898d2e1bcc1deebdb6fdea128bf604
parentf85080ebd36a1cbefe2d07fbfd3fd4809218ef01 (diff)
parent5fd86d29ba957fb2f00d5c83a7dd1a36a79303d8 (diff)
downloadwekan-b39bbfc97a6c1a5c3995ca7f8b82a47aa19bc9b3.tar.gz
wekan-b39bbfc97a6c1a5c3995ca7f8b82a47aa19bc9b3.tar.bz2
wekan-b39bbfc97a6c1a5c3995ca7f8b82a47aa19bc9b3.zip
Merge pull request #2541 from whowillcare/master
Added new features: user will be notified when been @ and other feature
-rw-r--r--i18n/en.i18n.json3
-rw-r--r--models/activities.js33
-rw-r--r--server/notifications/email.js2
3 files changed, 36 insertions, 2 deletions
diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json
index f555f438..6274e08a 100644
--- a/i18n/en.i18n.json
+++ b/i18n/en.i18n.json
@@ -721,5 +721,6 @@
"act-withDue": "__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
- "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now"
+ "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
+ "act-atUserComment": "You were mentioned in [__board__] __card__"
}
diff --git a/models/activities.js b/models/activities.js
index feda36e5..168effd0 100644
--- a/models/activities.js
+++ b/models/activities.js
@@ -171,6 +171,26 @@ if (Meteor.isServer) {
if (activity.commentId) {
const comment = activity.comment();
params.comment = comment.text;
+ if (board) {
+ const atUser = /(?:^|\s+)@(\S+)(?:\s+|$)/g;
+ const comment = params.comment;
+ if (comment.match(atUser)) {
+ const commenter = params.user;
+ while (atUser.exec(comment)) {
+ const username = RegExp.$1;
+ if (commenter === username) {
+ // it's person at himself, ignore it?
+ continue;
+ }
+ const user = Users.findOne(username) || Users.findOne({ username });
+ const uid = user && user._id;
+ if (board.hasMember(uid)) {
+ title = 'act-atUserComment';
+ watchers = _.union(watchers, [uid]);
+ }
+ }
+ }
+ }
params.commentId = comment._id;
}
if (activity.attachmentId) {
@@ -212,6 +232,19 @@ if (Meteor.isServer) {
if (value) params[key] = value;
});
if (board) {
+ const BIGEVENTS = process.env.BIGEVENTS_PATTERN || 'due'; // if environment BIGEVENTS_PATTERN is set or default, any activityType matching it is important
+ try {
+ const atype = activity.activityType;
+ if (new RegExp(BIGEVENTS).exec(atype)) {
+ watchers = _.union(
+ watchers,
+ board.activeMembers().map(member => member.userId),
+ ); // notify all active members for important events system defined or default to all activity related to due date
+ }
+ } catch (e) {
+ // passed env var BIGEVENTS_PATTERN is not a valid regex
+ }
+
const watchingUsers = _.pluck(
_.where(board.watchers, { level: 'watching' }),
'userId',
diff --git a/server/notifications/email.js b/server/notifications/email.js
index 45642c90..d198b8b5 100644
--- a/server/notifications/email.js
+++ b/server/notifications/email.js
@@ -7,7 +7,7 @@ Meteor.startup(() => {
if (quoteParams[key]) quoteParams[key] = `"${params[key]}"`;
});
['timeValue', 'timeOldValue'].forEach(key => {
- if (quoteParams[key]) quoteParams[key] = `${params[key]}`;
+ quoteParams[key] = quoteParams[key] ? `${params[key]}` : '';
});
const lan = user.getLanguage();