mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	site admin could view org's members (#9346)
This commit is contained in:
		
				
					committed by
					
						 techknowlogick
						techknowlogick
					
				
			
			
				
	
			
			
			
						parent
						
							f6ba912cd6
						
					
				
				
					commit
					484e3dc5a9
				
			
							
								
								
									
										133
									
								
								routers/org/home.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								routers/org/home.go
									
									
									
									
									
										Normal file
									
								
							| @@ -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) | ||||||
|  | } | ||||||
| @@ -41,7 +41,7 @@ func Members(ctx *context.Context) { | |||||||
| 			ctx.Error(500, "IsOrgMember") | 			ctx.Error(500, "IsOrgMember") | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 		opts.PublicOnly = !isMember | 		opts.PublicOnly = !isMember && !ctx.User.IsAdmin | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	total, err := models.CountOrgMembers(opts) | 	total, err := models.CountOrgMembers(opts) | ||||||
|   | |||||||
| @@ -29,7 +29,6 @@ const ( | |||||||
| 	tplDashboard base.TplName = "user/dashboard/dashboard" | 	tplDashboard base.TplName = "user/dashboard/dashboard" | ||||||
| 	tplIssues    base.TplName = "user/dashboard/issues" | 	tplIssues    base.TplName = "user/dashboard/issues" | ||||||
| 	tplProfile   base.TplName = "user/profile" | 	tplProfile   base.TplName = "user/profile" | ||||||
| 	tplOrgHome   base.TplName = "org/home" |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // getDashboardContextUser finds out dashboard is viewing as which context user. | // 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()) | 	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 | // Email2User show user page via email | ||||||
| func Email2User(ctx *context.Context) { | func Email2User(ctx *context.Context) { | ||||||
| 	u, err := models.GetUserByEmail(ctx.Query("email")) | 	u, err := models.GetUserByEmail(ctx.Query("email")) | ||||||
|   | |||||||
| @@ -15,6 +15,7 @@ import ( | |||||||
| 	"code.gitea.io/gitea/modules/context" | 	"code.gitea.io/gitea/modules/context" | ||||||
| 	"code.gitea.io/gitea/modules/setting" | 	"code.gitea.io/gitea/modules/setting" | ||||||
| 	"code.gitea.io/gitea/modules/util" | 	"code.gitea.io/gitea/modules/util" | ||||||
|  | 	"code.gitea.io/gitea/routers/org" | ||||||
| 	"code.gitea.io/gitea/routers/repo" | 	"code.gitea.io/gitea/routers/repo" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -83,7 +84,7 @@ func Profile(ctx *context.Context) { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if ctxUser.IsOrganization() { | 	if ctxUser.IsOrganization() { | ||||||
| 		showOrgProfile(ctx) | 		org.Home(ctx) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user