From 546df19de9f917ed54258dd6e2af8c55b576ab50 Mon Sep 17 00:00:00 2001 From: TheConnMan <bcconn2112@gmail.com> Date: Tue, 2 Feb 2016 19:12:30 -0500 Subject: [PATCH] Add email notification preference --- .../server/functions/sendMessage.coffee | 12 ++++++------ .../account/accountPreferences.coffee | 1 + .../account/accountPreferences.html | 7 +++++++ server/methods/saveUserPreferences.coffee | 3 +++ 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/packages/rocketchat-lib/server/functions/sendMessage.coffee b/packages/rocketchat-lib/server/functions/sendMessage.coffee index ab08cce7a41..5d09b1ab59c 100644 --- a/packages/rocketchat-lib/server/functions/sendMessage.coffee +++ b/packages/rocketchat-lib/server/functions/sendMessage.coffee @@ -50,7 +50,7 @@ RocketChat.sendMessage = (user, message, room, options) -> ### RocketChat.models.Subscriptions.incUnreadOfDirectForRoomIdExcludingUserId message.rid, message.u._id, 1 - userOfMention = RocketChat.models.Users.findOne({_id: message.rid.replace(message.u._id, '')}, {fields: {username: 1, statusConnection: 1, status: 1, emails: 1}}) + userOfMention = RocketChat.models.Users.findOne({_id: message.rid.replace(message.u._id, '')}, {fields: {username: 1, statusConnection: 1, status: 1, emails: 1, settings: 1}}) if userOfMention? RocketChat.Notifications.notifyUser userOfMention._id, 'notification', title: "@#{user.username}" @@ -79,7 +79,7 @@ RocketChat.sendMessage = (user, message, room, options) -> query: userId: userOfMention._id - if userOfMention.status is 'offline' + if userOfMention.status is 'offline' and userOfMention.settings?.preferences?.emailNotificationMode is true Email.send to: userOfMention.emails[0].address from: RocketChat.settings.get('From_Email') @@ -95,7 +95,7 @@ RocketChat.sendMessage = (user, message, room, options) -> toAll = mentionIds.indexOf('all') > -1 if mentionIds.length > 0 - usersOfMention = RocketChat.models.Users.find({_id: {$in: mentionIds}}, {fields: {_id: 1, username: 1, status: 1, emails: 1}}).fetch() + usersOfMention = RocketChat.models.Users.find({_id: {$in: mentionIds}}, {fields: {_id: 1, username: 1, status: 1, emails: 1, settings: 1}}).fetch() if room.t is 'c' and !toAll for usersOfMentionItem in usersOfMention @@ -119,21 +119,21 @@ RocketChat.sendMessage = (user, message, room, options) -> userIdsToPushNotify = userIdsToNotify offlineMentionsRoom = _.filter usersOfMention, (user) -> - user.status is 'offline' + user.status is 'offline' and user.settings?.preferences?.emailNotificationMode is true # If the message is @all, notify all room users except for the sender. if toAll and room.usernames?.length > 0 usersOfRoom = RocketChat.models.Users.find({ username: {$in: room.usernames}, _id: {$ne: user._id}}, - {fields: {_id: 1, username: 1, status: 1, emails: 1}}) + {fields: {_id: 1, username: 1, status: 1, emails: 1, settings: 1}}) .fetch() onlineUsersOfRoom = _.filter usersOfRoom, (user) -> user.status in ['online', 'away', 'busy'] userIdsToNotify = _.union userIdsToNotify, _.pluck(onlineUsersOfRoom, '_id') userIdsToPushNotify = _.union userIdsToPushNotify, _.pluck(usersOfRoom, '_id') offlineMentionsRoom = _.filter usersOfRoom, (user) -> - user.status is 'offline' + user.status is 'offline' and user.settings?.preferences?.emailNotificationMode is true if userIdsToNotify.length > 0 for usersOfMentionId in userIdsToNotify diff --git a/packages/rocketchat-ui-account/account/accountPreferences.coffee b/packages/rocketchat-ui-account/account/accountPreferences.coffee index d8171ec2f97..6021d28a4b6 100644 --- a/packages/rocketchat-ui-account/account/accountPreferences.coffee +++ b/packages/rocketchat-ui-account/account/accountPreferences.coffee @@ -42,6 +42,7 @@ Template.accountPreferences.onCreated -> data.compactView = $('input[name=compactView]:checked').val() data.unreadRoomsMode = $('input[name=unreadRoomsMode]:checked').val() data.autoImageLoad = $('input[name=autoImageLoad]:checked').val() + data.emailNotificationMode = $('input[name=emailNotificationMode]:checked').val() Meteor.call 'saveUserPreferences', data, (error, results) -> if results diff --git a/packages/rocketchat-ui-account/account/accountPreferences.html b/packages/rocketchat-ui-account/account/accountPreferences.html index 331a1764cd2..6e4bc3ccf90 100644 --- a/packages/rocketchat-ui-account/account/accountPreferences.html +++ b/packages/rocketchat-ui-account/account/accountPreferences.html @@ -68,6 +68,13 @@ <label><input type="radio" name="unreadRoomsMode" value="0" checked="{{checked 'unreadRoomsMode' false true}}" /> {{_ "False"}}</label> </div> </div> + <div class="input-line double-col" id="emailNotificationMode"> + <label>{{_ "Email_Notification_Mode"}}</label> + <div> + <label><input type="radio" name="emailNotificationMode" value="1" checked="{{checked 'emailNotificationMode' true true}}" /> {{_ "True"}}</label> + <label><input type="radio" name="emailNotificationMode" value="0" checked="{{checked 'emailNotificationMode' false}}" /> {{_ "False"}}</label> + </div> + </div> </div> </div> <div class="section"> diff --git a/server/methods/saveUserPreferences.coffee b/server/methods/saveUserPreferences.coffee index 39da131efdb..63bf71e570b 100644 --- a/server/methods/saveUserPreferences.coffee +++ b/server/methods/saveUserPreferences.coffee @@ -27,6 +27,9 @@ Meteor.methods if settings.autoImageLoad? preferences.autoImageLoad = if settings.autoImageLoad is "1" then true else false + if settings.emailNotificationMode? + preferences.emailNotificationMode = if settings.emailNotificationMode is "1" then true else false + RocketChat.models.Users.setPreferences Meteor.userId(), preferences return true -- GitLab