| @@ -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 | ||||
| } | } | ||||