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