Skip to content

Commit f0348be

Browse files
committed
refactor: calculate if only public should be shown in a single place next the the opts
1 parent fa35ace commit f0348be

File tree

7 files changed

+37
-26
lines changed

7 files changed

+37
-26
lines changed

models/organization/org.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,9 @@ func (org *Organization) LoadTeams(ctx context.Context) ([]*Team, error) {
141141
}
142142

143143
// GetMembers returns all members of organization.
144-
func (org *Organization) GetMembers(ctx context.Context) (user_model.UserList, map[int64]bool, error) {
144+
func (org *Organization) GetMembers(ctx context.Context, doer *user_model.User) (user_model.UserList, map[int64]bool, error) {
145145
return FindOrgMembers(ctx, &FindOrgMembersOpts{
146+
Doer: doer,
146147
OrgID: org.ID,
147148
})
148149
}
@@ -195,16 +196,22 @@ func (org *Organization) CanCreateRepo() bool {
195196
// FindOrgMembersOpts represensts find org members conditions
196197
type FindOrgMembersOpts struct {
197198
db.ListOptions
198-
OrgID int64
199-
PublicOnly bool
199+
Doer *user_model.User
200+
IsMember bool
201+
OrgID int64
202+
}
203+
204+
func (opts FindOrgMembersOpts) PublicOnly() bool {
205+
return opts.Doer == nil || !opts.IsMember && !opts.Doer.IsAdmin
200206
}
201207

202208
// CountOrgMembers counts the organization's members
203209
func CountOrgMembers(ctx context.Context, opts *FindOrgMembersOpts) (int64, error) {
204210
sess := db.GetEngine(ctx).Where("org_id=?", opts.OrgID)
205-
if opts.PublicOnly {
211+
if opts.PublicOnly() {
206212
sess.And("is_public = ?", true)
207213
}
214+
208215
return sess.Count(new(OrgUser))
209216
}
210217

@@ -525,9 +532,10 @@ func GetOrgsCanCreateRepoByUserID(ctx context.Context, userID int64) ([]*Organiz
525532
// GetOrgUsersByOrgID returns all organization-user relations by organization ID.
526533
func GetOrgUsersByOrgID(ctx context.Context, opts *FindOrgMembersOpts) ([]*OrgUser, error) {
527534
sess := db.GetEngine(ctx).Where("org_id=?", opts.OrgID)
528-
if opts.PublicOnly {
535+
if opts.PublicOnly() {
529536
sess.And("is_public = ?", true)
530537
}
538+
531539
if opts.ListOptions.PageSize > 0 {
532540
sess = db.SetSessionPagination(sess, opts)
533541

models/organization/org_test.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func TestUser_GetTeams(t *testing.T) {
103103
func TestUser_GetMembers(t *testing.T) {
104104
assert.NoError(t, unittest.PrepareTestDatabase())
105105
org := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3})
106-
members, _, err := org.GetMembers(db.DefaultContext)
106+
members, _, err := org.GetMembers(db.DefaultContext, &user_model.User{IsAdmin: true})
107107
assert.NoError(t, err)
108108
if assert.Len(t, members, 3) {
109109
assert.Equal(t, int64(2), members[0].ID)
@@ -213,7 +213,6 @@ func TestGetOrgUsersByOrgID(t *testing.T) {
213213
orgUsers, err := organization.GetOrgUsersByOrgID(db.DefaultContext, &organization.FindOrgMembersOpts{
214214
ListOptions: db.ListOptions{},
215215
OrgID: 3,
216-
PublicOnly: false,
217216
})
218217
assert.NoError(t, err)
219218
if assert.Len(t, orgUsers, 3) {
@@ -240,7 +239,6 @@ func TestGetOrgUsersByOrgID(t *testing.T) {
240239
orgUsers, err = organization.GetOrgUsersByOrgID(db.DefaultContext, &organization.FindOrgMembersOpts{
241240
ListOptions: db.ListOptions{},
242241
OrgID: unittest.NonexistentID,
243-
PublicOnly: false,
244242
})
245243
assert.NoError(t, err)
246244
assert.Len(t, orgUsers, 0)

models/organization/org_user_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ func TestUserListIsPublicMember(t *testing.T) {
9494
func testUserListIsPublicMember(t *testing.T, orgID int64, expected map[int64]bool) {
9595
org, err := organization.GetOrgByID(db.DefaultContext, orgID)
9696
assert.NoError(t, err)
97-
_, membersIsPublic, err := org.GetMembers(db.DefaultContext)
97+
_, membersIsPublic, err := org.GetMembers(db.DefaultContext, &user_model.User{IsAdmin: true})
9898
assert.NoError(t, err)
9999
assert.Equal(t, expected, membersIsPublic)
100100
}
@@ -121,7 +121,7 @@ func TestUserListIsUserOrgOwner(t *testing.T) {
121121
func testUserListIsUserOrgOwner(t *testing.T, orgID int64, expected map[int64]bool) {
122122
org, err := organization.GetOrgByID(db.DefaultContext, orgID)
123123
assert.NoError(t, err)
124-
members, _, err := org.GetMembers(db.DefaultContext)
124+
members, _, err := org.GetMembers(db.DefaultContext, &user_model.User{IsAdmin: true})
125125
assert.NoError(t, err)
126126
assert.Equal(t, expected, organization.IsUserOrgOwner(db.DefaultContext, members, orgID))
127127
}

routers/api/v1/org/member.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@ import (
1818
)
1919

2020
// listMembers list an organization's members
21-
func listMembers(ctx *context.APIContext, publicOnly bool) {
21+
func listMembers(ctx *context.APIContext, isMember bool) {
2222
opts := &organization.FindOrgMembersOpts{
23+
Doer: ctx.Doer,
24+
IsMember: isMember,
2325
OrgID: ctx.Org.Organization.ID,
24-
PublicOnly: publicOnly,
2526
ListOptions: utils.GetListOptions(ctx),
2627
}
2728

@@ -73,16 +74,19 @@ func ListMembers(ctx *context.APIContext) {
7374
// "404":
7475
// "$ref": "#/responses/notFound"
7576

76-
publicOnly := true
77+
var (
78+
isMember bool
79+
err error
80+
)
81+
7782
if ctx.Doer != nil {
78-
isMember, err := ctx.Org.Organization.IsOrgMember(ctx, ctx.Doer.ID)
83+
isMember, err = ctx.Org.Organization.IsOrgMember(ctx, ctx.Doer.ID)
7984
if err != nil {
8085
ctx.Error(http.StatusInternalServerError, "IsOrgMember", err)
8186
return
8287
}
83-
publicOnly = !isMember && !ctx.Doer.IsAdmin
8488
}
85-
listMembers(ctx, publicOnly)
89+
listMembers(ctx, isMember)
8690
}
8791

8892
// ListPublicMembers list an organization's public members
@@ -112,7 +116,7 @@ func ListPublicMembers(ctx *context.APIContext) {
112116
// "404":
113117
// "$ref": "#/responses/notFound"
114118

115-
listMembers(ctx, true)
119+
listMembers(ctx, false)
116120
}
117121

118122
// IsMember check if a user is a member of an organization

routers/web/org/home.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,12 @@ func home(ctx *context.Context, viewRepositories bool) {
9595
}
9696

9797
opts := &organization.FindOrgMembersOpts{
98+
Doer: ctx.Doer,
9899
OrgID: org.ID,
99-
PublicOnly: ctx.Org.PublicMemberOnly,
100+
IsMember: ctx.Org.IsMember,
100101
ListOptions: db.ListOptions{Page: 1, PageSize: 25},
101102
}
103+
102104
members, _, err := organization.FindOrgMembers(ctx, opts)
103105
if err != nil {
104106
ctx.ServerError("FindOrgMembers", err)

routers/web/org/members.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ func Members(ctx *context.Context) {
3434
}
3535

3636
opts := &organization.FindOrgMembersOpts{
37-
OrgID: org.ID,
38-
PublicOnly: true,
37+
Doer: ctx.Doer,
38+
OrgID: org.ID,
3939
}
4040

4141
if ctx.Doer != nil {
@@ -44,9 +44,9 @@ func Members(ctx *context.Context) {
4444
ctx.Error(http.StatusInternalServerError, "IsOrgMember")
4545
return
4646
}
47-
opts.PublicOnly = !isMember && !ctx.Doer.IsAdmin
47+
opts.IsMember = isMember
4848
}
49-
ctx.Data["PublicOnly"] = opts.PublicOnly
49+
ctx.Data["PublicOnly"] = opts.PublicOnly()
5050

5151
total, err := organization.CountOrgMembers(ctx, opts)
5252
if err != nil {

services/context/org.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ type Organization struct {
2626
Organization *organization.Organization
2727
OrgLink string
2828
CanCreateOrgRepo bool
29-
PublicMemberOnly bool // Only display public members
3029

3130
Team *organization.Team
3231
Teams []*organization.Team
@@ -176,10 +175,10 @@ func HandleOrgAssignment(ctx *Context, args ...bool) {
176175
ctx.Data["OrgLink"] = ctx.Org.OrgLink
177176

178177
// Member
179-
ctx.Org.PublicMemberOnly = ctx.Doer == nil || !ctx.Org.IsMember && !ctx.Doer.IsAdmin
180178
opts := &organization.FindOrgMembersOpts{
181-
OrgID: org.ID,
182-
PublicOnly: ctx.Org.PublicMemberOnly,
179+
Doer: ctx.Doer,
180+
OrgID: org.ID,
181+
IsMember: ctx.Org.IsMember,
183182
}
184183
ctx.Data["NumMembers"], err = organization.CountOrgMembers(ctx, opts)
185184
if err != nil {

0 commit comments

Comments
 (0)