From 484e3dc5a9012a50838bf8d00de3ffd136c0759b Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 14 Dec 2019 14:36:59 +0800 Subject: [PATCH] site admin could view org's members (#9346) --- routers/org/home.go | 133 ++++++++++++++++++++++++++++++++++++++++ routers/org/members.go | 2 +- routers/user/home.go | 115 ---------------------------------- routers/user/profile.go | 3 +- 4 files changed, 136 insertions(+), 117 deletions(-) create mode 100644 routers/org/home.go diff --git a/routers/org/home.go b/routers/org/home.go new file mode 100644 index 000000000..9c24fe72f --- /dev/null +++ b/routers/org/home.go @@ -0,0 +1,133 @@ +// Copyright 2019 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package org + +import ( + "strings" + + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/base" + "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/setting" +) + +const ( + tplOrgHome base.TplName = "org/home" +) + +// Home show organization home page +func Home(ctx *context.Context) { + ctx.SetParams(":org", ctx.Params(":username")) + context.HandleOrgAssignment(ctx) + if ctx.Written() { + return + } + + org := ctx.Org.Organization + + if !models.HasOrgVisible(org, ctx.User) { + ctx.NotFound("HasOrgVisible", nil) + return + } + + ctx.Data["Title"] = org.DisplayName() + + var orderBy models.SearchOrderBy + ctx.Data["SortType"] = ctx.Query("sort") + switch ctx.Query("sort") { + case "newest": + orderBy = models.SearchOrderByNewest + case "oldest": + orderBy = models.SearchOrderByOldest + case "recentupdate": + orderBy = models.SearchOrderByRecentUpdated + case "leastupdate": + orderBy = models.SearchOrderByLeastUpdated + case "reversealphabetically": + orderBy = models.SearchOrderByAlphabeticallyReverse + case "alphabetically": + orderBy = models.SearchOrderByAlphabetically + case "moststars": + orderBy = models.SearchOrderByStarsReverse + case "feweststars": + orderBy = models.SearchOrderByStars + case "mostforks": + orderBy = models.SearchOrderByForksReverse + case "fewestforks": + orderBy = models.SearchOrderByForks + default: + ctx.Data["SortType"] = "recentupdate" + orderBy = models.SearchOrderByRecentUpdated + } + + keyword := strings.Trim(ctx.Query("q"), " ") + ctx.Data["Keyword"] = keyword + + page := ctx.QueryInt("page") + if page <= 0 { + page = 1 + } + + var ( + repos []*models.Repository + count int64 + err error + ) + repos, count, err = models.SearchRepository(&models.SearchRepoOptions{ + Keyword: keyword, + OwnerID: org.ID, + OrderBy: orderBy, + Private: ctx.IsSigned, + UserIsAdmin: ctx.IsUserSiteAdmin(), + UserID: ctx.Data["SignedUserID"].(int64), + Page: page, + IsProfile: true, + PageSize: setting.UI.User.RepoPagingNum, + IncludeDescription: setting.UI.SearchRepoDescription, + }) + if err != nil { + ctx.ServerError("SearchRepository", err) + return + } + + var opts = models.FindOrgMembersOpts{ + OrgID: org.ID, + PublicOnly: true, + Limit: 25, + } + + if ctx.User != nil { + isMember, err := org.IsOrgMember(ctx.User.ID) + if err != nil { + ctx.Error(500, "IsOrgMember") + return + } + opts.PublicOnly = !isMember && !ctx.User.IsAdmin + } + + members, _, err := models.FindOrgMembers(opts) + if err != nil { + ctx.ServerError("FindOrgMembers", err) + return + } + + membersCount, err := models.CountOrgMembers(opts) + if err != nil { + ctx.ServerError("CountOrgMembers", err) + return + } + + ctx.Data["Repos"] = repos + ctx.Data["Total"] = count + ctx.Data["MembersTotal"] = membersCount + ctx.Data["Members"] = members + ctx.Data["Teams"] = org.Teams + + pager := context.NewPagination(int(count), setting.UI.User.RepoPagingNum, page, 5) + pager.SetDefaultParams(ctx) + ctx.Data["Page"] = pager + + ctx.HTML(200, tplOrgHome) +} diff --git a/routers/org/members.go b/routers/org/members.go index b9805c2c0..6bccb3d97 100644 --- a/routers/org/members.go +++ b/routers/org/members.go @@ -41,7 +41,7 @@ func Members(ctx *context.Context) { ctx.Error(500, "IsOrgMember") return } - opts.PublicOnly = !isMember + opts.PublicOnly = !isMember && !ctx.User.IsAdmin } total, err := models.CountOrgMembers(opts) diff --git a/routers/user/home.go b/routers/user/home.go index 2eff88910..a1060f371 100644 --- a/routers/user/home.go +++ b/routers/user/home.go @@ -29,7 +29,6 @@ const ( tplDashboard base.TplName = "user/dashboard/dashboard" tplIssues base.TplName = "user/dashboard/issues" tplProfile base.TplName = "user/profile" - tplOrgHome base.TplName = "org/home" ) // getDashboardContextUser finds out dashboard is viewing as which context user. @@ -463,120 +462,6 @@ func ShowGPGKeys(ctx *context.Context, uid int64) { ctx.PlainText(200, buf.Bytes()) } -func showOrgProfile(ctx *context.Context) { - ctx.SetParams(":org", ctx.Params(":username")) - context.HandleOrgAssignment(ctx) - if ctx.Written() { - return - } - - org := ctx.Org.Organization - - if !models.HasOrgVisible(org, ctx.User) { - ctx.NotFound("HasOrgVisible", nil) - return - } - - ctx.Data["Title"] = org.DisplayName() - - var orderBy models.SearchOrderBy - ctx.Data["SortType"] = ctx.Query("sort") - switch ctx.Query("sort") { - case "newest": - orderBy = models.SearchOrderByNewest - case "oldest": - orderBy = models.SearchOrderByOldest - case "recentupdate": - orderBy = models.SearchOrderByRecentUpdated - case "leastupdate": - orderBy = models.SearchOrderByLeastUpdated - case "reversealphabetically": - orderBy = models.SearchOrderByAlphabeticallyReverse - case "alphabetically": - orderBy = models.SearchOrderByAlphabetically - case "moststars": - orderBy = models.SearchOrderByStarsReverse - case "feweststars": - orderBy = models.SearchOrderByStars - case "mostforks": - orderBy = models.SearchOrderByForksReverse - case "fewestforks": - orderBy = models.SearchOrderByForks - default: - ctx.Data["SortType"] = "recentupdate" - orderBy = models.SearchOrderByRecentUpdated - } - - keyword := strings.Trim(ctx.Query("q"), " ") - ctx.Data["Keyword"] = keyword - - page := ctx.QueryInt("page") - if page <= 0 { - page = 1 - } - - var ( - repos []*models.Repository - count int64 - err error - ) - repos, count, err = models.SearchRepository(&models.SearchRepoOptions{ - Keyword: keyword, - OwnerID: org.ID, - OrderBy: orderBy, - Private: ctx.IsSigned, - UserIsAdmin: ctx.IsUserSiteAdmin(), - UserID: ctx.Data["SignedUserID"].(int64), - Page: page, - IsProfile: true, - PageSize: setting.UI.User.RepoPagingNum, - IncludeDescription: setting.UI.SearchRepoDescription, - }) - if err != nil { - ctx.ServerError("SearchRepository", err) - return - } - - var opts = models.FindOrgMembersOpts{ - OrgID: org.ID, - PublicOnly: true, - Limit: 25, - } - - if ctx.User != nil { - isMember, err := org.IsOrgMember(ctx.User.ID) - if err != nil { - ctx.Error(500, "IsOrgMember") - return - } - opts.PublicOnly = !isMember - } - - members, _, err := models.FindOrgMembers(opts) - if err != nil { - ctx.ServerError("FindOrgMembers", err) - return - } - - membersCount, err := models.CountOrgMembers(opts) - if err != nil { - ctx.ServerError("CountOrgMembers", err) - return - } - - ctx.Data["Repos"] = repos - ctx.Data["Total"] = count - ctx.Data["MembersTotal"] = membersCount - ctx.Data["Members"] = members - ctx.Data["Teams"] = org.Teams - - pager := context.NewPagination(int(count), setting.UI.User.RepoPagingNum, page, 5) - pager.SetDefaultParams(ctx) - ctx.Data["Page"] = pager - - ctx.HTML(200, tplOrgHome) -} - // Email2User show user page via email func Email2User(ctx *context.Context) { u, err := models.GetUserByEmail(ctx.Query("email")) diff --git a/routers/user/profile.go b/routers/user/profile.go index 8a62ddeac..90e832b53 100644 --- a/routers/user/profile.go +++ b/routers/user/profile.go @@ -15,6 +15,7 @@ import ( "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/routers/org" "code.gitea.io/gitea/routers/repo" ) @@ -83,7 +84,7 @@ func Profile(ctx *context.Context) { } if ctxUser.IsOrganization() { - showOrgProfile(ctx) + org.Home(ctx) return }