mirror of
https://github.com/go-gitea/gitea.git
synced 2025-04-24 18:38:46 +03:00
refactor organization menu (#33928)
Fix missing items in organization menu. **Menu** <details> <summary>Show</summary> Before:  After:  </details> **Packages** <details> keep it consistent with the other pages. <summary>Show</summary> Before:  After:  </details> --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
@ -20,6 +20,11 @@ func BlockedUsers(ctx *context.Context) {
|
|||||||
ctx.Data["PageIsOrgSettings"] = true
|
ctx.Data["PageIsOrgSettings"] = true
|
||||||
ctx.Data["PageIsSettingsBlockedUsers"] = true
|
ctx.Data["PageIsSettingsBlockedUsers"] = true
|
||||||
|
|
||||||
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
shared_user.BlockedUsers(ctx, ctx.ContextUser)
|
shared_user.BlockedUsers(ctx, ctx.ContextUser)
|
||||||
if ctx.Written() {
|
if ctx.Written() {
|
||||||
return
|
return
|
||||||
@ -29,6 +34,11 @@ func BlockedUsers(ctx *context.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func BlockedUsersPost(ctx *context.Context) {
|
func BlockedUsersPost(ctx *context.Context) {
|
||||||
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
shared_user.BlockedUsersPost(ctx, ctx.ContextUser)
|
shared_user.BlockedUsersPost(ctx, ctx.ContextUser)
|
||||||
if ctx.Written() {
|
if ctx.Written() {
|
||||||
return
|
return
|
||||||
|
@ -86,12 +86,6 @@ func home(ctx *context.Context, viewRepositories bool) {
|
|||||||
private := ctx.FormOptionalBool("private")
|
private := ctx.FormOptionalBool("private")
|
||||||
ctx.Data["IsPrivate"] = private
|
ctx.Data["IsPrivate"] = private
|
||||||
|
|
||||||
err := shared_user.LoadHeaderCount(ctx)
|
|
||||||
if err != nil {
|
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
opts := &organization.FindOrgMembersOpts{
|
opts := &organization.FindOrgMembersOpts{
|
||||||
Doer: ctx.Doer,
|
Doer: ctx.Doer,
|
||||||
OrgID: org.ID,
|
OrgID: org.ID,
|
||||||
@ -109,9 +103,9 @@ func home(ctx *context.Context, viewRepositories bool) {
|
|||||||
ctx.Data["DisableNewPullMirrors"] = setting.Mirror.DisableNewPull
|
ctx.Data["DisableNewPullMirrors"] = setting.Mirror.DisableNewPull
|
||||||
ctx.Data["ShowMemberAndTeamTab"] = ctx.Org.IsMember || len(members) > 0
|
ctx.Data["ShowMemberAndTeamTab"] = ctx.Org.IsMember || len(members) > 0
|
||||||
|
|
||||||
prepareResult, err := shared_user.PrepareOrgHeader(ctx)
|
prepareResult, err := shared_user.RenderUserOrgHeader(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.ServerError("PrepareOrgHeader", err)
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,7 +148,7 @@ func home(ctx *context.Context, viewRepositories bool) {
|
|||||||
ctx.HTML(http.StatusOK, tplOrgHome)
|
ctx.HTML(http.StatusOK, tplOrgHome)
|
||||||
}
|
}
|
||||||
|
|
||||||
func prepareOrgProfileReadme(ctx *context.Context, prepareResult *shared_user.PrepareOrgHeaderResult) bool {
|
func prepareOrgProfileReadme(ctx *context.Context, prepareResult *shared_user.PrepareOwnerHeaderResult) bool {
|
||||||
viewAs := ctx.FormString("view_as", util.Iif(ctx.Org.IsMember, "member", "public"))
|
viewAs := ctx.FormString("view_as", util.Iif(ctx.Org.IsMember, "member", "public"))
|
||||||
viewAsMember := viewAs == "member"
|
viewAsMember := viewAs == "member"
|
||||||
|
|
||||||
|
@ -54,9 +54,8 @@ func Members(ctx *context.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = shared_user.PrepareOrgHeader(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
if err != nil {
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
ctx.ServerError("PrepareOrgHeader", err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +43,10 @@ func MustEnableProjects(ctx *context.Context) {
|
|||||||
|
|
||||||
// Projects renders the home page of projects
|
// Projects renders the home page of projects
|
||||||
func Projects(ctx *context.Context) {
|
func Projects(ctx *context.Context) {
|
||||||
shared_user.PrepareContextForProfileBigAvatar(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
ctx.Data["Title"] = ctx.Tr("repo.projects")
|
ctx.Data["Title"] = ctx.Tr("repo.projects")
|
||||||
|
|
||||||
sortType := ctx.FormTrim("sort")
|
sortType := ctx.FormTrim("sort")
|
||||||
@ -101,7 +104,6 @@ func Projects(ctx *context.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ctx.Data["Projects"] = projects
|
ctx.Data["Projects"] = projects
|
||||||
shared_user.RenderUserHeader(ctx)
|
|
||||||
|
|
||||||
if isShowClosed {
|
if isShowClosed {
|
||||||
ctx.Data["State"] = "closed"
|
ctx.Data["State"] = "closed"
|
||||||
@ -113,12 +115,6 @@ func Projects(ctx *context.Context) {
|
|||||||
project.RenderedContent = renderUtils.MarkdownToHtml(project.Description)
|
project.RenderedContent = renderUtils.MarkdownToHtml(project.Description)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = shared_user.LoadHeaderCount(ctx)
|
|
||||||
if err != nil {
|
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
numPages := 0
|
numPages := 0
|
||||||
if total > 0 {
|
if total > 0 {
|
||||||
numPages = (int(total) - 1/setting.UI.IssuePagingNum)
|
numPages = (int(total) - 1/setting.UI.IssuePagingNum)
|
||||||
@ -152,11 +148,8 @@ func RenderNewProject(ctx *context.Context) {
|
|||||||
ctx.Data["PageIsViewProjects"] = true
|
ctx.Data["PageIsViewProjects"] = true
|
||||||
ctx.Data["HomeLink"] = ctx.ContextUser.HomeLink()
|
ctx.Data["HomeLink"] = ctx.ContextUser.HomeLink()
|
||||||
ctx.Data["CancelLink"] = ctx.ContextUser.HomeLink() + "/-/projects"
|
ctx.Data["CancelLink"] = ctx.ContextUser.HomeLink() + "/-/projects"
|
||||||
shared_user.RenderUserHeader(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
err := shared_user.LoadHeaderCount(ctx)
|
|
||||||
if err != nil {
|
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,7 +160,10 @@ func RenderNewProject(ctx *context.Context) {
|
|||||||
func NewProjectPost(ctx *context.Context) {
|
func NewProjectPost(ctx *context.Context) {
|
||||||
form := web.GetForm(ctx).(*forms.CreateProjectForm)
|
form := web.GetForm(ctx).(*forms.CreateProjectForm)
|
||||||
ctx.Data["Title"] = ctx.Tr("repo.projects.new")
|
ctx.Data["Title"] = ctx.Tr("repo.projects.new")
|
||||||
shared_user.RenderUserHeader(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if ctx.HasError() {
|
if ctx.HasError() {
|
||||||
RenderNewProject(ctx)
|
RenderNewProject(ctx)
|
||||||
@ -248,7 +244,10 @@ func RenderEditProject(ctx *context.Context) {
|
|||||||
ctx.Data["CanWriteProjects"] = canWriteProjects(ctx)
|
ctx.Data["CanWriteProjects"] = canWriteProjects(ctx)
|
||||||
ctx.Data["CardTypes"] = project_model.GetCardConfig()
|
ctx.Data["CardTypes"] = project_model.GetCardConfig()
|
||||||
|
|
||||||
shared_user.RenderUserHeader(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
p, err := project_model.GetProjectByID(ctx, ctx.PathParamInt64("id"))
|
p, err := project_model.GetProjectByID(ctx, ctx.PathParamInt64("id"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -282,11 +281,8 @@ func EditProjectPost(ctx *context.Context) {
|
|||||||
ctx.Data["CardTypes"] = project_model.GetCardConfig()
|
ctx.Data["CardTypes"] = project_model.GetCardConfig()
|
||||||
ctx.Data["CancelLink"] = project_model.ProjectLinkForOrg(ctx.ContextUser, projectID)
|
ctx.Data["CancelLink"] = project_model.ProjectLinkForOrg(ctx.ContextUser, projectID)
|
||||||
|
|
||||||
shared_user.RenderUserHeader(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
err := shared_user.LoadHeaderCount(ctx)
|
|
||||||
if err != nil {
|
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -443,11 +439,9 @@ func ViewProject(ctx *context.Context) {
|
|||||||
ctx.Data["Project"] = project
|
ctx.Data["Project"] = project
|
||||||
ctx.Data["IssuesMap"] = issuesMap
|
ctx.Data["IssuesMap"] = issuesMap
|
||||||
ctx.Data["Columns"] = columns
|
ctx.Data["Columns"] = columns
|
||||||
shared_user.RenderUserHeader(ctx)
|
|
||||||
|
|
||||||
err = shared_user.LoadHeaderCount(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
if err != nil {
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,9 +48,8 @@ func Settings(ctx *context.Context) {
|
|||||||
ctx.Data["RepoAdminChangeTeamAccess"] = ctx.Org.Organization.RepoAdminChangeTeamAccess
|
ctx.Data["RepoAdminChangeTeamAccess"] = ctx.Org.Organization.RepoAdminChangeTeamAccess
|
||||||
ctx.Data["ContextUser"] = ctx.ContextUser
|
ctx.Data["ContextUser"] = ctx.ContextUser
|
||||||
|
|
||||||
err := shared_user.LoadHeaderCount(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
if err != nil {
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -194,9 +193,8 @@ func SettingsDelete(ctx *context.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err := shared_user.LoadHeaderCount(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
if err != nil {
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,9 +216,8 @@ func Webhooks(ctx *context.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = shared_user.LoadHeaderCount(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
if err != nil {
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -246,9 +243,8 @@ func Labels(ctx *context.Context) {
|
|||||||
ctx.Data["PageIsOrgSettingsLabels"] = true
|
ctx.Data["PageIsOrgSettingsLabels"] = true
|
||||||
ctx.Data["LabelTemplateFiles"] = repo_module.LabelTemplateFiles
|
ctx.Data["LabelTemplateFiles"] = repo_module.LabelTemplateFiles
|
||||||
|
|
||||||
err := shared_user.LoadHeaderCount(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
if err != nil {
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,9 +45,8 @@ func Applications(ctx *context.Context) {
|
|||||||
}
|
}
|
||||||
ctx.Data["Applications"] = apps
|
ctx.Data["Applications"] = apps
|
||||||
|
|
||||||
err = shared_user.LoadHeaderCount(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
if err != nil {
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,9 +25,8 @@ func Packages(ctx *context.Context) {
|
|||||||
ctx.Data["PageIsOrgSettings"] = true
|
ctx.Data["PageIsOrgSettings"] = true
|
||||||
ctx.Data["PageIsSettingsPackages"] = true
|
ctx.Data["PageIsSettingsPackages"] = true
|
||||||
|
|
||||||
err := shared_user.LoadHeaderCount(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
if err != nil {
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,9 +40,8 @@ func PackagesRuleAdd(ctx *context.Context) {
|
|||||||
ctx.Data["PageIsOrgSettings"] = true
|
ctx.Data["PageIsOrgSettings"] = true
|
||||||
ctx.Data["PageIsSettingsPackages"] = true
|
ctx.Data["PageIsSettingsPackages"] = true
|
||||||
|
|
||||||
err := shared_user.LoadHeaderCount(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
if err != nil {
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,9 +55,8 @@ func PackagesRuleEdit(ctx *context.Context) {
|
|||||||
ctx.Data["PageIsOrgSettings"] = true
|
ctx.Data["PageIsOrgSettings"] = true
|
||||||
ctx.Data["PageIsSettingsPackages"] = true
|
ctx.Data["PageIsSettingsPackages"] = true
|
||||||
|
|
||||||
err := shared_user.LoadHeaderCount(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
if err != nil {
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,9 +96,8 @@ func PackagesRulePreview(ctx *context.Context) {
|
|||||||
ctx.Data["PageIsOrgSettings"] = true
|
ctx.Data["PageIsOrgSettings"] = true
|
||||||
ctx.Data["PageIsSettingsPackages"] = true
|
ctx.Data["PageIsSettingsPackages"] = true
|
||||||
|
|
||||||
err := shared_user.LoadHeaderCount(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
if err != nil {
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,6 +46,10 @@ const (
|
|||||||
|
|
||||||
// Teams render teams list page
|
// Teams render teams list page
|
||||||
func Teams(ctx *context.Context) {
|
func Teams(ctx *context.Context) {
|
||||||
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
org := ctx.Org.Organization
|
org := ctx.Org.Organization
|
||||||
ctx.Data["Title"] = org.FullName
|
ctx.Data["Title"] = org.FullName
|
||||||
ctx.Data["PageIsOrgTeams"] = true
|
ctx.Data["PageIsOrgTeams"] = true
|
||||||
@ -58,12 +62,6 @@ func Teams(ctx *context.Context) {
|
|||||||
}
|
}
|
||||||
ctx.Data["Teams"] = ctx.Org.Teams
|
ctx.Data["Teams"] = ctx.Org.Teams
|
||||||
|
|
||||||
_, err := shared_user.PrepareOrgHeader(ctx)
|
|
||||||
if err != nil {
|
|
||||||
ctx.ServerError("PrepareOrgHeader", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.HTML(http.StatusOK, tplTeams)
|
ctx.HTML(http.StatusOK, tplTeams)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -272,15 +270,15 @@ func TeamsRepoAction(ctx *context.Context) {
|
|||||||
|
|
||||||
// NewTeam render create new team page
|
// NewTeam render create new team page
|
||||||
func NewTeam(ctx *context.Context) {
|
func NewTeam(ctx *context.Context) {
|
||||||
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
ctx.Data["Title"] = ctx.Org.Organization.FullName
|
ctx.Data["Title"] = ctx.Org.Organization.FullName
|
||||||
ctx.Data["PageIsOrgTeams"] = true
|
ctx.Data["PageIsOrgTeams"] = true
|
||||||
ctx.Data["PageIsOrgTeamsNew"] = true
|
ctx.Data["PageIsOrgTeamsNew"] = true
|
||||||
ctx.Data["Team"] = &org_model.Team{}
|
ctx.Data["Team"] = &org_model.Team{}
|
||||||
ctx.Data["Units"] = unit_model.Units
|
ctx.Data["Units"] = unit_model.Units
|
||||||
if err := shared_user.LoadHeaderCount(ctx); err != nil {
|
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
ctx.HTML(http.StatusOK, tplTeamNew)
|
ctx.HTML(http.StatusOK, tplTeamNew)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -370,15 +368,15 @@ func NewTeamPost(ctx *context.Context) {
|
|||||||
|
|
||||||
// TeamMembers render team members page
|
// TeamMembers render team members page
|
||||||
func TeamMembers(ctx *context.Context) {
|
func TeamMembers(ctx *context.Context) {
|
||||||
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
ctx.Data["Title"] = ctx.Org.Team.Name
|
ctx.Data["Title"] = ctx.Org.Team.Name
|
||||||
ctx.Data["PageIsOrgTeams"] = true
|
ctx.Data["PageIsOrgTeams"] = true
|
||||||
ctx.Data["PageIsOrgTeamMembers"] = true
|
ctx.Data["PageIsOrgTeamMembers"] = true
|
||||||
|
|
||||||
if err := shared_user.LoadHeaderCount(ctx); err != nil {
|
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := ctx.Org.Team.LoadMembers(ctx); err != nil {
|
if err := ctx.Org.Team.LoadMembers(ctx); err != nil {
|
||||||
ctx.ServerError("GetMembers", err)
|
ctx.ServerError("GetMembers", err)
|
||||||
return
|
return
|
||||||
@ -398,15 +396,15 @@ func TeamMembers(ctx *context.Context) {
|
|||||||
|
|
||||||
// TeamRepositories show the repositories of team
|
// TeamRepositories show the repositories of team
|
||||||
func TeamRepositories(ctx *context.Context) {
|
func TeamRepositories(ctx *context.Context) {
|
||||||
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
ctx.Data["Title"] = ctx.Org.Team.Name
|
ctx.Data["Title"] = ctx.Org.Team.Name
|
||||||
ctx.Data["PageIsOrgTeams"] = true
|
ctx.Data["PageIsOrgTeams"] = true
|
||||||
ctx.Data["PageIsOrgTeamRepos"] = true
|
ctx.Data["PageIsOrgTeamRepos"] = true
|
||||||
|
|
||||||
if err := shared_user.LoadHeaderCount(ctx); err != nil {
|
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
repos, err := repo_model.GetTeamRepositories(ctx, &repo_model.SearchTeamRepoOptions{
|
repos, err := repo_model.GetTeamRepositories(ctx, &repo_model.SearchTeamRepoOptions{
|
||||||
TeamID: ctx.Org.Team.ID,
|
TeamID: ctx.Org.Team.ID,
|
||||||
})
|
})
|
||||||
@ -463,16 +461,16 @@ func SearchTeam(ctx *context.Context) {
|
|||||||
|
|
||||||
// EditTeam render team edit page
|
// EditTeam render team edit page
|
||||||
func EditTeam(ctx *context.Context) {
|
func EditTeam(ctx *context.Context) {
|
||||||
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
ctx.Data["Title"] = ctx.Org.Organization.FullName
|
ctx.Data["Title"] = ctx.Org.Organization.FullName
|
||||||
ctx.Data["PageIsOrgTeams"] = true
|
ctx.Data["PageIsOrgTeams"] = true
|
||||||
if err := ctx.Org.Team.LoadUnits(ctx); err != nil {
|
if err := ctx.Org.Team.LoadUnits(ctx); err != nil {
|
||||||
ctx.ServerError("LoadUnits", err)
|
ctx.ServerError("LoadUnits", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err := shared_user.LoadHeaderCount(ctx); err != nil {
|
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
ctx.Data["Team"] = ctx.Org.Team
|
ctx.Data["Team"] = ctx.Org.Team
|
||||||
ctx.Data["Units"] = unit_model.Units
|
ctx.Data["Units"] = unit_model.Units
|
||||||
ctx.HTML(http.StatusOK, tplTeamNew)
|
ctx.HTML(http.StatusOK, tplTeamNew)
|
||||||
|
@ -9,6 +9,7 @@ import (
|
|||||||
|
|
||||||
"code.gitea.io/gitea/models/organization"
|
"code.gitea.io/gitea/models/organization"
|
||||||
"code.gitea.io/gitea/modules/templates"
|
"code.gitea.io/gitea/modules/templates"
|
||||||
|
shared_user "code.gitea.io/gitea/routers/web/shared/user"
|
||||||
"code.gitea.io/gitea/services/context"
|
"code.gitea.io/gitea/services/context"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -70,6 +71,12 @@ func Worktime(ctx *context.Context) {
|
|||||||
ctx.ServerError("GetWorktime", err)
|
ctx.ServerError("GetWorktime", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
ctx.Data["WorktimeSumResult"] = worktimeSumResult
|
ctx.Data["WorktimeSumResult"] = worktimeSumResult
|
||||||
ctx.HTML(http.StatusOK, tplByRepos)
|
ctx.HTML(http.StatusOK, tplByRepos)
|
||||||
}
|
}
|
||||||
|
@ -44,9 +44,8 @@ func getSecretsCtx(ctx *context.Context) (*secretsCtx, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ctx.Data["PageIsOrgSettings"] == true {
|
if ctx.Data["PageIsOrgSettings"] == true {
|
||||||
err := shared_user.LoadHeaderCount(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
if err != nil {
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
return &secretsCtx{
|
return &secretsCtx{
|
||||||
|
@ -57,9 +57,8 @@ func getRunnersCtx(ctx *context.Context) (*runnersCtx, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ctx.Data["PageIsOrgSettings"] == true {
|
if ctx.Data["PageIsOrgSettings"] == true {
|
||||||
err := shared_user.LoadHeaderCount(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
if err != nil {
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
return &runnersCtx{
|
return &runnersCtx{
|
||||||
|
@ -49,9 +49,8 @@ func getVariablesCtx(ctx *context.Context) (*variablesCtx, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ctx.Data["PageIsOrgSettings"] == true {
|
if ctx.Data["PageIsOrgSettings"] == true {
|
||||||
err := shared_user.LoadHeaderCount(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
if err != nil {
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
return &variablesCtx{
|
return &variablesCtx{
|
||||||
|
@ -24,19 +24,8 @@ import (
|
|||||||
"code.gitea.io/gitea/services/context"
|
"code.gitea.io/gitea/services/context"
|
||||||
)
|
)
|
||||||
|
|
||||||
// prepareContextForCommonProfile store some common data into context data for user's profile related pages (including the nav menu)
|
// prepareContextForProfileBigAvatar set the context for big avatar view on the profile page
|
||||||
// It is designed to be fast and safe to be called multiple times in one request
|
func prepareContextForProfileBigAvatar(ctx *context.Context) {
|
||||||
func prepareContextForCommonProfile(ctx *context.Context) {
|
|
||||||
ctx.Data["IsPackageEnabled"] = setting.Packages.Enabled
|
|
||||||
ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled
|
|
||||||
ctx.Data["EnableFeed"] = setting.Other.EnableFeed
|
|
||||||
ctx.Data["FeedURL"] = ctx.ContextUser.HomeLink()
|
|
||||||
}
|
|
||||||
|
|
||||||
// PrepareContextForProfileBigAvatar set the context for big avatar view on the profile page
|
|
||||||
func PrepareContextForProfileBigAvatar(ctx *context.Context) {
|
|
||||||
prepareContextForCommonProfile(ctx)
|
|
||||||
|
|
||||||
ctx.Data["IsFollowing"] = ctx.Doer != nil && user_model.IsFollowing(ctx, ctx.Doer.ID, ctx.ContextUser.ID)
|
ctx.Data["IsFollowing"] = ctx.Doer != nil && user_model.IsFollowing(ctx, ctx.Doer.ID, ctx.ContextUser.ID)
|
||||||
ctx.Data["ShowUserEmail"] = setting.UI.ShowUserEmail && ctx.ContextUser.Email != "" && ctx.IsSigned && !ctx.ContextUser.KeepEmailPrivate
|
ctx.Data["ShowUserEmail"] = setting.UI.ShowUserEmail && ctx.ContextUser.Email != "" && ctx.IsSigned && !ctx.ContextUser.KeepEmailPrivate
|
||||||
if setting.Service.UserLocationMapURL != "" {
|
if setting.Service.UserLocationMapURL != "" {
|
||||||
@ -138,16 +127,44 @@ func FindOwnerProfileReadme(ctx *context.Context, doer *user_model.User, optProf
|
|||||||
return profileDbRepo, profileReadmeBlob
|
return profileDbRepo, profileReadmeBlob
|
||||||
}
|
}
|
||||||
|
|
||||||
func RenderUserHeader(ctx *context.Context) {
|
type PrepareOwnerHeaderResult struct {
|
||||||
prepareContextForCommonProfile(ctx)
|
ProfilePublicRepo *repo_model.Repository
|
||||||
|
ProfilePublicReadmeBlob *git.Blob
|
||||||
_, profileReadmeBlob := FindOwnerProfileReadme(ctx, ctx.Doer)
|
ProfilePrivateRepo *repo_model.Repository
|
||||||
ctx.Data["HasUserProfileReadme"] = profileReadmeBlob != nil
|
ProfilePrivateReadmeBlob *git.Blob
|
||||||
|
HasOrgProfileReadme bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func LoadHeaderCount(ctx *context.Context) error {
|
const (
|
||||||
prepareContextForCommonProfile(ctx)
|
RepoNameProfilePrivate = ".profile-private"
|
||||||
|
RepoNameProfile = ".profile"
|
||||||
|
)
|
||||||
|
|
||||||
|
func RenderUserOrgHeader(ctx *context.Context) (result *PrepareOwnerHeaderResult, err error) {
|
||||||
|
ctx.Data["IsPackageEnabled"] = setting.Packages.Enabled
|
||||||
|
ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled
|
||||||
|
ctx.Data["EnableFeed"] = setting.Other.EnableFeed
|
||||||
|
ctx.Data["FeedURL"] = ctx.ContextUser.HomeLink()
|
||||||
|
|
||||||
|
if err := loadHeaderCount(ctx); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
result = &PrepareOwnerHeaderResult{}
|
||||||
|
if ctx.ContextUser.IsOrganization() {
|
||||||
|
result.ProfilePublicRepo, result.ProfilePublicReadmeBlob = FindOwnerProfileReadme(ctx, ctx.Doer)
|
||||||
|
result.ProfilePrivateRepo, result.ProfilePrivateReadmeBlob = FindOwnerProfileReadme(ctx, ctx.Doer, RepoNameProfilePrivate)
|
||||||
|
result.HasOrgProfileReadme = result.ProfilePublicReadmeBlob != nil || result.ProfilePrivateReadmeBlob != nil
|
||||||
|
ctx.Data["HasOrgProfileReadme"] = result.HasOrgProfileReadme // many pages need it to show the "overview" tab
|
||||||
|
} else {
|
||||||
|
_, profileReadmeBlob := FindOwnerProfileReadme(ctx, ctx.Doer)
|
||||||
|
ctx.Data["HasUserProfileReadme"] = profileReadmeBlob != nil
|
||||||
|
prepareContextForProfileBigAvatar(ctx)
|
||||||
|
}
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func loadHeaderCount(ctx *context.Context) error {
|
||||||
repoCount, err := repo_model.CountRepository(ctx, &repo_model.SearchRepoOptions{
|
repoCount, err := repo_model.CountRepository(ctx, &repo_model.SearchRepoOptions{
|
||||||
Actor: ctx.Doer,
|
Actor: ctx.Doer,
|
||||||
OwnerID: ctx.ContextUser.ID,
|
OwnerID: ctx.ContextUser.ID,
|
||||||
@ -178,29 +195,3 @@ func LoadHeaderCount(ctx *context.Context) error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
|
||||||
RepoNameProfilePrivate = ".profile-private"
|
|
||||||
RepoNameProfile = ".profile"
|
|
||||||
)
|
|
||||||
|
|
||||||
type PrepareOrgHeaderResult struct {
|
|
||||||
ProfilePublicRepo *repo_model.Repository
|
|
||||||
ProfilePublicReadmeBlob *git.Blob
|
|
||||||
ProfilePrivateRepo *repo_model.Repository
|
|
||||||
ProfilePrivateReadmeBlob *git.Blob
|
|
||||||
HasOrgProfileReadme bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func PrepareOrgHeader(ctx *context.Context) (result *PrepareOrgHeaderResult, err error) {
|
|
||||||
if err = LoadHeaderCount(ctx); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
result = &PrepareOrgHeaderResult{}
|
|
||||||
result.ProfilePublicRepo, result.ProfilePublicReadmeBlob = FindOwnerProfileReadme(ctx, ctx.Doer)
|
|
||||||
result.ProfilePrivateRepo, result.ProfilePrivateReadmeBlob = FindOwnerProfileReadme(ctx, ctx.Doer, RepoNameProfilePrivate)
|
|
||||||
result.HasOrgProfileReadme = result.ProfilePublicReadmeBlob != nil || result.ProfilePrivateReadmeBlob != nil
|
|
||||||
ctx.Data["HasOrgProfileReadme"] = result.HasOrgProfileReadme // many pages need it to show the "overview" tab
|
|
||||||
return result, nil
|
|
||||||
}
|
|
||||||
|
@ -26,11 +26,8 @@ func CodeSearch(ctx *context.Context) {
|
|||||||
ctx.Redirect(ctx.ContextUser.HomeLink())
|
ctx.Redirect(ctx.ContextUser.HomeLink())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
shared_user.PrepareContextForProfileBigAvatar(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
shared_user.RenderUserHeader(ctx)
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
|
|
||||||
if err := shared_user.LoadHeaderCount(ctx); err != nil {
|
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,7 +42,10 @@ const (
|
|||||||
|
|
||||||
// ListPackages displays a list of all packages of the context user
|
// ListPackages displays a list of all packages of the context user
|
||||||
func ListPackages(ctx *context.Context) {
|
func ListPackages(ctx *context.Context) {
|
||||||
shared_user.PrepareContextForProfileBigAvatar(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
page := ctx.FormInt("page")
|
page := ctx.FormInt("page")
|
||||||
if page <= 1 {
|
if page <= 1 {
|
||||||
page = 1
|
page = 1
|
||||||
@ -94,8 +97,6 @@ func ListPackages(ctx *context.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
shared_user.RenderUserHeader(ctx)
|
|
||||||
|
|
||||||
ctx.Data["Title"] = ctx.Tr("packages.title")
|
ctx.Data["Title"] = ctx.Tr("packages.title")
|
||||||
ctx.Data["IsPackagesPage"] = true
|
ctx.Data["IsPackagesPage"] = true
|
||||||
ctx.Data["Query"] = query
|
ctx.Data["Query"] = query
|
||||||
@ -106,9 +107,8 @@ func ListPackages(ctx *context.Context) {
|
|||||||
ctx.Data["Total"] = total
|
ctx.Data["Total"] = total
|
||||||
ctx.Data["RepositoryAccessMap"] = repositoryAccessMap
|
ctx.Data["RepositoryAccessMap"] = repositoryAccessMap
|
||||||
|
|
||||||
err = shared_user.LoadHeaderCount(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
if err != nil {
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,11 +126,9 @@ func ListPackages(ctx *context.Context) {
|
|||||||
ctx.Data["IsOrganizationOwner"] = false
|
ctx.Data["IsOrganizationOwner"] = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pager := context.NewPagination(int(total), setting.UI.PackagesPagingNum, page, 5)
|
pager := context.NewPagination(int(total), setting.UI.PackagesPagingNum, page, 5)
|
||||||
pager.AddParamFromRequest(ctx.Req)
|
pager.AddParamFromRequest(ctx.Req)
|
||||||
ctx.Data["Page"] = pager
|
ctx.Data["Page"] = pager
|
||||||
|
|
||||||
ctx.HTML(http.StatusOK, tplPackagesList)
|
ctx.HTML(http.StatusOK, tplPackagesList)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,16 +162,17 @@ func RedirectToLastVersion(ctx *context.Context) {
|
|||||||
ctx.ServerError("GetPackageDescriptor", err)
|
ctx.ServerError("GetPackageDescriptor", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.Redirect(pd.VersionWebLink())
|
ctx.Redirect(pd.VersionWebLink())
|
||||||
}
|
}
|
||||||
|
|
||||||
// ViewPackageVersion displays a single package version
|
// ViewPackageVersion displays a single package version
|
||||||
func ViewPackageVersion(ctx *context.Context) {
|
func ViewPackageVersion(ctx *context.Context) {
|
||||||
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
pd := ctx.Package.Descriptor
|
pd := ctx.Package.Descriptor
|
||||||
|
|
||||||
shared_user.RenderUserHeader(ctx)
|
|
||||||
|
|
||||||
ctx.Data["Title"] = pd.Package.Name
|
ctx.Data["Title"] = pd.Package.Name
|
||||||
ctx.Data["IsPackagesPage"] = true
|
ctx.Data["IsPackagesPage"] = true
|
||||||
ctx.Data["PackageDescriptor"] = pd
|
ctx.Data["PackageDescriptor"] = pd
|
||||||
@ -301,19 +300,16 @@ func ViewPackageVersion(ctx *context.Context) {
|
|||||||
hasRepositoryAccess = permission.HasAnyUnitAccess()
|
hasRepositoryAccess = permission.HasAnyUnitAccess()
|
||||||
}
|
}
|
||||||
ctx.Data["HasRepositoryAccess"] = hasRepositoryAccess
|
ctx.Data["HasRepositoryAccess"] = hasRepositoryAccess
|
||||||
|
|
||||||
err = shared_user.LoadHeaderCount(ctx)
|
|
||||||
if err != nil {
|
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.HTML(http.StatusOK, tplPackagesView)
|
ctx.HTML(http.StatusOK, tplPackagesView)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListPackageVersions lists all versions of a package
|
// ListPackageVersions lists all versions of a package
|
||||||
func ListPackageVersions(ctx *context.Context) {
|
func ListPackageVersions(ctx *context.Context) {
|
||||||
shared_user.PrepareContextForProfileBigAvatar(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
p, err := packages_model.GetPackageByName(ctx, ctx.Package.Owner.ID, packages_model.Type(ctx.PathParam("type")), ctx.PathParam("name"))
|
p, err := packages_model.GetPackageByName(ctx, ctx.Package.Owner.ID, packages_model.Type(ctx.PathParam("type")), ctx.PathParam("name"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == packages_model.ErrPackageNotExist {
|
if err == packages_model.ErrPackageNotExist {
|
||||||
@ -336,8 +332,6 @@ func ListPackageVersions(ctx *context.Context) {
|
|||||||
query := ctx.FormTrim("q")
|
query := ctx.FormTrim("q")
|
||||||
sort := ctx.FormTrim("sort")
|
sort := ctx.FormTrim("sort")
|
||||||
|
|
||||||
shared_user.RenderUserHeader(ctx)
|
|
||||||
|
|
||||||
ctx.Data["Title"] = ctx.Tr("packages.title")
|
ctx.Data["Title"] = ctx.Tr("packages.title")
|
||||||
ctx.Data["IsPackagesPage"] = true
|
ctx.Data["IsPackagesPage"] = true
|
||||||
ctx.Data["PackageDescriptor"] = &packages_model.PackageDescriptor{
|
ctx.Data["PackageDescriptor"] = &packages_model.PackageDescriptor{
|
||||||
@ -393,12 +387,6 @@ func ListPackageVersions(ctx *context.Context) {
|
|||||||
|
|
||||||
ctx.Data["Total"] = total
|
ctx.Data["Total"] = total
|
||||||
|
|
||||||
err = shared_user.LoadHeaderCount(ctx)
|
|
||||||
if err != nil {
|
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
pager := context.NewPagination(int(total), setting.UI.PackagesPagingNum, page, 5)
|
pager := context.NewPagination(int(total), setting.UI.PackagesPagingNum, page, 5)
|
||||||
pager.AddParamFromRequest(ctx.Req)
|
pager.AddParamFromRequest(ctx.Req)
|
||||||
ctx.Data["Page"] = pager
|
ctx.Data["Page"] = pager
|
||||||
@ -410,7 +398,10 @@ func ListPackageVersions(ctx *context.Context) {
|
|||||||
func PackageSettings(ctx *context.Context) {
|
func PackageSettings(ctx *context.Context) {
|
||||||
pd := ctx.Package.Descriptor
|
pd := ctx.Package.Descriptor
|
||||||
|
|
||||||
shared_user.RenderUserHeader(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
ctx.Data["Title"] = pd.Package.Name
|
ctx.Data["Title"] = pd.Package.Name
|
||||||
ctx.Data["IsPackagesPage"] = true
|
ctx.Data["IsPackagesPage"] = true
|
||||||
@ -423,12 +414,6 @@ func PackageSettings(ctx *context.Context) {
|
|||||||
ctx.Data["Repos"] = repos
|
ctx.Data["Repos"] = repos
|
||||||
ctx.Data["CanWritePackages"] = ctx.Package.AccessMode >= perm.AccessModeWrite || ctx.IsUserSiteAdmin()
|
ctx.Data["CanWritePackages"] = ctx.Package.AccessMode >= perm.AccessModeWrite || ctx.IsUserSiteAdmin()
|
||||||
|
|
||||||
err := shared_user.LoadHeaderCount(ctx)
|
|
||||||
if err != nil {
|
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.HTML(http.StatusOK, tplPackagesSettings)
|
ctx.HTML(http.StatusOK, tplPackagesSettings)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,8 +78,15 @@ func userProfile(ctx *context.Context) {
|
|||||||
|
|
||||||
showPrivate := ctx.IsSigned && (ctx.Doer.IsAdmin || ctx.Doer.ID == ctx.ContextUser.ID)
|
showPrivate := ctx.IsSigned && (ctx.Doer.IsAdmin || ctx.Doer.ID == ctx.ContextUser.ID)
|
||||||
prepareUserProfileTabData(ctx, showPrivate, profileDbRepo, profileReadmeBlob)
|
prepareUserProfileTabData(ctx, showPrivate, profileDbRepo, profileReadmeBlob)
|
||||||
// call PrepareContextForProfileBigAvatar later to avoid re-querying the NumFollowers & NumFollowing
|
|
||||||
shared_user.PrepareContextForProfileBigAvatar(ctx)
|
// prepare the user nav header data after "prepareUserProfileTabData" to avoid re-querying the NumFollowers & NumFollowing
|
||||||
|
// because ctx.Data["NumFollowers"] and "NumFollowing" logic duplicates in both of them
|
||||||
|
// and the "profile readme" related logic also duplicates in both of FindOwnerProfileReadme and RenderUserOrgHeader
|
||||||
|
// TODO: it is a bad design and should be refactored later,
|
||||||
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
ctx.HTML(http.StatusOK, tplProfile)
|
ctx.HTML(http.StatusOK, tplProfile)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -302,9 +309,8 @@ func prepareUserProfileTabData(ctx *context.Context, showPrivate bool, profileDb
|
|||||||
ctx.Data["Repos"] = repos
|
ctx.Data["Repos"] = repos
|
||||||
ctx.Data["Total"] = total
|
ctx.Data["Total"] = total
|
||||||
|
|
||||||
err = shared_user.LoadHeaderCount(ctx)
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
if err != nil {
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -328,9 +334,11 @@ func ActionUserFollow(ctx *context.Context) {
|
|||||||
ctx.HTTPError(http.StatusBadRequest, fmt.Sprintf("Action %q failed", ctx.FormString("action")))
|
ctx.HTTPError(http.StatusBadRequest, fmt.Sprintf("Action %q failed", ctx.FormString("action")))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
if ctx.ContextUser.IsIndividual() {
|
if ctx.ContextUser.IsIndividual() {
|
||||||
shared_user.PrepareContextForProfileBigAvatar(ctx)
|
|
||||||
ctx.HTML(http.StatusOK, tplProfileBigAvatar)
|
ctx.HTML(http.StatusOK, tplProfileBigAvatar)
|
||||||
return
|
return
|
||||||
} else if ctx.ContextUser.IsOrganization() {
|
} else if ctx.ContextUser.IsOrganization() {
|
||||||
|
@ -28,8 +28,8 @@ func (oa *OAuth2CommonHandlers) renderEditPage(ctx *context.Context) {
|
|||||||
ctx.Data["FormActionPath"] = fmt.Sprintf("%s/%d", oa.BasePathEditPrefix, app.ID)
|
ctx.Data["FormActionPath"] = fmt.Sprintf("%s/%d", oa.BasePathEditPrefix, app.ID)
|
||||||
|
|
||||||
if ctx.ContextUser != nil && ctx.ContextUser.IsOrganization() {
|
if ctx.ContextUser != nil && ctx.ContextUser.IsOrganization() {
|
||||||
if err := shared_user.LoadHeaderCount(ctx); err != nil {
|
if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
|
||||||
ctx.ServerError("LoadHeaderCount", err)
|
ctx.ServerError("RenderUserOrgHeader", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
{{end}}
|
{{end}}
|
||||||
</a>
|
</a>
|
||||||
{{end}}
|
{{end}}
|
||||||
{{if .IsOrganizationOwner}}
|
{{if and EnableTimetracking .IsOrganizationOwner}}
|
||||||
<a class="{{if $.PageIsOrgTimes}}active{{end}} item" href="{{$.OrgLink}}/worktime">
|
<a class="{{if $.PageIsOrgTimes}}active{{end}} item" href="{{$.OrgLink}}/worktime">
|
||||||
{{svg "octicon-clock"}} {{ctx.Locale.Tr "org.worktime"}}
|
{{svg "octicon-clock"}} {{ctx.Locale.Tr "org.worktime"}}
|
||||||
</a>
|
</a>
|
||||||
|
@ -1,9 +1,24 @@
|
|||||||
{{template "base/head" .}}
|
{{template "base/head" .}}
|
||||||
<div role="main" aria-label="{{.Title}}" class="page-content organization projects edit-project new">
|
{{if .ContextUser.IsOrganization}}
|
||||||
{{template "shared/user/org_profile_avatar" .}}
|
<div role="main" aria-label="{{.Title}}" class="page-content organization projects">
|
||||||
|
{{template "org/header" .}}
|
||||||
<div class="ui container">
|
<div class="ui container">
|
||||||
{{template "user/overview/header" .}}
|
{{template "projects/new" .}}
|
||||||
{{template "projects/new" .}}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{{else}}
|
||||||
|
<div role="main" aria-label="{{.Title}}" class="page-content user profile">
|
||||||
|
<div class="ui container">
|
||||||
|
<div class="ui stackable grid">
|
||||||
|
<div class="ui four wide column">
|
||||||
|
{{template "shared/user/profile_big_avatar" .}}
|
||||||
|
</div>
|
||||||
|
<div class="ui twelve wide column tw-mb-4">
|
||||||
|
{{template "user/overview/header" .}}
|
||||||
|
{{template "projects/new" .}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
{{template "base/footer" .}}
|
{{template "base/footer" .}}
|
||||||
|
106
templates/package/shared/view.tmpl
Normal file
106
templates/package/shared/view.tmpl
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
<div class="issue-title-header">
|
||||||
|
<h1>{{.PackageDescriptor.Package.Name}} ({{.PackageDescriptor.Version.Version}})</h1>
|
||||||
|
<div>
|
||||||
|
{{$timeStr := DateUtils.TimeSince .PackageDescriptor.Version.CreatedUnix}}
|
||||||
|
{{if .HasRepositoryAccess}}
|
||||||
|
{{ctx.Locale.Tr "packages.published_by_in" $timeStr .PackageDescriptor.Creator.HomeLink .PackageDescriptor.Creator.GetDisplayName .PackageDescriptor.Repository.Link .PackageDescriptor.Repository.FullName}}
|
||||||
|
{{else}}
|
||||||
|
{{ctx.Locale.Tr "packages.published_by" $timeStr .PackageDescriptor.Creator.HomeLink .PackageDescriptor.Creator.GetDisplayName}}
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="issue-content">
|
||||||
|
<div class="issue-content-left">
|
||||||
|
{{template "package/content/alpine" .}}
|
||||||
|
{{template "package/content/arch" .}}
|
||||||
|
{{template "package/content/cargo" .}}
|
||||||
|
{{template "package/content/chef" .}}
|
||||||
|
{{template "package/content/composer" .}}
|
||||||
|
{{template "package/content/conan" .}}
|
||||||
|
{{template "package/content/conda" .}}
|
||||||
|
{{template "package/content/container" .}}
|
||||||
|
{{template "package/content/cran" .}}
|
||||||
|
{{template "package/content/debian" .}}
|
||||||
|
{{template "package/content/generic" .}}
|
||||||
|
{{template "package/content/go" .}}
|
||||||
|
{{template "package/content/helm" .}}
|
||||||
|
{{template "package/content/maven" .}}
|
||||||
|
{{template "package/content/npm" .}}
|
||||||
|
{{template "package/content/nuget" .}}
|
||||||
|
{{template "package/content/pub" .}}
|
||||||
|
{{template "package/content/pypi" .}}
|
||||||
|
{{template "package/content/rpm" .}}
|
||||||
|
{{template "package/content/rubygems" .}}
|
||||||
|
{{template "package/content/swift" .}}
|
||||||
|
{{template "package/content/vagrant" .}}
|
||||||
|
</div>
|
||||||
|
<div class="issue-content-right ui segment">
|
||||||
|
<strong>{{ctx.Locale.Tr "packages.details"}}</strong>
|
||||||
|
<div class="ui relaxed list flex-items-block">
|
||||||
|
<div class="item">{{svg .PackageDescriptor.Package.Type.SVGName}} {{.PackageDescriptor.Package.Type.Name}}</div>
|
||||||
|
{{if .HasRepositoryAccess}}
|
||||||
|
<div class="item">{{svg "octicon-repo"}} <a href="{{.PackageDescriptor.Repository.Link}}">{{.PackageDescriptor.Repository.FullName}}</a></div>
|
||||||
|
{{end}}
|
||||||
|
<div class="item">{{svg "octicon-calendar"}} {{DateUtils.TimeSince .PackageDescriptor.Version.CreatedUnix}}</div>
|
||||||
|
<div class="item">{{svg "octicon-download"}} {{.PackageDescriptor.Version.DownloadCount}}</div>
|
||||||
|
{{template "package/metadata/alpine" .}}
|
||||||
|
{{template "package/metadata/arch" .}}
|
||||||
|
{{template "package/metadata/cargo" .}}
|
||||||
|
{{template "package/metadata/chef" .}}
|
||||||
|
{{template "package/metadata/composer" .}}
|
||||||
|
{{template "package/metadata/conan" .}}
|
||||||
|
{{template "package/metadata/conda" .}}
|
||||||
|
{{template "package/metadata/container" .}}
|
||||||
|
{{template "package/metadata/cran" .}}
|
||||||
|
{{template "package/metadata/debian" .}}
|
||||||
|
{{template "package/metadata/generic" .}}
|
||||||
|
{{template "package/metadata/helm" .}}
|
||||||
|
{{template "package/metadata/maven" .}}
|
||||||
|
{{template "package/metadata/npm" .}}
|
||||||
|
{{template "package/metadata/nuget" .}}
|
||||||
|
{{template "package/metadata/pub" .}}
|
||||||
|
{{template "package/metadata/pypi" .}}
|
||||||
|
{{template "package/metadata/rpm" .}}
|
||||||
|
{{template "package/metadata/rubygems" .}}
|
||||||
|
{{template "package/metadata/swift" .}}
|
||||||
|
{{template "package/metadata/vagrant" .}}
|
||||||
|
{{if not (and (eq .PackageDescriptor.Package.Type "container") .PackageDescriptor.Metadata.Manifests)}}
|
||||||
|
<div class="item">{{svg "octicon-database"}} {{FileSize .PackageDescriptor.CalculateBlobSize}}</div>
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
{{if not (eq .PackageDescriptor.Package.Type "container")}}
|
||||||
|
<div class="divider"></div>
|
||||||
|
<strong>{{ctx.Locale.Tr "packages.assets"}} ({{len .PackageDescriptor.Files}})</strong>
|
||||||
|
<div class="ui relaxed list">
|
||||||
|
{{range .PackageDescriptor.Files}}
|
||||||
|
<div class="item">
|
||||||
|
<a href="{{$.Link}}/files/{{.File.ID}}">{{.File.Name}}</a>
|
||||||
|
<span class="text small file-size">{{FileSize .Blob.Size}}</span>
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
<div class="divider"></div>
|
||||||
|
<strong>{{ctx.Locale.Tr "packages.versions"}} ({{.TotalVersionCount}})</strong>
|
||||||
|
<a class="tw-float-right" href="{{$.PackageDescriptor.PackageWebLink}}/versions">{{ctx.Locale.Tr "packages.versions.view_all"}}</a>
|
||||||
|
<div class="ui relaxed list">
|
||||||
|
{{range .LatestVersions}}
|
||||||
|
<div class="item tw-flex">
|
||||||
|
<a class="tw-flex-1 gt-ellipsis" title="{{.Version}}" href="{{$.PackageDescriptor.PackageWebLink}}/{{PathEscape .LowerVersion}}">{{.Version}}</a>
|
||||||
|
<span class="text small">{{DateUtils.AbsoluteShort .CreatedUnix}}</span>
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
{{if or .CanWritePackages .HasRepositoryAccess}}
|
||||||
|
<div class="divider"></div>
|
||||||
|
<div class="ui relaxed list flex-items-block">
|
||||||
|
{{if .HasRepositoryAccess}}
|
||||||
|
<div class="item">{{svg "octicon-issue-opened"}} <a href="{{.PackageDescriptor.Repository.Link}}/issues">{{ctx.Locale.Tr "repo.issues"}}</a></div>
|
||||||
|
{{end}}
|
||||||
|
{{if .CanWritePackages}}
|
||||||
|
<div class="item">{{svg "octicon-tools"}} <a href="{{.Link}}/settings">{{ctx.Locale.Tr "repo.settings"}}</a></div>
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -1,114 +1,24 @@
|
|||||||
{{template "base/head" .}}
|
{{template "base/head" .}}
|
||||||
<div role="main" aria-label="{{.Title}}" class="page-content repository packages">
|
{{if .ContextUser.IsOrganization}}
|
||||||
{{template "shared/user/org_profile_avatar" .}}
|
<div role="main" aria-label="{{.Title}}" class="page-content organization packages">
|
||||||
|
{{template "org/header" .}}
|
||||||
<div class="ui container">
|
<div class="ui container">
|
||||||
{{template "user/overview/header" .}}
|
{{template "package/shared/view" .}}
|
||||||
<div class="issue-title-header">
|
</div>
|
||||||
<h1>{{.PackageDescriptor.Package.Name}} ({{.PackageDescriptor.Version.Version}})</h1>
|
</div>
|
||||||
<div>
|
{{else}}
|
||||||
{{$timeStr := DateUtils.TimeSince .PackageDescriptor.Version.CreatedUnix}}
|
<div role="main" aria-label="{{.Title}}" class="page-content user profile packages">
|
||||||
{{if .HasRepositoryAccess}}
|
<div class="ui container">
|
||||||
{{ctx.Locale.Tr "packages.published_by_in" $timeStr .PackageDescriptor.Creator.HomeLink .PackageDescriptor.Creator.GetDisplayName .PackageDescriptor.Repository.Link .PackageDescriptor.Repository.FullName}}
|
<div class="ui stackable grid">
|
||||||
{{else}}
|
<div class="ui four wide column">
|
||||||
{{ctx.Locale.Tr "packages.published_by" $timeStr .PackageDescriptor.Creator.HomeLink .PackageDescriptor.Creator.GetDisplayName}}
|
{{template "shared/user/profile_big_avatar" .}}
|
||||||
{{end}}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="ui twelve wide column tw-mb-4">
|
||||||
<div class="issue-content">
|
{{template "user/overview/header" .}}
|
||||||
<div class="issue-content-left">
|
{{template "package/shared/view" .}}
|
||||||
{{template "package/content/alpine" .}}
|
|
||||||
{{template "package/content/arch" .}}
|
|
||||||
{{template "package/content/cargo" .}}
|
|
||||||
{{template "package/content/chef" .}}
|
|
||||||
{{template "package/content/composer" .}}
|
|
||||||
{{template "package/content/conan" .}}
|
|
||||||
{{template "package/content/conda" .}}
|
|
||||||
{{template "package/content/container" .}}
|
|
||||||
{{template "package/content/cran" .}}
|
|
||||||
{{template "package/content/debian" .}}
|
|
||||||
{{template "package/content/generic" .}}
|
|
||||||
{{template "package/content/go" .}}
|
|
||||||
{{template "package/content/helm" .}}
|
|
||||||
{{template "package/content/maven" .}}
|
|
||||||
{{template "package/content/npm" .}}
|
|
||||||
{{template "package/content/nuget" .}}
|
|
||||||
{{template "package/content/pub" .}}
|
|
||||||
{{template "package/content/pypi" .}}
|
|
||||||
{{template "package/content/rpm" .}}
|
|
||||||
{{template "package/content/rubygems" .}}
|
|
||||||
{{template "package/content/swift" .}}
|
|
||||||
{{template "package/content/vagrant" .}}
|
|
||||||
</div>
|
|
||||||
<div class="issue-content-right ui segment">
|
|
||||||
<strong>{{ctx.Locale.Tr "packages.details"}}</strong>
|
|
||||||
<div class="ui relaxed list flex-items-block">
|
|
||||||
<div class="item">{{svg .PackageDescriptor.Package.Type.SVGName}} {{.PackageDescriptor.Package.Type.Name}}</div>
|
|
||||||
{{if .HasRepositoryAccess}}
|
|
||||||
<div class="item">{{svg "octicon-repo"}} <a href="{{.PackageDescriptor.Repository.Link}}">{{.PackageDescriptor.Repository.FullName}}</a></div>
|
|
||||||
{{end}}
|
|
||||||
<div class="item">{{svg "octicon-calendar"}} {{DateUtils.TimeSince .PackageDescriptor.Version.CreatedUnix}}</div>
|
|
||||||
<div class="item">{{svg "octicon-download"}} {{.PackageDescriptor.Version.DownloadCount}}</div>
|
|
||||||
{{template "package/metadata/alpine" .}}
|
|
||||||
{{template "package/metadata/arch" .}}
|
|
||||||
{{template "package/metadata/cargo" .}}
|
|
||||||
{{template "package/metadata/chef" .}}
|
|
||||||
{{template "package/metadata/composer" .}}
|
|
||||||
{{template "package/metadata/conan" .}}
|
|
||||||
{{template "package/metadata/conda" .}}
|
|
||||||
{{template "package/metadata/container" .}}
|
|
||||||
{{template "package/metadata/cran" .}}
|
|
||||||
{{template "package/metadata/debian" .}}
|
|
||||||
{{template "package/metadata/generic" .}}
|
|
||||||
{{template "package/metadata/helm" .}}
|
|
||||||
{{template "package/metadata/maven" .}}
|
|
||||||
{{template "package/metadata/npm" .}}
|
|
||||||
{{template "package/metadata/nuget" .}}
|
|
||||||
{{template "package/metadata/pub" .}}
|
|
||||||
{{template "package/metadata/pypi" .}}
|
|
||||||
{{template "package/metadata/rpm" .}}
|
|
||||||
{{template "package/metadata/rubygems" .}}
|
|
||||||
{{template "package/metadata/swift" .}}
|
|
||||||
{{template "package/metadata/vagrant" .}}
|
|
||||||
{{if not (and (eq .PackageDescriptor.Package.Type "container") .PackageDescriptor.Metadata.Manifests)}}
|
|
||||||
<div class="item">{{svg "octicon-database"}} {{FileSize .PackageDescriptor.CalculateBlobSize}}</div>
|
|
||||||
{{end}}
|
|
||||||
</div>
|
|
||||||
{{if not (eq .PackageDescriptor.Package.Type "container")}}
|
|
||||||
<div class="divider"></div>
|
|
||||||
<strong>{{ctx.Locale.Tr "packages.assets"}} ({{len .PackageDescriptor.Files}})</strong>
|
|
||||||
<div class="ui relaxed list">
|
|
||||||
{{range .PackageDescriptor.Files}}
|
|
||||||
<div class="item">
|
|
||||||
<a href="{{$.Link}}/files/{{.File.ID}}">{{.File.Name}}</a>
|
|
||||||
<span class="text small file-size">{{FileSize .Blob.Size}}</span>
|
|
||||||
</div>
|
|
||||||
{{end}}
|
|
||||||
</div>
|
|
||||||
{{end}}
|
|
||||||
<div class="divider"></div>
|
|
||||||
<strong>{{ctx.Locale.Tr "packages.versions"}} ({{.TotalVersionCount}})</strong>
|
|
||||||
<a class="tw-float-right" href="{{$.PackageDescriptor.PackageWebLink}}/versions">{{ctx.Locale.Tr "packages.versions.view_all"}}</a>
|
|
||||||
<div class="ui relaxed list">
|
|
||||||
{{range .LatestVersions}}
|
|
||||||
<div class="item tw-flex">
|
|
||||||
<a class="tw-flex-1 gt-ellipsis" title="{{.Version}}" href="{{$.PackageDescriptor.PackageWebLink}}/{{PathEscape .LowerVersion}}">{{.Version}}</a>
|
|
||||||
<span class="text small">{{DateUtils.AbsoluteShort .CreatedUnix}}</span>
|
|
||||||
</div>
|
|
||||||
{{end}}
|
|
||||||
</div>
|
|
||||||
{{if or .CanWritePackages .HasRepositoryAccess}}
|
|
||||||
<div class="divider"></div>
|
|
||||||
<div class="ui relaxed list flex-items-block">
|
|
||||||
{{if .HasRepositoryAccess}}
|
|
||||||
<div class="item">{{svg "octicon-issue-opened"}} <a href="{{.PackageDescriptor.Repository.Link}}/issues">{{ctx.Locale.Tr "repo.issues"}}</a></div>
|
|
||||||
{{end}}
|
|
||||||
{{if .CanWritePackages}}
|
|
||||||
<div class="item">{{svg "octicon-tools"}} <a href="{{.Link}}/settings">{{ctx.Locale.Tr "repo.settings"}}</a></div>
|
|
||||||
{{end}}
|
|
||||||
</div>
|
|
||||||
{{end}}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{{end}}
|
||||||
{{template "base/footer" .}}
|
{{template "base/footer" .}}
|
||||||
|
Reference in New Issue
Block a user