Преглед изворни кода

Merge pull request #2541 from whowillcare/master

Added new features: user will be notified when been @ and other feature
Lauri Ojansivu пре 6 година
родитељ
комит
b39bbfc97a
3 измењених фајлова са 36 додато и 2 уклоњено
  1. 2 1
      i18n/en.i18n.json
  2. 33 0
      models/activities.js
  3. 1 1
      server/notifications/email.js

+ 2 - 1
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__"
 }

+ 33 - 0
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',

+ 1 - 1
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();