Skip to content
Snippets Groups Projects
channelSettings.coffee 4.78 KiB
Newer Older
Template.channelSettings.helpers
Marcelo Schmidt's avatar
Marcelo Schmidt committed
	canEdit: ->
		return RocketChat.authz.hasAllPermission('edit-room', @rid)
	canArchiveOrUnarchive: ->
		return RocketChat.authz.hasAtLeastOnePermission(['archive-room', 'unarchive-room'], @rid)
Marcelo Schmidt's avatar
Marcelo Schmidt committed
	editing: (field) ->
		return Template.instance().editing.get() is field
	notDirect: ->
Diego Sampaio's avatar
Diego Sampaio committed
		return ChatRoom.findOne(@rid, { fields: { t: 1 }})?.t isnt 'd'
	roomType: ->
Diego Sampaio's avatar
Diego Sampaio committed
		return ChatRoom.findOne(@rid, { fields: { t: 1 }})?.t
Marcelo Schmidt's avatar
Marcelo Schmidt committed
	channelSettings: ->
		return RocketChat.ChannelSettings.getOptions()
Marcelo Schmidt's avatar
Marcelo Schmidt committed
	roomTypeDescription: ->
Diego Sampaio's avatar
Diego Sampaio committed
		roomType = ChatRoom.findOne(@rid, { fields: { t: 1 }})?.t
		if roomType is 'c'
			return t('Channel')
		else if roomType is 'p'
			return t('Private_Group')
Diego Sampaio's avatar
Diego Sampaio committed
		return ChatRoom.findOne(@rid, { fields: { name: 1 }})?.name
Diego Sampaio's avatar
Diego Sampaio committed
		return ChatRoom.findOne(@rid, { fields: { topic: 1 }})?.topic
	roomTopicUnescaped: ->
		return s.unescapeHTML ChatRoom.findOne(@rid, { fields: { topic: 1 }})?.topic
	roomDescription: ->
		return ChatRoom.findOne(@rid, { fields: { description: 1 }})?.description
Diego Sampaio's avatar
Diego Sampaio committed
		return ChatRoom.findOne(@rid, { fields: { archived: 1 }})?.archived
Diego Sampaio's avatar
Diego Sampaio committed
		archivationState = ChatRoom.findOne(@rid, { fields: { archived: 1 }})?.archived
		if archivationState is true
			return t('Room_archivation_state_true')
		else
			return t('Room_archivation_state_false')
Marcelo Schmidt's avatar
Marcelo Schmidt committed
Template.channelSettings.events
	'keydown input[type=text]': (e, t) ->
		if e.keyCode is 13
			e.preventDefault()
			t.saveSetting()
Marcelo Schmidt's avatar
Marcelo Schmidt committed

	'click [data-edit]': (e, t) ->
		e.preventDefault()
		t.editing.set($(e.currentTarget).data('edit'))
		setTimeout (-> t.$('input.editing').focus().select()), 100

	'click .cancel': (e, t) ->
		e.preventDefault()
		t.editing.set()
Marcelo Schmidt's avatar
Marcelo Schmidt committed
	'click .save': (e, t) ->
		e.preventDefault()
		t.saveSetting()
Template.channelSettings.onCreated ->
	@editing = new ReactiveVar

	@validateRoomType = =>
		type = @$('input[name=roomType]:checked').val()
		if type not in ['c', 'p']
			toastr.error t('error-invalid-room-type', type)
		return true

	@validateRoomName = =>
		rid = Template.currentData()?.rid
		room = ChatRoom.findOne rid

		if not RocketChat.authz.hasAllPermission('edit-room', rid) or room.t not in ['c', 'p']
			toastr.error t('error-not-allowed')
Marcelo Schmidt's avatar
Marcelo Schmidt committed

		name = $('input[name=roomName]').val()

		try
			nameValidation = new RegExp '^' + RocketChat.settings.get('UTF8_Names_Validation') + '$'
		catch
			nameValidation = new RegExp '^[0-9a-zA-Z-_.]+$'

		if not nameValidation.test name
			toastr.error t('error-invalid-room-name', { room_name: name: name })
Marcelo Schmidt's avatar
Marcelo Schmidt committed

	@validateRoomTopic = =>
		return true
	@saveSetting = =>
		switch @editing.get()
			when 'roomName'
				if $('input[name=roomName]').val() is room.name
					toastr.success TAPi18n.__ 'Room_name_changed_successfully'
					RocketChat.callbacks.run 'roomNameChanged', ChatRoom.findOne(room._id)
				else
					if @validateRoomName()
graywolf336's avatar
graywolf336 committed
						RocketChat.callbacks.run 'roomNameChanged', { _id: room._id, name: @$('input[name=roomName]').val() }
						Meteor.call 'saveRoomSettings', room._id, 'roomName', @$('input[name=roomName]').val(), (err, result) ->
							return handleError err if err
							toastr.success TAPi18n.__ 'Room_name_changed_successfully'
			when 'roomTopic'
				if @validateRoomTopic()
					Meteor.call 'saveRoomSettings', room._id, 'roomTopic', @$('input[name=roomTopic]').val(), (err, result) ->
						return handleError err if err
						toastr.success TAPi18n.__ 'Room_topic_changed_successfully'
						RocketChat.callbacks.run 'roomTopicChanged', ChatRoom.findOne(result.rid)
			when 'roomType'
				if @validateRoomType()
graywolf336's avatar
graywolf336 committed
					RocketChat.callbacks.run 'roomTypeChanged', room
					Meteor.call 'saveRoomSettings', room._id, 'roomType', @$('input[name=roomType]:checked').val(), (err, result) ->
						return handleError err if err
						toastr.success TAPi18n.__ 'Room_type_changed_successfully'
			when 'roomDescription'
				if @validateRoomTopic()
					Meteor.call 'saveRoomSettings', room._id, 'roomDescription', @$('input[name=roomDescription]').val(), (err, result) ->
						return handleError err if err
						toastr.success TAPi18n.__ 'Room_description_changed_successfully'
			when 'archivationState'
				if @$('input[name=archivationState]:checked').val() is 'true'
					if room.archived isnt true
						Meteor.call 'archiveRoom', room._id, (err, results) ->
							return handleError err if err
							toastr.success TAPi18n.__ 'Room_archived'
							RocketChat.callbacks.run 'archiveRoom', ChatRoom.findOne(room._id)
					if room.archived is true
						Meteor.call 'unarchiveRoom', room._id, (err, results) ->
							return handleError err if err
							toastr.success TAPi18n.__ 'Room_unarchived'
							RocketChat.callbacks.run 'unarchiveRoom', ChatRoom.findOne(room._id)
		@editing.set()