summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Simmons <1382389+jasimmons@users.noreply.github.com>2018-10-22 08:49:50 -0400
committerJoram Wilander <jwawilander@gmail.com>2018-10-22 08:49:50 -0400
commit1ee872578c734956acc7f5e4168638de244c3ce2 (patch)
treef0cf22a79c7b1b903ce5093479ee2cda509e7805
parent6c6638f05e99f1463ff33983540aedb35271dbfc (diff)
downloadchat-1ee872578c734956acc7f5e4168638de244c3ce2.tar.gz
chat-1ee872578c734956acc7f5e4168638de244c3ce2.tar.bz2
chat-1ee872578c734956acc7f5e4168638de244c3ce2.zip
GH-9636 plugins api GetUsersInChannelByStatus (#9645)
* adds GetUsersInChannelByStatus to plugin api with generated rpc code. * fixed typo in comment with actual func name * replaced Response model with AppError in output of GetUsersInChannelByStatus * removed etag param from GetUsersInChannelByStatus since it is not used * plugin api for GetUsersInChannelByStatus updated to take the limit, conforming to the app api. * fixed an issue in my own logic on app/plugin integration. * adds GetUsersInChannelByStatus to plugin api with generated rpc code. * fixed typo in comment with actual func name * replaced Response model with AppError in output of GetUsersInChannelByStatus * removed etag param from GetUsersInChannelByStatus since it is not used * plugin api for GetUsersInChannelByStatus updated to take the limit, conforming to the app api. * fixed an issue in my own logic on app/plugin integration. * GetUsersInChannelByStatus changed to more generic GetUsersInChannel which takes a sortBy parameter, allowing for more granular/extensible sorting functionality in the future * GetUsersInChannel accepts sort parameter of 'username' and 'status'. Both values are consts in model pkg. * Documents minimum server version for GetUsersInChannel. * adds GetUsersInChannelByStatus to plugin api with generated rpc code. * fixed typo in comment with actual func name * replaced Response model with AppError in output of GetUsersInChannelByStatus * removed etag param from GetUsersInChannelByStatus since it is not used * plugin api for GetUsersInChannelByStatus updated to take the limit, conforming to the app api. * fixed an issue in my own logic on app/plugin integration. * adds GetUsersInChannelByStatus to plugin api with generated rpc code. * Resolved conflict on rebase * replaced Response model with AppError in output of GetUsersInChannelByStatus * removed etag param from GetUsersInChannelByStatus since it is not used * plugin api for GetUsersInChannelByStatus updated to take the limit, conforming to the app api. * fixed an issue in my own logic on app/plugin integration. * GetUsersInChannelByStatus changed to more generic GetUsersInChannel which takes a sortBy parameter, allowing for more granular/extensible sorting functionality in the future * GetUsersInChannel accepts sort parameter of 'username' and 'status'. Both values are consts in model pkg. * Documents minimum server version for GetUsersInChannel. * replaces GetUsersInChannel from #9608 / #9643 with sortBy functionality
-rw-r--r--app/plugin_api.go16
-rw-r--r--model/channel.go3
-rw-r--r--model/client4.go2
-rw-r--r--plugin/api.go11
-rw-r--r--plugin/client_rpc_generated.go63
-rw-r--r--plugin/plugintest/api.go25
6 files changed, 67 insertions, 53 deletions
diff --git a/app/plugin_api.go b/app/plugin_api.go
index 48f07275e..3bb638a24 100644
--- a/app/plugin_api.go
+++ b/app/plugin_api.go
@@ -200,6 +200,18 @@ func (api *PluginAPI) UpdateUserStatus(userId, status string) (*model.Status, *m
return api.app.GetStatus(userId)
}
+
+func (api *PluginAPI) GetUsersInChannel(channelId, sortBy string, page, perPage int) ([]*model.User, *model.AppError) {
+ switch sortBy {
+ case model.CHANNEL_SORT_BY_USERNAME:
+ return api.app.GetUsersInChannel(channelId, page*perPage, perPage)
+ case model.CHANNEL_SORT_BY_STATUS:
+ return api.app.GetUsersInChannelByStatus(channelId, page*perPage, perPage)
+ default:
+ return nil, model.NewAppError("GetUsersInChannel", "plugin.api.get_users_in_channel", nil, "invalid sort option", http.StatusBadRequest)
+ }
+}
+
func (api *PluginAPI) GetLDAPUserAttributes(userId string, attributes []string) (map[string]string, *model.AppError) {
if api.app.Ldap == nil {
return nil, model.NewAppError("GetLdapUserAttributes", "ent.ldap.disabled.app_error", nil, "", http.StatusNotImplemented)
@@ -298,10 +310,6 @@ func (api *PluginAPI) DeleteChannelMember(channelId, userId string) *model.AppEr
return api.app.LeaveChannel(channelId, userId)
}
-func (api *PluginAPI) GetUsersInChannel(channelId string, page int, perPage int) ([]*model.User, *model.AppError) {
- return api.app.GetUsersInChannel(channelId, page*perPage, perPage)
-}
-
func (api *PluginAPI) CreatePost(post *model.Post) (*model.Post, *model.AppError) {
return api.app.CreatePostMissingChannel(post, true)
}
diff --git a/model/channel.go b/model/channel.go
index 529c49d35..f8867babb 100644
--- a/model/channel.go
+++ b/model/channel.go
@@ -29,6 +29,9 @@ const (
CHANNEL_HEADER_MAX_RUNES = 1024
CHANNEL_PURPOSE_MAX_RUNES = 250
CHANNEL_CACHE_SIZE = 25000
+
+ CHANNEL_SORT_BY_USERNAME = "username"
+ CHANNEL_SORT_BY_STATUS = "status"
)
type Channel struct {
diff --git a/model/client4.go b/model/client4.go
index a9b4d3826..cce3b62ef 100644
--- a/model/client4.go
+++ b/model/client4.go
@@ -832,7 +832,7 @@ func (c *Client4) GetUsersInChannel(channelId string, page int, perPage int, eta
}
}
-// GetUsersInChannelStatus returns a page of users in a channel. Page counting starts at 0. Sorted by Status
+// GetUsersInChannelByStatus returns a page of users in a channel. Page counting starts at 0. Sorted by Status
func (c *Client4) GetUsersInChannelByStatus(channelId string, page int, perPage int, etag string) ([]*User, *Response) {
query := fmt.Sprintf("?in_channel=%v&page=%v&per_page=%v&sort=status", channelId, page, perPage)
if r, err := c.DoApiGet(c.GetUsersRoute()+query, etag); err != nil {
diff --git a/plugin/api.go b/plugin/api.go
index dc60bb57a..0f481784e 100644
--- a/plugin/api.go
+++ b/plugin/api.go
@@ -77,6 +77,12 @@ type API interface {
// The status parameter can be: "online", "away", "dnd", or "offline".
UpdateUserStatus(userId, status string) (*model.Status, *model.AppError)
+ // GetUsersInChannel returns a page of users in a channel. Page counting starts at 0.
+ // The sortBy parameter can be: "username" or "status".
+ //
+ // Minimum server version: 5.6
+ GetUsersInChannel(channelId, sortBy string, page, perPage int) ([]*model.User, *model.AppError)
+
// GetLDAPUserAttributes will return LDAP attributes for a user.
// The attributes parameter should be a list of attributes to pull.
// Returns a map with attribute names as keys and the user's attributes as values.
@@ -183,11 +189,6 @@ type API interface {
// DeleteChannelMember deletes a channel membership for a user.
DeleteChannelMember(channelId, userId string) *model.AppError
- // GetUsersInChannel gets users in given channel.
- //
- // Minimum server version: 5.6
- GetUsersInChannel(channelId string, page int, perPage int) ([]*model.User, *model.AppError)
-
// CreatePost creates a post.
CreatePost(post *model.Post) (*model.Post, *model.AppError)
diff --git a/plugin/client_rpc_generated.go b/plugin/client_rpc_generated.go
index d99b7b0e6..7ed016c24 100644
--- a/plugin/client_rpc_generated.go
+++ b/plugin/client_rpc_generated.go
@@ -1004,6 +1004,38 @@ func (s *apiRPCServer) UpdateUserStatus(args *Z_UpdateUserStatusArgs, returns *Z
return nil
}
+type Z_GetUsersInChannelArgs struct {
+ A string
+ B string
+ C int
+ D int
+}
+
+type Z_GetUsersInChannelReturns struct {
+ A []*model.User
+ B *model.AppError
+}
+
+func (g *apiRPCClient) GetUsersInChannel(channelId, sortBy string, page, perPage int) ([]*model.User, *model.AppError) {
+ _args := &Z_GetUsersInChannelArgs{channelId, sortBy, page, perPage}
+ _returns := &Z_GetUsersInChannelReturns{}
+ if err := g.client.Call("Plugin.GetUsersInChannel", _args, _returns); err != nil {
+ log.Printf("RPC call to GetUsersInChannel API failed: %s", err.Error())
+ }
+ return _returns.A, _returns.B
+}
+
+func (s *apiRPCServer) GetUsersInChannel(args *Z_GetUsersInChannelArgs, returns *Z_GetUsersInChannelReturns) error {
+ if hook, ok := s.impl.(interface {
+ GetUsersInChannel(channelId, sortBy string, page, perPage int) ([]*model.User, *model.AppError)
+ }); ok {
+ returns.A, returns.B = hook.GetUsersInChannel(args.A, args.B, args.C, args.D)
+ } else {
+ return encodableError(fmt.Errorf("API GetUsersInChannel called but not implemented."))
+ }
+ return nil
+}
+
type Z_GetLDAPUserAttributesArgs struct {
A string
B []string
@@ -1928,37 +1960,6 @@ func (s *apiRPCServer) DeleteChannelMember(args *Z_DeleteChannelMemberArgs, retu
return nil
}
-type Z_GetUsersInChannelArgs struct {
- A string
- B int
- C int
-}
-
-type Z_GetUsersInChannelReturns struct {
- A []*model.User
- B *model.AppError
-}
-
-func (g *apiRPCClient) GetUsersInChannel(channelId string, page int, perPage int) ([]*model.User, *model.AppError) {
- _args := &Z_GetUsersInChannelArgs{channelId, page, perPage}
- _returns := &Z_GetUsersInChannelReturns{}
- if err := g.client.Call("Plugin.GetUsersInChannel", _args, _returns); err != nil {
- log.Printf("RPC call to GetUsersInChannel API failed: %s", err.Error())
- }
- return _returns.A, _returns.B
-}
-
-func (s *apiRPCServer) GetUsersInChannel(args *Z_GetUsersInChannelArgs, returns *Z_GetUsersInChannelReturns) error {
- if hook, ok := s.impl.(interface {
- GetUsersInChannel(channelId string, page int, perPage int) ([]*model.User, *model.AppError)
- }); ok {
- returns.A, returns.B = hook.GetUsersInChannel(args.A, args.B, args.C)
- } else {
- return encodableError(fmt.Errorf("API GetUsersInChannel called but not implemented."))
- }
- return nil
-}
-
type Z_CreatePostArgs struct {
A *model.Post
}
diff --git a/plugin/plugintest/api.go b/plugin/plugintest/api.go
index b3df3616f..4e94e17af 100644
--- a/plugin/plugintest/api.go
+++ b/plugin/plugintest/api.go
@@ -1243,13 +1243,13 @@ func (_m *API) GetUsersByUsernames(usernames []string) ([]*model.User, *model.Ap
return r0, r1
}
-// GetUsersInTeam provides a mock function with given fields: teamId, page, perPage
-func (_m *API) GetUsersInTeam(teamId string, page int, perPage int) ([]*model.User, *model.AppError) {
- ret := _m.Called(teamId, page, perPage)
+// GetUsersInChannel provides a mock function with given fields: channelId, sortBy, page, perPage
+func (_m *API) GetUsersInChannel(channelId string, sortBy string, page int, perPage int) ([]*model.User, *model.AppError) {
+ ret := _m.Called(channelId, sortBy, page, perPage)
var r0 []*model.User
- if rf, ok := ret.Get(0).(func(string, int, int) []*model.User); ok {
- r0 = rf(teamId, page, perPage)
+ if rf, ok := ret.Get(0).(func(string, string, int, int) []*model.User); ok {
+ r0 = rf(channelId, sortBy, page, perPage)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]*model.User)
@@ -1257,8 +1257,9 @@ func (_m *API) GetUsersInTeam(teamId string, page int, perPage int) ([]*model.Us
}
var r1 *model.AppError
- if rf, ok := ret.Get(1).(func(string, int, int) *model.AppError); ok {
- r1 = rf(teamId, page, perPage)
+
+ if rf, ok := ret.Get(1).(func(string, string, int, int) *model.AppError); ok {
+ r1 = rf(channelId, sortBy, page, perPage)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
@@ -1268,13 +1269,13 @@ func (_m *API) GetUsersInTeam(teamId string, page int, perPage int) ([]*model.Us
return r0, r1
}
-// GetUsersInChannel provides a mock function with given fields: channelId, page, perPage
-func (_m *API) GetUsersInChannel(channelId string, page int, perPage int) ([]*model.User, *model.AppError) {
- ret := _m.Called(channelId, page, perPage)
+// GetUsersInTeam provides a mock function with given fields: teamId, page, perPage
+func (_m *API) GetUsersInTeam(teamId string, page int, perPage int) ([]*model.User, *model.AppError) {
+ ret := _m.Called(teamId, page, perPage)
var r0 []*model.User
if rf, ok := ret.Get(0).(func(string, int, int) []*model.User); ok {
- r0 = rf(channelId, page, perPage)
+ r0 = rf(teamId, page, perPage)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]*model.User)
@@ -1283,7 +1284,7 @@ func (_m *API) GetUsersInChannel(channelId string, page int, perPage int) ([]*mo
var r1 *model.AppError
if rf, ok := ret.Get(1).(func(string, int, int) *model.AppError); ok {
- r1 = rf(channelId, page, perPage)
+ r1 = rf(teamId, page, perPage)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)