PLT-6217 Fixes system message posted to Town Square when a member leaves a team (#7752)

* Fixes system message posted to Town Square when adding/removing team member (#6483)

Fixes unit test method call to match RemoveUserFromTeam modification (#6483)

Fixes system message posted to Town Square when adding/removing team member (#6483)

Removes unnessary error message

* Updates system message when a user leaves a team (#6483)

* Changes system message when a user is removed from team (#6483)

* Adds a new string to be post to town-square when a member is added to a team (#6483)
Этот коммит содержится в:
Tsilavina Razafinirina
2017-11-20 18:15:33 +03:00
коммит произвёл Harrison Healey
родитель 3836f99920
Коммит ab6ef954b4
8 изменённых файлов: 81 добавлений и 12 удалений

Просмотреть файл

@@ -179,7 +179,7 @@ func removeUserFromTeam(c *Context, w http.ResponseWriter, r *http.Request) {
}
}
if err := c.App.RemoveUserFromTeam(c.TeamId, userId); err != nil {
if err := c.App.RemoveUserFromTeam(c.TeamId, userId, c.Session.UserId); err != nil {
c.Err = err
return
}

Просмотреть файл

@@ -458,7 +458,7 @@ func removeTeamMember(c *Context, w http.ResponseWriter, r *http.Request) {
}
}
if err := c.App.RemoveUserFromTeam(c.Params.TeamId, c.Params.UserId); err != nil {
if err := c.App.RemoveUserFromTeam(c.Params.TeamId, c.Params.UserId, c.Session.UserId); err != nil {
c.Err = err
return
}

Просмотреть файл

@@ -1238,7 +1238,7 @@ func TestAddTeamMember(t *testing.T) {
team := th.BasicTeam
otherUser := th.CreateUser()
if err := th.App.RemoveUserFromTeam(th.BasicTeam.Id, th.BasicUser2.Id); err != nil {
if err := th.App.RemoveUserFromTeam(th.BasicTeam.Id, th.BasicUser2.Id, ""); err != nil {
t.Fatalf(err.Error())
}
@@ -1454,7 +1454,7 @@ func TestAddTeamMembers(t *testing.T) {
otherUser.Id,
}
if err := th.App.RemoveUserFromTeam(th.BasicTeam.Id, th.BasicUser2.Id); err != nil {
if err := th.App.RemoveUserFromTeam(th.BasicTeam.Id, th.BasicUser2.Id, ""); err != nil {
t.Fatalf(err.Error())
}

Просмотреть файл

@@ -61,7 +61,7 @@ func (a *App) JoinDefaultChannels(teamId string, user *model.User, channelRole s
l4g.Error(utils.T("api.channel.post_user_add_remove_message_and_forget.error"), err)
}
} else {
if err := a.PostAddToChannelMessage(requestor, user, townSquare, ""); err != nil {
if err := a.PostAddToTeamMessage(requestor, user, townSquare, ""); err != nil {
l4g.Error(utils.T("api.channel.post_user_add_remove_message_and_forget.error"), err)
}
}
@@ -1006,10 +1006,30 @@ func (a *App) PostAddToChannelMessage(user *model.User, addedUser *model.User, c
return nil
}
func (a *App) PostAddToTeamMessage(user *model.User, addedUser *model.User, channel *model.Channel, postRootId string) *model.AppError {
post := &model.Post{
ChannelId: channel.Id,
Message: fmt.Sprintf(utils.T("api.team.add_user_to_team.added"), addedUser.Username, user.Username),
Type: model.POST_ADD_TO_TEAM,
UserId: user.Id,
RootId: postRootId,
Props: model.StringInterface{
"username": user.Username,
"addedUsername": addedUser.Username,
},
}
if _, err := a.CreatePost(post, channel, false); err != nil {
return model.NewAppError("postAddToTeamMessage", "api.channel.post_user_add_remove_message_and_forget.error", nil, err.Error(), http.StatusInternalServerError)
}
return nil
}
func (a *App) PostRemoveFromChannelMessage(removerUserId string, removedUser *model.User, channel *model.Channel) *model.AppError {
post := &model.Post{
ChannelId: channel.Id,
Message: fmt.Sprintf(utils.T("api.channel.remove_member.removed"), removedUser.Username),
Message: fmt.Sprintf(utils.T("api.team.remove_user_from_team.removed"), removedUser.Username),
Type: model.POST_REMOVE_FROM_CHANNEL,
UserId: removerUserId,
Props: model.StringInterface{

Просмотреть файл

@@ -554,7 +554,7 @@ func (a *App) GetTeamUnread(teamId, userId string) (*model.TeamUnread, *model.Ap
return teamUnread, nil
}
func (a *App) RemoveUserFromTeam(teamId string, userId string) *model.AppError {
func (a *App) RemoveUserFromTeam(teamId string, userId string, requestorId string) *model.AppError {
tchan := a.Srv.Store.Team().Get(teamId)
uchan := a.Srv.Store.User().Get(userId)
@@ -572,14 +572,14 @@ func (a *App) RemoveUserFromTeam(teamId string, userId string) *model.AppError {
user = result.Data.(*model.User)
}
if err := a.LeaveTeam(team, user); err != nil {
if err := a.LeaveTeam(team, user, requestorId); err != nil {
return err
}
return nil
}
func (a *App) LeaveTeam(team *model.Team, user *model.User) *model.AppError {
func (a *App) LeaveTeam(team *model.Team, user *model.User, requestorId string) *model.AppError {
var teamMember *model.TeamMember
var err *model.AppError
@@ -609,6 +609,23 @@ func (a *App) LeaveTeam(team *model.Team, user *model.User) *model.AppError {
}
}
var channel *model.Channel
if result := <-a.Srv.Store.Channel().GetByName(team.Id, model.DEFAULT_CHANNEL, false); result.Err != nil {
return result.Err
} else {
channel = result.Data.(*model.Channel)
}
if requestorId == user.Id {
if err := a.postLeaveTeamMessage(user, channel); err != nil {
l4g.Error(utils.T("api.channel.post_user_add_remove_message_and_forget.error"), err)
}
} else {
if err := a.PostRemoveFromChannelMessage(user.Id, user, channel); err != nil {
l4g.Error(utils.T("api.channel.post_user_add_remove_message_and_forget.error"), err)
}
}
// Send the websocket message before we actually do the remove so the user being removed gets it.
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_LEAVE_TEAM, team.Id, "", "", nil)
message.Add("user_id", user.Id)
@@ -637,6 +654,24 @@ func (a *App) LeaveTeam(team *model.Team, user *model.User) *model.AppError {
return nil
}
func (a *App) postLeaveTeamMessage(user *model.User, channel *model.Channel) *model.AppError {
post := &model.Post{
ChannelId: channel.Id,
Message: fmt.Sprintf(utils.T("api.team.leave.left"), user.Username),
Type: model.POST_LEAVE_TEAM,
UserId: user.Id,
Props: model.StringInterface{
"username": user.Username,
},
}
if _, err := a.CreatePost(post, channel, false); err != nil {
return model.NewAppError("postRemoveFromChannelMessage", "api.channel.post_user_add_remove_message_and_forget.error", nil, err.Error(), http.StatusInternalServerError)
}
return nil
}
func (a *App) InviteNewUsersToTeam(emailList []string, teamId, senderId string) *model.AppError {
if len(emailList) == 0 {
err := model.NewAppError("InviteNewUsersToTeam", "api.team.invite_members.no_one.app_error", nil, "", http.StatusBadRequest)

Просмотреть файл

@@ -130,7 +130,7 @@ func removeUserFromTeam(a *app.App, team *model.Team, user *model.User, userArg
CommandPrintErrorln("Can't find user '" + userArg + "'")
return
}
if err := a.LeaveTeam(team, user); err != nil {
if err := a.LeaveTeam(team, user, ""); err != nil {
CommandPrintErrorln("Unable to remove '" + userArg + "' from " + team.Name + ". Error: " + err.Error())
}
}

Просмотреть файл

@@ -2166,6 +2166,10 @@
"id": "api.system.go_routines",
"translation": "The number of running goroutines is over the health threshold %v of %v"
},
{
"id": "api.team.add_user_to_team.added",
"translation": "%v added to the team by %v"
},
{
"id": "api.team.add_user_to_team.missing_parameter.app_error",
"translation": "Parameter required to add user to team."
@@ -2274,6 +2278,10 @@
"id": "api.team.is_team_creation_allowed.disabled.app_error",
"translation": "Team creation has been disabled. Please ask your systems administrator for details."
},
{
"id": "api.team.leave.left",
"translation": "%v left the team."
},
{
"id": "api.team.is_team_creation_allowed.domain.app_error",
"translation": "Email must be from a specific domain (e.g. @example.com). Please ask your systems administrator for details."
@@ -2286,6 +2294,10 @@
"id": "api.team.permanent_delete_team.deleted.warn",
"translation": "Permanently deleted team %v id=%v"
},
{
"id": "api.team.remove_user_from_team.removed",
"translation": "%v was removed from the team."
},
{
"id": "api.team.remove_user_from_team.missing.app_error",
"translation": "The user does not appear to be part of this team."

Просмотреть файл

@@ -19,8 +19,10 @@ const (
POST_JOIN_LEAVE = "system_join_leave" // Deprecated, use POST_JOIN_CHANNEL or POST_LEAVE_CHANNEL instead
POST_JOIN_CHANNEL = "system_join_channel"
POST_LEAVE_CHANNEL = "system_leave_channel"
POST_LEAVE_TEAM = "system_leave_team"
POST_ADD_REMOVE = "system_add_remove" // Deprecated, use POST_ADD_TO_CHANNEL or POST_REMOVE_FROM_CHANNEL instead
POST_ADD_TO_CHANNEL = "system_add_to_channel"
POST_ADD_TO_TEAM = "system_add_to_team"
POST_REMOVE_FROM_CHANNEL = "system_remove_from_channel"
POST_HEADER_CHANGE = "system_header_change"
POST_DISPLAYNAME_CHANGE = "system_displayname_change"
@@ -167,8 +169,8 @@ func (o *Post) IsValid() *AppError {
}
if !(o.Type == POST_DEFAULT || o.Type == POST_JOIN_LEAVE || o.Type == POST_ADD_REMOVE ||
o.Type == POST_JOIN_CHANNEL || o.Type == POST_LEAVE_CHANNEL ||
o.Type == POST_REMOVE_FROM_CHANNEL || o.Type == POST_ADD_TO_CHANNEL ||
o.Type == POST_JOIN_CHANNEL || o.Type == POST_LEAVE_CHANNEL || o.Type == POST_LEAVE_TEAM ||
o.Type == POST_REMOVE_FROM_CHANNEL || o.Type == POST_ADD_TO_CHANNEL || o.Type == POST_ADD_TO_TEAM ||
o.Type == POST_SLACK_ATTACHMENT || o.Type == POST_HEADER_CHANGE || o.Type == POST_PURPOSE_CHANGE ||
o.Type == POST_DISPLAYNAME_CHANGE || o.Type == POST_CHANNEL_DELETED ||
strings.HasPrefix(o.Type, POST_CUSTOM_TYPE_PREFIX)) {