diff --git a/routers/web/org/home.go b/routers/web/org/home.go index ec866eb6b3ba1..c16b51a68aa59 100644 --- a/routers/web/org/home.go +++ b/routers/web/org/home.go @@ -13,6 +13,8 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/markup/markdown" "code.gitea.io/gitea/modules/setting" @@ -56,66 +58,114 @@ func Home(ctx *context.Context) { ctx.Data["RenderedDescription"] = desc } - var orderBy db.SearchOrderBy - ctx.Data["SortType"] = ctx.FormString("sort") - switch ctx.FormString("sort") { - case "newest": - orderBy = db.SearchOrderByNewest - case "oldest": - orderBy = db.SearchOrderByOldest - case "recentupdate": - orderBy = db.SearchOrderByRecentUpdated - case "leastupdate": - orderBy = db.SearchOrderByLeastUpdated - case "reversealphabetically": - orderBy = db.SearchOrderByAlphabeticallyReverse - case "alphabetically": - orderBy = db.SearchOrderByAlphabetically - case "moststars": - orderBy = db.SearchOrderByStarsReverse - case "feweststars": - orderBy = db.SearchOrderByStars - case "mostforks": - orderBy = db.SearchOrderByForksReverse - case "fewestforks": - orderBy = db.SearchOrderByForks - default: - ctx.Data["SortType"] = "recentupdate" - orderBy = db.SearchOrderByRecentUpdated - } + profileGitRepo, profileReadmeBlob, profileClose := shared_user.FindUserProfileReadme(ctx) + defer profileClose() + ctx.Data["HasProfileReadme"] = profileReadmeBlob != nil + + PrepareOrgProfileTabData(ctx, profileGitRepo, profileReadmeBlob) - keyword := ctx.FormTrim("q") - ctx.Data["Keyword"] = keyword + ctx.HTML(http.StatusOK, tplOrgHome) +} - language := ctx.FormTrim("language") - ctx.Data["Language"] = language +func PrepareOrgProfileTabData(ctx *context.Context, profileGitRepo *git.Repository, profileReadme *git.Blob) { + org := ctx.Org.Organization - page := ctx.FormInt("page") - if page <= 0 { - page = 1 + tab := ctx.FormString("tab") + if tab == "" || tab == "overview" { + if profileReadme != nil { + tab = "overview" + } else { + tab = "repositories" + } } + ctx.Data["TabName"] = tab + + switch tab { + case "overview": + if bytes, err := profileReadme.GetBlobContent(setting.UI.MaxDisplayFileSize); err != nil { + log.Error("failed to GetBlobContent: %v", err) + } else { + if profileContent, err := markdown.RenderString(&markup.RenderContext{ + Ctx: ctx, + GitRepo: profileGitRepo, + Metas: map[string]string{"mode": "document"}, + }, bytes); err != nil { + log.Error("failed to RenderString: %v", err) + } else { + ctx.Data["ProfileReadme"] = profileContent + } + } + default: // default to "repositories" + var orderBy db.SearchOrderBy + ctx.Data["SortType"] = ctx.FormString("sort") + switch ctx.FormString("sort") { + case "newest": + orderBy = db.SearchOrderByNewest + case "oldest": + orderBy = db.SearchOrderByOldest + case "recentupdate": + orderBy = db.SearchOrderByRecentUpdated + case "leastupdate": + orderBy = db.SearchOrderByLeastUpdated + case "reversealphabetically": + orderBy = db.SearchOrderByAlphabeticallyReverse + case "alphabetically": + orderBy = db.SearchOrderByAlphabetically + case "moststars": + orderBy = db.SearchOrderByStarsReverse + case "feweststars": + orderBy = db.SearchOrderByStars + case "mostforks": + orderBy = db.SearchOrderByForksReverse + case "fewestforks": + orderBy = db.SearchOrderByForks + default: + ctx.Data["SortType"] = "recentupdate" + orderBy = db.SearchOrderByRecentUpdated + } - var ( - repos []*repo_model.Repository - count int64 - err error - ) - repos, count, err = repo_model.SearchRepository(ctx, &repo_model.SearchRepoOptions{ - ListOptions: db.ListOptions{ - PageSize: setting.UI.User.RepoPagingNum, - Page: page, - }, - Keyword: keyword, - OwnerID: org.ID, - OrderBy: orderBy, - Private: ctx.IsSigned, - Actor: ctx.Doer, - Language: language, - IncludeDescription: setting.UI.SearchRepoDescription, - }) - if err != nil { - ctx.ServerError("SearchRepository", err) - return + keyword := ctx.FormTrim("q") + ctx.Data["Keyword"] = keyword + + language := ctx.FormTrim("language") + ctx.Data["Language"] = language + + page := ctx.FormInt("page") + if page <= 0 { + page = 1 + } + + var ( + repos []*repo_model.Repository + count int64 + err error + ) + repos, count, err = repo_model.SearchRepository(ctx, &repo_model.SearchRepoOptions{ + ListOptions: db.ListOptions{ + PageSize: setting.UI.User.RepoPagingNum, + Page: page, + }, + Keyword: keyword, + OwnerID: org.ID, + OrderBy: orderBy, + Private: ctx.IsSigned, + Actor: ctx.Doer, + Language: language, + IncludeDescription: setting.UI.SearchRepoDescription, + }) + if err != nil { + ctx.ServerError("SearchRepository", err) + return + } + + ctx.Data["Repos"] = repos + ctx.Data["Total"] = count + + pager := context.NewPagination(int(count), setting.UI.User.RepoPagingNum, page, 5) + pager.SetDefaultParams(ctx) + pager.AddParam(ctx, "language", "Language") + pager.AddParam(ctx, "tab", "TabName") + ctx.Data["Page"] = pager } opts := &organization.FindOrgMembersOpts{ @@ -133,9 +183,6 @@ func Home(ctx *context.Context) { if ctx.Doer != nil { isFollowing = user_model.IsFollowing(ctx, ctx.Doer.ID, ctx.ContextUser.ID) } - - ctx.Data["Repos"] = repos - ctx.Data["Total"] = count ctx.Data["Members"] = members ctx.Data["Teams"] = ctx.Org.Teams ctx.Data["DisableNewPullMirrors"] = setting.Mirror.DisableNewPull @@ -148,12 +195,5 @@ func Home(ctx *context.Context) { return } - pager := context.NewPagination(int(count), setting.UI.User.RepoPagingNum, page, 5) - pager.SetDefaultParams(ctx) - pager.AddParam(ctx, "language", "Language") - ctx.Data["Page"] = pager - ctx.Data["ShowMemberAndTeamTab"] = ctx.Org.IsMember || len(members) > 0 - - ctx.HTML(http.StatusOK, tplOrgHome) } diff --git a/routers/web/org/members.go b/routers/web/org/members.go index 34cff05ea0b92..a973377541319 100644 --- a/routers/web/org/members.go +++ b/routers/web/org/members.go @@ -73,6 +73,8 @@ func Members(ctx *context.Context) { ctx.Data["MembersIsUserOrgOwner"] = organization.IsUserOrgOwner(members, org.ID) ctx.Data["MembersTwoFaStatus"] = members.GetTwoFaStatus(ctx) + shared_user.RenderUserHeader(ctx) + ctx.HTML(http.StatusOK, tplMembers) } diff --git a/routers/web/org/teams.go b/routers/web/org/teams.go index 90029009fe5e3..3e7715fc88c05 100644 --- a/routers/web/org/teams.go +++ b/routers/web/org/teams.go @@ -65,6 +65,7 @@ func Teams(ctx *context.Context) { return } + shared_user.RenderUserHeader(ctx) ctx.HTML(http.StatusOK, tplTeams) } @@ -276,6 +277,7 @@ func NewTeam(ctx *context.Context) { ctx.Data["PageIsOrgTeamsNew"] = true ctx.Data["Team"] = &org_model.Team{} ctx.Data["Units"] = unit_model.Units + shared_user.RenderUserHeader(ctx) ctx.HTML(http.StatusOK, tplTeamNew) } @@ -341,6 +343,7 @@ func NewTeamPost(ctx *context.Context) { ctx.Data["PageIsOrgTeamsNew"] = true ctx.Data["Units"] = unit_model.Units ctx.Data["Team"] = t + shared_user.RenderUserHeader(ctx) if ctx.HasError() { ctx.HTML(http.StatusOK, tplTeamNew) @@ -391,6 +394,7 @@ func TeamMembers(ctx *context.Context) { ctx.Data["Invites"] = invites ctx.Data["IsEmailInviteEnabled"] = setting.MailService != nil + shared_user.RenderUserHeader(ctx) ctx.HTML(http.StatusOK, tplTeamMembers) } @@ -410,6 +414,7 @@ func TeamRepositories(ctx *context.Context) { return } ctx.Data["Units"] = unit_model.Units + shared_user.RenderUserHeader(ctx) ctx.HTML(http.StatusOK, tplTeamRepositories) } diff --git a/templates/org/home.tmpl b/templates/org/home.tmpl index ff4f3a8b1af2b..2b96465e71daf 100644 --- a/templates/org/home.tmpl +++ b/templates/org/home.tmpl @@ -38,9 +38,13 @@
- {{template "explore/repo_search" .}} - {{template "explore/repo_list" .}} - {{template "base/paginate" .}} + {{if or (not .ProfileReadme) (eq .TabName "repositories")}} + {{template "explore/repo_search" .}} + {{template "explore/repo_list" .}} + {{template "base/paginate" .}} + {{else}} +
{{$.ProfileReadme|Str2html}}
+ {{end}}
{{if .ShowMemberAndTeamTab}} diff --git a/templates/org/menu.tmpl b/templates/org/menu.tmpl index c3ec142e9c24f..256d7c82c3442 100644 --- a/templates/org/menu.tmpl +++ b/templates/org/menu.tmpl @@ -1,6 +1,11 @@