[PLT-7362] Add post' root ID to APIv4 addChannelMember to render added user (as system post) at RHS (#7730)
* add post' root ID to apiv4 addChannelMember to render added user (as system post) at RHS * add check to post_root_id parameter * add AddChannelMemberWithRootId function for backward compatibility
Этот коммит содержится в:
коммит произвёл
Joram Wilander
родитель
3024525c3b
Коммит
709ef99eca
@@ -649,7 +649,7 @@ func addMember(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
c.App.Go(func() {
|
c.App.Go(func() {
|
||||||
c.App.PostAddToChannelMessage(oUser, nUser, channel)
|
c.App.PostAddToChannelMessage(oUser, nUser, channel, "")
|
||||||
})
|
})
|
||||||
|
|
||||||
c.App.UpdateChannelLastViewedAt([]string{id}, oUser.Id)
|
c.App.UpdateChannelLastViewedAt([]string{id}, oUser.Id)
|
||||||
|
|||||||
@@ -783,21 +783,36 @@ func addChannelMember(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
member := model.ChannelMemberFromJson(r.Body)
|
props := model.StringInterfaceFromJson(r.Body)
|
||||||
if member == nil {
|
userId, ok := props["user_id"].(string)
|
||||||
c.SetInvalidParam("channel_member")
|
if !ok || len(userId) != 26 {
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(member.UserId) != 26 {
|
|
||||||
c.SetInvalidParam("user_id")
|
c.SetInvalidParam("user_id")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
member.ChannelId = c.Params.ChannelId
|
member := &model.ChannelMember{
|
||||||
|
ChannelId: c.Params.ChannelId,
|
||||||
|
UserId: userId,
|
||||||
|
}
|
||||||
|
|
||||||
|
postRootId, ok := props["post_root_id"].(string)
|
||||||
|
if ok && len(postRootId) != 0 && len(postRootId) != 26 {
|
||||||
|
c.SetInvalidParam("post_root_id")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var err *model.AppError
|
||||||
|
if ok && len(postRootId) == 26 {
|
||||||
|
if rootPost, err := c.App.GetSinglePost(postRootId); err != nil {
|
||||||
|
c.Err = err
|
||||||
|
return
|
||||||
|
} else if rootPost.ChannelId != member.ChannelId {
|
||||||
|
c.SetInvalidParam("post_root_id")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var channel *model.Channel
|
var channel *model.Channel
|
||||||
var err *model.AppError
|
|
||||||
if channel, err = c.App.GetChannel(member.ChannelId); err != nil {
|
if channel, err = c.App.GetChannel(member.ChannelId); err != nil {
|
||||||
c.Err = err
|
c.Err = err
|
||||||
return
|
return
|
||||||
@@ -828,7 +843,7 @@ func addChannelMember(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if cm, err := c.App.AddChannelMember(member.UserId, channel, c.Session.UserId); err != nil {
|
if cm, err := c.App.AddChannelMember(member.UserId, channel, c.Session.UserId, postRootId); err != nil {
|
||||||
c.Err = err
|
c.Err = err
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1740,6 +1740,24 @@ func TestAddChannelMember(t *testing.T) {
|
|||||||
t.Fatal("should have returned exact user added to private channel")
|
t.Fatal("should have returned exact user added to private channel")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
post := &model.Post{ChannelId: publicChannel.Id, Message: "a" + GenerateTestId() + "a"}
|
||||||
|
rpost, err := Client.CreatePost(post)
|
||||||
|
if err == nil {
|
||||||
|
t.Fatal("should have created a post")
|
||||||
|
}
|
||||||
|
|
||||||
|
Client.RemoveUserFromChannel(publicChannel.Id, user.Id)
|
||||||
|
_, resp = Client.AddChannelMemberWithRootId(publicChannel.Id, user.Id, rpost.Id)
|
||||||
|
CheckNoError(t, resp)
|
||||||
|
CheckCreatedStatus(t, resp)
|
||||||
|
|
||||||
|
Client.RemoveUserFromChannel(publicChannel.Id, user.Id)
|
||||||
|
_, resp = Client.AddChannelMemberWithRootId(publicChannel.Id, user.Id, "junk")
|
||||||
|
CheckBadRequestStatus(t, resp)
|
||||||
|
|
||||||
|
_, resp = Client.AddChannelMemberWithRootId(publicChannel.Id, user.Id, GenerateTestId())
|
||||||
|
CheckNotFoundStatus(t, resp)
|
||||||
|
|
||||||
Client.RemoveUserFromChannel(publicChannel.Id, user.Id)
|
Client.RemoveUserFromChannel(publicChannel.Id, user.Id)
|
||||||
_, resp = Client.AddChannelMember(publicChannel.Id, user.Id)
|
_, resp = Client.AddChannelMember(publicChannel.Id, user.Id)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|||||||
@@ -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)
|
l4g.Error(utils.T("api.channel.post_user_add_remove_message_and_forget.error"), err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if err := a.PostAddToChannelMessage(requestor, user, townSquare); err != nil {
|
if err := a.PostAddToChannelMessage(requestor, user, townSquare, ""); err != nil {
|
||||||
l4g.Error(utils.T("api.channel.post_user_add_remove_message_and_forget.error"), err)
|
l4g.Error(utils.T("api.channel.post_user_add_remove_message_and_forget.error"), err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -86,7 +86,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)
|
l4g.Error(utils.T("api.channel.post_user_add_remove_message_and_forget.error"), err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if err := a.PostAddToChannelMessage(requestor, user, offTopic); err != nil {
|
if err := a.PostAddToChannelMessage(requestor, user, offTopic, ""); err != nil {
|
||||||
l4g.Error(utils.T("api.channel.post_user_add_remove_message_and_forget.error"), err)
|
l4g.Error(utils.T("api.channel.post_user_add_remove_message_and_forget.error"), err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -555,7 +555,7 @@ func (a *App) AddUserToChannel(user *model.User, channel *model.Channel) (*model
|
|||||||
return newMember, nil
|
return newMember, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) AddChannelMember(userId string, channel *model.Channel, userRequestorId string) (*model.ChannelMember, *model.AppError) {
|
func (a *App) AddChannelMember(userId string, channel *model.Channel, userRequestorId string, postRootId string) (*model.ChannelMember, *model.AppError) {
|
||||||
if result := <-a.Srv.Store.Channel().GetMember(channel.Id, userId); result.Err != nil {
|
if result := <-a.Srv.Store.Channel().GetMember(channel.Id, userId); result.Err != nil {
|
||||||
if result.Err.Id != store.MISSING_CHANNEL_MEMBER_ERROR {
|
if result.Err.Id != store.MISSING_CHANNEL_MEMBER_ERROR {
|
||||||
return nil, result.Err
|
return nil, result.Err
|
||||||
@@ -585,7 +585,7 @@ func (a *App) AddChannelMember(userId string, channel *model.Channel, userReques
|
|||||||
a.postJoinChannelMessage(user, channel)
|
a.postJoinChannelMessage(user, channel)
|
||||||
} else {
|
} else {
|
||||||
a.Go(func() {
|
a.Go(func() {
|
||||||
a.PostAddToChannelMessage(userRequestor, user, channel)
|
a.PostAddToChannelMessage(userRequestor, user, channel, postRootId)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -986,12 +986,13 @@ func (a *App) postLeaveChannelMessage(user *model.User, channel *model.Channel)
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) PostAddToChannelMessage(user *model.User, addedUser *model.User, channel *model.Channel) *model.AppError {
|
func (a *App) PostAddToChannelMessage(user *model.User, addedUser *model.User, channel *model.Channel, postRootId string) *model.AppError {
|
||||||
post := &model.Post{
|
post := &model.Post{
|
||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: fmt.Sprintf(utils.T("api.channel.add_member.added"), addedUser.Username, user.Username),
|
Message: fmt.Sprintf(utils.T("api.channel.add_member.added"), addedUser.Username, user.Username),
|
||||||
Type: model.POST_ADD_TO_CHANNEL,
|
Type: model.POST_ADD_TO_CHANNEL,
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
|
RootId: postRootId,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"username": user.Username,
|
"username": user.Username,
|
||||||
"addedUsername": addedUser.Username,
|
"addedUsername": addedUser.Username,
|
||||||
|
|||||||
@@ -1663,6 +1663,17 @@ func (c *Client4) AddChannelMember(channelId, userId string) (*ChannelMember, *R
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AddChannelMemberWithRootId adds user to channel and return a channel member. Post add to channel message has the postRootId.
|
||||||
|
func (c *Client4) AddChannelMemberWithRootId(channelId, userId, postRootId string) (*ChannelMember, *Response) {
|
||||||
|
requestBody := map[string]string{"user_id": userId, "post_root_id": postRootId}
|
||||||
|
if r, err := c.DoApiPost(c.GetChannelMembersRoute(channelId)+"", MapToJson(requestBody)); err != nil {
|
||||||
|
return nil, BuildErrorResponse(r, err)
|
||||||
|
} else {
|
||||||
|
defer closeBody(r)
|
||||||
|
return ChannelMemberFromJson(r.Body), BuildResponse(r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// RemoveUserFromChannel will delete the channel member object for a user, effectively removing the user from a channel.
|
// RemoveUserFromChannel will delete the channel member object for a user, effectively removing the user from a channel.
|
||||||
func (c *Client4) RemoveUserFromChannel(channelId, userId string) (bool, *Response) {
|
func (c *Client4) RemoveUserFromChannel(channelId, userId string) (bool, *Response) {
|
||||||
if r, err := c.DoApiDelete(c.GetChannelMemberRoute(channelId, userId)); err != nil {
|
if r, err := c.DoApiDelete(c.GetChannelMemberRoute(channelId, userId)); err != nil {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user