Fixes updating username on rooms only if setting a new username;

pull/514/head
Marcelo Schmidt 10 years ago
parent b2c71ed025
commit ab0e7052bf
  1. 8
      client/views/username/username.coffee
  2. 2
      packages/rocketchat-lib/package.js
  3. 21
      packages/rocketchat-lib/server/functions/setUsername.coffee

@ -41,6 +41,8 @@ Template.username.events
username.error = true
username.username = value
Meteor.call 'joinDefaultChannels', ->
RocketChat.Button.reset(button)
instance.username.set(username)
RocketChat.Button.reset(button)
instance.username.set(username)
if not err?
Meteor.call 'joinDefaultChannels'

@ -25,7 +25,7 @@ Package.onUse(function(api) {
], ['server']);
api.addFiles([
'server/methods/joinDefaultChannels.coffee'
'server/methods/joinDefaultChannels.coffee',
'server/methods/setUsername.coffee'
], ['server']);

@ -16,20 +16,21 @@ RocketChat.setUsername = (user, username) ->
previousUsername = user.username
# Username is available, set username and update all references
ChatMessage.update { "u._id": user._id }, { $set: { "u.username": username } }, { multi: true }
# Username is available; if coming from old username, update all references
if previousUsername
ChatMessage.update { "u._id": user._id }, { $set: { "u.username": username } }, { multi: true }
# @TODO: update chatmessage mentions
ChatMessage.find({ "mentions.username": previousUsername }).forEach (msg) ->
updatedMsg = msg.msg.replace(new RegExp("@#{previousUsername}", "ig"), "@#{username}")
ChatMessage.update { _id: msg._id, "mentions.username": previousUsername }, { $set: { "mentions.$.username": username, "msg": updatedMsg } }
ChatMessage.find({ "mentions.username": previousUsername }).forEach (msg) ->
updatedMsg = msg.msg.replace(new RegExp("@#{previousUsername}", "ig"), "@#{username}")
ChatMessage.update { _id: msg._id, "mentions.username": previousUsername }, { $set: { "mentions.$.username": username, "msg": updatedMsg } }
ChatRoom.update { usernames: previousUsername }, { $set: { "usernames.$": username } }, { multi: true }
ChatRoom.update { "u._id": user._id }, { $set: { "u.username": username } }, { multi: true }
ChatRoom.update { usernames: previousUsername }, { $set: { "usernames.$": username } }, { multi: true }
ChatRoom.update { "u._id": user._id }, { $set: { "u.username": username } }, { multi: true }
ChatSubscription.update { "u._id": user._id }, { $set: { "u.username": username } }, { multi: true }
ChatSubscription.update { name: previousUsername, t: "d" }, { $set: { name: username } }, { multi: true }
ChatSubscription.update { "u._id": user._id }, { $set: { "u.username": username } }, { multi: true }
ChatSubscription.update { name: previousUsername, t: "d" }, { $set: { name: username } }, { multi: true }
# Set new username
Meteor.users.update { _id: user._id }, { $set: { username: username } }
user.username = username
return user

Loading…
Cancel
Save