diff --git a/models/project_board.go b/models/project_board.go index 8ffa21837..a9c0b3ed8 100644 --- a/models/project_board.go +++ b/models/project_board.go @@ -256,6 +256,10 @@ func (b *ProjectBoard) LoadIssues() (IssueList, error) { issueList = append(issueList, issues...) } + if err := IssueList(issueList).LoadComments(); err != nil { + return nil, err + } + b.Issues = issueList return issueList, nil } diff --git a/routers/repo/projects.go b/routers/repo/projects.go index d3cdab6b7..4cff199b3 100644 --- a/routers/repo/projects.go +++ b/routers/repo/projects.go @@ -280,10 +280,32 @@ func ViewProject(ctx *context.Context) { boards[0].Title = ctx.Tr("repo.projects.type.uncategorized") } - if ctx.Data["Issues"], err = boards.LoadIssues(); err != nil { + issueList, err := boards.LoadIssues() + if err != nil { ctx.ServerError("LoadIssuesOfBoards", err) return } + ctx.Data["Issues"] = issueList + + linkedPrsMap := make(map[int64][]*models.Issue) + for _, issue := range issueList { + var referencedIds []int64 + for _, comment := range issue.Comments { + if comment.RefIssueID != 0 && comment.RefIsPull { + referencedIds = append(referencedIds, comment.RefIssueID) + } + } + + if len(referencedIds) > 0 { + if linkedPrs, err := models.Issues(&models.IssuesOptions{ + IssueIDs: referencedIds, + IsPull: util.OptionalBoolTrue, + }); err == nil { + linkedPrsMap[issue.ID] = linkedPrs + } + } + } + ctx.Data["LinkedPRs"] = linkedPrsMap project.RenderedContent = string(markdown.Render([]byte(project.Description), ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas())) diff --git a/templates/repo/projects/view.tmpl b/templates/repo/projects/view.tmpl index a3606c169..9b2aa4bc7 100644 --- a/templates/repo/projects/view.tmpl +++ b/templates/repo/projects/view.tmpl @@ -166,13 +166,21 @@ #{{.Index}} {{.Title}} + {{- if .MilestoneID }}
+ {{- end }} + {{- range index $.LinkedPRs .ID }} + + {{- end }}