diff options
author | aceArt-GmbH <33117017+aceArt-GmbH@users.noreply.github.com> | 2022-07-26 15:42:23 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-26 15:42:23 +0200 |
commit | ed6cd3cbb7cf42086ddb049a22b8f4604f445113 (patch) | |
tree | 91e86e315f8a3b61b1caade1ee5a205155f796f4 | |
parent | 4fc53a3f30f6c71325b01654019c28c334271109 (diff) | |
download | gitea-ed6cd3cbb7cf42086ddb049a22b8f4604f445113.tar.gz gitea-ed6cd3cbb7cf42086ddb049a22b8f4604f445113.zip |
Display project in issue list (#20434)
Co-authored-by: lukas <lukas.walter@aceart.de>
-rw-r--r-- | models/issues/issue_list.go | 45 | ||||
-rw-r--r-- | templates/shared/issuelist.tmpl | 5 | ||||
-rw-r--r-- | web_src/less/shared/issuelist.less | 3 |
3 files changed, 52 insertions, 1 deletions
diff --git a/models/issues/issue_list.go b/models/issues/issue_list.go index e311e80b1d..874f2a6368 100644 --- a/models/issues/issue_list.go +++ b/models/issues/issue_list.go @@ -9,6 +9,7 @@ import ( "fmt" "code.gitea.io/gitea/models/db" + project_model "code.gitea.io/gitea/models/project" repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/container" @@ -222,6 +223,46 @@ func (issues IssueList) loadMilestones(ctx context.Context) error { return nil } +func (issues IssueList) getProjectIDs() []int64 { + ids := make(map[int64]struct{}, len(issues)) + for _, issue := range issues { + projectID := issue.ProjectID() + if _, ok := ids[projectID]; !ok { + ids[projectID] = struct{}{} + } + } + return container.KeysInt64(ids) +} + +func (issues IssueList) loadProjects(ctx context.Context) error { + projectIDs := issues.getProjectIDs() + if len(projectIDs) == 0 { + return nil + } + + projectMaps := make(map[int64]*project_model.Project, len(projectIDs)) + left := len(projectIDs) + for left > 0 { + limit := db.DefaultMaxInSize + if left < limit { + limit = left + } + err := db.GetEngine(ctx). + In("id", projectIDs[:limit]). + Find(&projectMaps) + if err != nil { + return err + } + left -= limit + projectIDs = projectIDs[limit:] + } + + for _, issue := range issues { + issue.Project = projectMaps[issue.ProjectID()] + } + return nil +} + func (issues IssueList) loadAssignees(ctx context.Context) error { if len(issues) == 0 { return nil @@ -495,6 +536,10 @@ func (issues IssueList) loadAttributes(ctx context.Context) error { return fmt.Errorf("issue.loadAttributes: loadMilestones: %v", err) } + if err := issues.loadProjects(ctx); err != nil { + return fmt.Errorf("issue.loadAttributes: loadProjects: %v", err) + } + if err := issues.loadAssignees(ctx); err != nil { return fmt.Errorf("issue.loadAttributes: loadAssignees: %v", err) } diff --git a/templates/shared/issuelist.tmpl b/templates/shared/issuelist.tmpl index 7d0abb689b..d1555c16c5 100644 --- a/templates/shared/issuelist.tmpl +++ b/templates/shared/issuelist.tmpl @@ -89,6 +89,11 @@ {{svg "octicon-milestone" 14 "mr-2"}}{{.Milestone.Name}} </a> {{end}} + {{if .Project}} + <a class="project" {{if $.RepoLink}}href="{{$.RepoLink}}/projects/{{.Project.ID}}"{{else}}href="{{.Repo.Link}}/projects/{{.Project.ID}}"{{end}}> + {{svg "octicon-project" 14 "mr-2"}}{{.Project.Title}} + </a> + {{end}} {{if .Ref}} <a class="ref" {{if $.RepoLink}}href="{{index $.IssueRefURLs .ID}}"{{else}}href="{{.Repo.Link}}{{index $.IssueRefURLs .ID}}"{{end}}> {{svg "octicon-git-branch" 14 "mr-2"}}{{index $.IssueRefEndNames .ID}} diff --git a/web_src/less/shared/issuelist.less b/web_src/less/shared/issuelist.less index 775fc98478..a0331a1cbe 100644 --- a/web_src/less/shared/issuelist.less +++ b/web_src/less/shared/issuelist.less @@ -101,7 +101,8 @@ padding-left: 5px; } - a.milestone { + a.milestone, + a.project { margin-left: 5px; } |