parent
1d7c70e862
commit
18fd157f85
@ -1,24 +0,0 @@ |
||||
RocketChat._setRealName = (userId, name) -> |
||||
name = s.trim name |
||||
if not userId or not name |
||||
return false |
||||
|
||||
user = RocketChat.models.Users.findOneById userId |
||||
|
||||
# User already has desired name, return |
||||
if user.name is name |
||||
return user |
||||
|
||||
previousName = user.name |
||||
|
||||
if previousName |
||||
RocketChat.models.Messages.updateAllNamesByUserId user._id, name |
||||
RocketChat.models.Subscriptions.setRealNameForDirectRoomsWithUsername user.username, name |
||||
|
||||
# Set new name |
||||
RocketChat.models.Users.setName user._id, name |
||||
user.name = name |
||||
return user |
||||
|
||||
RocketChat.setRealName = RocketChat.RateLimiter.limitFunction RocketChat._setRealName, 1, 60000, |
||||
0: () -> return not Meteor.userId() or not RocketChat.authz.hasPermission(Meteor.userId(), 'edit-other-user-info') # Administrators have permission to change others names, so don't limit those |
||||
@ -0,0 +1,29 @@ |
||||
RocketChat._setRealName = function(userId, name) { |
||||
name = s.trim(name); |
||||
if (!userId || !name) { |
||||
return false; |
||||
} |
||||
|
||||
const user = RocketChat.models.Users.findOneById(userId); |
||||
|
||||
// User already has desired name, return
|
||||
if (user.name === name) { |
||||
return user; |
||||
} |
||||
|
||||
const previousName = user.name; |
||||
|
||||
if (previousName) { |
||||
RocketChat.models.Messages.updateAllNamesByUserId(user._id, name); |
||||
RocketChat.models.Subscriptions.setRealNameForDirectRoomsWithUsername(user.username, name); |
||||
} |
||||
|
||||
// Set new name
|
||||
RocketChat.models.Users.setName(user._id, name); |
||||
user.name = name; |
||||
return user; |
||||
}; |
||||
|
||||
RocketChat.setRealName = RocketChat.RateLimiter.limitFunction(RocketChat._setRealName, 1, 60000, { |
||||
0() { return !Meteor.userId() || !RocketChat.authz.hasPermission(Meteor.userId(), 'edit-other-user-info'); } // Administrators have permission to change others names, so don't limit those
|
||||
}); |
||||
@ -1,170 +0,0 @@ |
||||
Template.membersList.helpers |
||||
tAddUsers: -> |
||||
return t('Add_users') |
||||
|
||||
isGroupChat: -> |
||||
return ChatRoom.findOne(this.rid, { reactive: false })?.t in ['c', 'p'] |
||||
|
||||
isDirectChat: -> |
||||
return ChatRoom.findOne(this.rid, { reactive: false })?.t is 'd' |
||||
|
||||
seeAll: -> |
||||
if Template.instance().showAllUsers.get() |
||||
return t('Show_only_online') |
||||
else |
||||
return t('Show_all') |
||||
|
||||
roomUsers: -> |
||||
onlineUsers = RoomManager.onlineUsers.get() |
||||
roomUsers = Template.instance().users.get() |
||||
room = ChatRoom.findOne(this.rid) |
||||
roomMuted = room?.muted or [] |
||||
userUtcOffset = Meteor.user().utcOffset |
||||
totalOnline = 0 |
||||
users = roomUsers.map (user) -> |
||||
if onlineUsers[user.username]? |
||||
totalOnline++ |
||||
utcOffset = onlineUsers[user.username].utcOffset |
||||
|
||||
if utcOffset? |
||||
if utcOffset is userUtcOffset |
||||
utcOffset = "" |
||||
else if utcOffset > 0 |
||||
utcOffset = "+#{utcOffset}" |
||||
else |
||||
utcOffset = "(UTC #{utcOffset})" |
||||
|
||||
return { |
||||
user: user |
||||
status: onlineUsers[user.username]?.status |
||||
muted: user.username in roomMuted |
||||
utcOffset: utcOffset |
||||
} |
||||
|
||||
users = _.sortBy users, (u) -> u.user.username |
||||
# show online users first. |
||||
# sortBy is stable, so we can do this |
||||
users = _.sortBy users, (u) -> !u.status? |
||||
|
||||
usersLimit = Template.instance().usersLimit.get() |
||||
hasMore = users.length > usersLimit |
||||
users = _.first(users, usersLimit) |
||||
|
||||
totalShowing = users.length |
||||
|
||||
ret = |
||||
_id: this.rid |
||||
total: Template.instance().total.get() |
||||
totalShowing: totalShowing |
||||
loading: Template.instance().loading.get() |
||||
totalOnline: totalOnline |
||||
users: users |
||||
hasMore: hasMore |
||||
return ret |
||||
|
||||
canAddUser: -> |
||||
roomData = Session.get('roomData' + this._id) |
||||
return '' unless roomData |
||||
return switch roomData.t |
||||
when 'p' then RocketChat.authz.hasAtLeastOnePermission ['add-user-to-any-p-room', 'add-user-to-joined-room'], this._id |
||||
when 'c' then RocketChat.authz.hasAtLeastOnePermission ['add-user-to-any-c-room', 'add-user-to-joined-room'], this._id |
||||
else false |
||||
|
||||
autocompleteSettingsAddUser: -> |
||||
return { |
||||
limit: 10 |
||||
# inputDelay: 300 |
||||
rules: [ |
||||
{ |
||||
collection: 'UserAndRoom' |
||||
subscription: 'userAutocomplete' |
||||
field: 'username' |
||||
template: Template.userSearch |
||||
noMatchTemplate: Template.userSearchEmpty |
||||
matchAll: true |
||||
filter: |
||||
exceptions: [Meteor.user().username] |
||||
selector: (match) -> |
||||
return { term: match } |
||||
sort: 'username' |
||||
} |
||||
] |
||||
} |
||||
|
||||
showUserInfo: -> |
||||
webrtc = WebRTC.getInstanceByRoomId(this.rid) |
||||
videoActive = webrtc?.localUrl?.get()? or webrtc?.remoteItems?.get()?.length > 0 |
||||
return Template.instance().showDetail.get() and not videoActive |
||||
|
||||
userInfoDetail: -> |
||||
room = ChatRoom.findOne(this.rid, { fields: { t: 1 } }) |
||||
return { |
||||
tabBar: Template.currentData().tabBar |
||||
username: Template.instance().userDetail.get() |
||||
clear: Template.instance().clearUserDetail |
||||
showAll: room?.t in ['c', 'p'] |
||||
hideAdminControls: room?.t in ['c', 'p', 'd'] |
||||
video: room?.t in ['d'] |
||||
} |
||||
|
||||
displayName: -> |
||||
return if RocketChat.settings.get('UI_Use_Real_Name') then this.user.name else this.user.username |
||||
|
||||
Template.membersList.events |
||||
'click .see-all': (e, instance) -> |
||||
seeAll = instance.showAllUsers.get() |
||||
instance.showAllUsers.set(!seeAll) |
||||
|
||||
if not seeAll |
||||
instance.usersLimit.set 100 |
||||
|
||||
'autocompleteselect #user-add-search': (event, template, doc) -> |
||||
|
||||
roomData = Session.get('roomData' + template.data.rid) |
||||
|
||||
if roomData.t in ['c', 'p'] |
||||
Meteor.call 'addUserToRoom', { rid: roomData._id, username: doc.username }, (error, result) -> |
||||
if error |
||||
return handleError(error) |
||||
|
||||
$('#user-add-search').val('') |
||||
|
||||
'click .show-more-users': (e, instance) -> |
||||
instance.usersLimit.set(instance.usersLimit.get() + 100) |
||||
|
||||
Template.membersList.onCreated -> |
||||
@showAllUsers = new ReactiveVar false |
||||
@usersLimit = new ReactiveVar 100 |
||||
@userDetail = new ReactiveVar |
||||
@showDetail = new ReactiveVar false |
||||
|
||||
@users = new ReactiveVar [] |
||||
@total = new ReactiveVar |
||||
@loading = new ReactiveVar true |
||||
|
||||
@tabBar = Template.instance().tabBar |
||||
|
||||
Tracker.autorun => |
||||
return unless this.data.rid? |
||||
|
||||
@loading.set true |
||||
Meteor.call 'getUsersOfRoom', this.data.rid, this.showAllUsers.get(), (error, users) => |
||||
@users.set users.records |
||||
@total.set users.total |
||||
@loading.set false |
||||
|
||||
@clearUserDetail = => |
||||
@showDetail.set(false) |
||||
setTimeout => |
||||
@clearRoomUserDetail() |
||||
, 500 |
||||
|
||||
@showUserDetail = (username) => |
||||
@showDetail.set(username?) |
||||
@userDetail.set(username) |
||||
|
||||
@clearRoomUserDetail = @data.clearUserDetail |
||||
|
||||
@autorun => |
||||
data = Template.currentData() |
||||
@showUserDetail data.userDetail |
||||
@ -1,72 +0,0 @@ |
||||
Template.accountBox.helpers |
||||
myUserInfo: -> |
||||
visualStatus = "online" |
||||
username = Meteor.user()?.username |
||||
name = Meteor.user()?.name |
||||
switch Session.get('user_' + username + '_status') |
||||
when "away" |
||||
visualStatus = t("away") |
||||
when "busy" |
||||
visualStatus = t("busy") |
||||
when "offline" |
||||
visualStatus = t("invisible") |
||||
return { |
||||
name: Session.get('user_' + username + '_name') |
||||
status: Session.get('user_' + username + '_status') |
||||
visualStatus: visualStatus |
||||
_id: Meteor.userId() |
||||
username: username |
||||
fname: name |
||||
} |
||||
|
||||
showAdminOption: -> |
||||
return RocketChat.authz.hasAtLeastOnePermission( ['view-statistics', 'view-room-administration', 'view-user-administration', 'view-privileged-setting' ]) or RocketChat.AdminBox.getOptions().length > 0 |
||||
|
||||
registeredMenus: -> |
||||
return AccountBox.getItems() |
||||
|
||||
Template.accountBox.events |
||||
'click .options .status': (event) -> |
||||
event.preventDefault() |
||||
AccountBox.setStatus(event.currentTarget.dataset.status) |
||||
RocketChat.callbacks.run('userStatusManuallySet', event.currentTarget.dataset.status) |
||||
|
||||
'click .account-box': (event) -> |
||||
AccountBox.toggle() |
||||
|
||||
'click #logout': (event) -> |
||||
event.preventDefault() |
||||
user = Meteor.user() |
||||
Meteor.logout -> |
||||
RocketChat.callbacks.run 'afterLogoutCleanUp', user |
||||
Meteor.call('logoutCleanUp', user) |
||||
FlowRouter.go 'home' |
||||
|
||||
'click #avatar': (event) -> |
||||
FlowRouter.go 'changeAvatar' |
||||
|
||||
'click #account': (event) -> |
||||
SideNav.setFlex "accountFlex" |
||||
SideNav.openFlex() |
||||
FlowRouter.go 'account' |
||||
|
||||
'click #admin': -> |
||||
SideNav.setFlex "adminFlex" |
||||
SideNav.openFlex() |
||||
FlowRouter.go 'admin-info' |
||||
|
||||
'click .account-link': (event) -> |
||||
event.stopPropagation(); |
||||
event.preventDefault(); |
||||
AccountBox.openFlex() |
||||
|
||||
'click .account-box-item': -> |
||||
if @href |
||||
FlowRouter.go @href |
||||
|
||||
if @sideNav? |
||||
SideNav.setFlex @sideNav |
||||
SideNav.openFlex() |
||||
|
||||
Template.accountBox.onRendered -> |
||||
AccountBox.init() |
||||
@ -1,125 +0,0 @@ |
||||
Template.chatRoomItem.helpers |
||||
|
||||
alert: -> |
||||
if FlowRouter.getParam('_id') isnt this.rid or not document.hasFocus() |
||||
return this.alert |
||||
|
||||
unread: -> |
||||
if (FlowRouter.getParam('_id') isnt this.rid or not document.hasFocus()) and this.unread > 0 |
||||
return this.unread |
||||
|
||||
userStatus: -> |
||||
userStatus = RocketChat.roomTypes.getUserStatus(this.t, this.rid); |
||||
return 'status-' + (userStatus or 'offline') |
||||
|
||||
name: -> |
||||
if RocketChat.settings.get('UI_Use_Real_Name') and this.fname |
||||
return this.fname |
||||
else |
||||
return this.name |
||||
|
||||
roomIcon: -> |
||||
return RocketChat.roomTypes.getIcon this.t |
||||
|
||||
active: -> |
||||
if Session.get('openedRoom') is this.rid |
||||
return 'active' |
||||
|
||||
canLeave: -> |
||||
roomData = Session.get('roomData' + this.rid) |
||||
|
||||
return false unless roomData |
||||
|
||||
if (roomData.cl? and not roomData.cl) or roomData.t is 'd' |
||||
return false |
||||
else |
||||
return true |
||||
|
||||
route: -> |
||||
return RocketChat.roomTypes.getRouteLink @t, @ |
||||
|
||||
archived: -> |
||||
return if this.archived then 'archived' |
||||
|
||||
Template.chatRoomItem.rendered = -> |
||||
if not (FlowRouter.getParam('_id')? and FlowRouter.getParam('_id') is this.data.rid) and not this.data.ls and this.data.alert is true |
||||
KonchatNotification.newRoom(this.data.rid) |
||||
|
||||
Template.chatRoomItem.events |
||||
|
||||
'click .open-room': (e) -> |
||||
menu.close() |
||||
|
||||
'click .hide-room': (e) -> |
||||
e.stopPropagation() |
||||
e.preventDefault() |
||||
|
||||
rid = this.rid |
||||
name = this.name |
||||
|
||||
warnText = switch this.t |
||||
when 'c' then 'Hide_Room_Warning' |
||||
when 'p' then 'Hide_Group_Warning' |
||||
when 'd' then 'Hide_Private_Warning' |
||||
|
||||
swal { |
||||
title: t('Are_you_sure') |
||||
text: if warnText then t(warnText, name) else '' |
||||
type: 'warning' |
||||
showCancelButton: true |
||||
confirmButtonColor: '#DD6B55' |
||||
confirmButtonText: t('Yes_hide_it') |
||||
cancelButtonText: t('Cancel') |
||||
closeOnConfirm: true |
||||
html: false |
||||
}, -> |
||||
if FlowRouter.getRouteName() in ['channel', 'group', 'direct'] and Session.get('openedRoom') is rid |
||||
FlowRouter.go 'home' |
||||
|
||||
Meteor.call 'hideRoom', rid, (err) -> |
||||
if err |
||||
handleError(err) |
||||
else |
||||
if rid is Session.get('openedRoom') |
||||
Session.delete('openedRoom') |
||||
|
||||
'click .leave-room': (e) -> |
||||
e.stopPropagation() |
||||
e.preventDefault() |
||||
|
||||
rid = this.rid |
||||
name = this.name |
||||
|
||||
warnText = switch |
||||
when this.t == 'c' then 'Leave_Room_Warning' |
||||
when this.t == 'p' then 'Leave_Group_Warning' |
||||
when this.t == 'd' then 'Leave_Private_Warning' |
||||
swal { |
||||
title: t('Are_you_sure') |
||||
text: t(warnText, name) |
||||
type: 'warning' |
||||
showCancelButton: true |
||||
confirmButtonColor: '#DD6B55' |
||||
confirmButtonText: t('Yes_leave_it') |
||||
cancelButtonText: t('Cancel') |
||||
closeOnConfirm: false |
||||
html: false |
||||
}, (isConfirm) -> |
||||
if isConfirm |
||||
Meteor.call 'leaveRoom', rid, (err) -> |
||||
if err |
||||
swal { |
||||
title: t('Warning') |
||||
text: handleError(err, false) |
||||
type: 'warning' |
||||
html: false |
||||
} |
||||
|
||||
else |
||||
swal.close() |
||||
if FlowRouter.getRouteName() in ['channel', 'group', 'direct'] and Session.get('openedRoom') is rid |
||||
FlowRouter.go 'home' |
||||
|
||||
RoomManager.close rid |
||||
else |
||||
swal.close() |
||||
Loading…
Reference in new issue