code.gitea.io/gitea@v1.21.7/routers/web/org/home.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package org 5 6 import ( 7 "net/http" 8 "strings" 9 10 "code.gitea.io/gitea/models/db" 11 "code.gitea.io/gitea/models/organization" 12 repo_model "code.gitea.io/gitea/models/repo" 13 user_model "code.gitea.io/gitea/models/user" 14 "code.gitea.io/gitea/modules/base" 15 "code.gitea.io/gitea/modules/context" 16 "code.gitea.io/gitea/modules/markup" 17 "code.gitea.io/gitea/modules/markup/markdown" 18 "code.gitea.io/gitea/modules/setting" 19 shared_user "code.gitea.io/gitea/routers/web/shared/user" 20 ) 21 22 const ( 23 tplOrgHome base.TplName = "org/home" 24 ) 25 26 // Home show organization home page 27 func Home(ctx *context.Context) { 28 uname := ctx.Params(":username") 29 30 if strings.HasSuffix(uname, ".keys") || strings.HasSuffix(uname, ".gpg") { 31 ctx.NotFound("", nil) 32 return 33 } 34 35 ctx.SetParams(":org", uname) 36 context.HandleOrgAssignment(ctx) 37 if ctx.Written() { 38 return 39 } 40 41 org := ctx.Org.Organization 42 43 ctx.Data["PageIsUserProfile"] = true 44 ctx.Data["Title"] = org.DisplayName() 45 if len(org.Description) != 0 { 46 desc, err := markdown.RenderString(&markup.RenderContext{ 47 Ctx: ctx, 48 Metas: map[string]string{"mode": "document"}, 49 }, org.Description) 50 if err != nil { 51 ctx.ServerError("RenderString", err) 52 return 53 } 54 ctx.Data["RenderedDescription"] = desc 55 } 56 57 var orderBy db.SearchOrderBy 58 ctx.Data["SortType"] = ctx.FormString("sort") 59 switch ctx.FormString("sort") { 60 case "newest": 61 orderBy = db.SearchOrderByNewest 62 case "oldest": 63 orderBy = db.SearchOrderByOldest 64 case "recentupdate": 65 orderBy = db.SearchOrderByRecentUpdated 66 case "leastupdate": 67 orderBy = db.SearchOrderByLeastUpdated 68 case "reversealphabetically": 69 orderBy = db.SearchOrderByAlphabeticallyReverse 70 case "alphabetically": 71 orderBy = db.SearchOrderByAlphabetically 72 case "moststars": 73 orderBy = db.SearchOrderByStarsReverse 74 case "feweststars": 75 orderBy = db.SearchOrderByStars 76 case "mostforks": 77 orderBy = db.SearchOrderByForksReverse 78 case "fewestforks": 79 orderBy = db.SearchOrderByForks 80 default: 81 ctx.Data["SortType"] = "recentupdate" 82 orderBy = db.SearchOrderByRecentUpdated 83 } 84 85 keyword := ctx.FormTrim("q") 86 ctx.Data["Keyword"] = keyword 87 88 language := ctx.FormTrim("language") 89 ctx.Data["Language"] = language 90 91 page := ctx.FormInt("page") 92 if page <= 0 { 93 page = 1 94 } 95 96 var ( 97 repos []*repo_model.Repository 98 count int64 99 err error 100 ) 101 repos, count, err = repo_model.SearchRepository(ctx, &repo_model.SearchRepoOptions{ 102 ListOptions: db.ListOptions{ 103 PageSize: setting.UI.User.RepoPagingNum, 104 Page: page, 105 }, 106 Keyword: keyword, 107 OwnerID: org.ID, 108 OrderBy: orderBy, 109 Private: ctx.IsSigned, 110 Actor: ctx.Doer, 111 Language: language, 112 IncludeDescription: setting.UI.SearchRepoDescription, 113 }) 114 if err != nil { 115 ctx.ServerError("SearchRepository", err) 116 return 117 } 118 119 opts := &organization.FindOrgMembersOpts{ 120 OrgID: org.ID, 121 PublicOnly: ctx.Org.PublicMemberOnly, 122 ListOptions: db.ListOptions{Page: 1, PageSize: 25}, 123 } 124 members, _, err := organization.FindOrgMembers(ctx, opts) 125 if err != nil { 126 ctx.ServerError("FindOrgMembers", err) 127 return 128 } 129 130 var isFollowing bool 131 if ctx.Doer != nil { 132 isFollowing = user_model.IsFollowing(ctx, ctx.Doer.ID, ctx.ContextUser.ID) 133 } 134 135 ctx.Data["Repos"] = repos 136 ctx.Data["Total"] = count 137 ctx.Data["Members"] = members 138 ctx.Data["Teams"] = ctx.Org.Teams 139 ctx.Data["DisableNewPullMirrors"] = setting.Mirror.DisableNewPull 140 ctx.Data["PageIsViewRepositories"] = true 141 ctx.Data["IsFollowing"] = isFollowing 142 143 err = shared_user.LoadHeaderCount(ctx) 144 if err != nil { 145 ctx.ServerError("LoadHeaderCount", err) 146 return 147 } 148 149 pager := context.NewPagination(int(count), setting.UI.User.RepoPagingNum, page, 5) 150 pager.SetDefaultParams(ctx) 151 pager.AddParam(ctx, "language", "Language") 152 ctx.Data["Page"] = pager 153 154 ctx.Data["ShowMemberAndTeamTab"] = ctx.Org.IsMember || len(members) > 0 155 156 ctx.HTML(http.StatusOK, tplOrgHome) 157 }