mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Project: show referenced PRs in issue cards (#14183)
Co-authored-by: Lauris BH <lauris@nix.lv>
This commit is contained in:
		@@ -256,6 +256,10 @@ func (b *ProjectBoard) LoadIssues() (IssueList, error) {
 | 
				
			|||||||
		issueList = append(issueList, issues...)
 | 
							issueList = append(issueList, issues...)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err := IssueList(issueList).LoadComments(); err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	b.Issues = issueList
 | 
						b.Issues = issueList
 | 
				
			||||||
	return issueList, nil
 | 
						return issueList, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -280,10 +280,32 @@ func ViewProject(ctx *context.Context) {
 | 
				
			|||||||
		boards[0].Title = ctx.Tr("repo.projects.type.uncategorized")
 | 
							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)
 | 
							ctx.ServerError("LoadIssuesOfBoards", err)
 | 
				
			||||||
		return
 | 
							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()))
 | 
						project.RenderedContent = string(markdown.Render([]byte(project.Description), ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas()))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -166,13 +166,21 @@
 | 
				
			|||||||
								</span>
 | 
													</span>
 | 
				
			||||||
								<a class="project-board-title" href="{{$.RepoLink}}/issues/{{.Index}}">#{{.Index}} {{.Title}}</a>
 | 
													<a class="project-board-title" href="{{$.RepoLink}}/issues/{{.Index}}">#{{.Index}} {{.Title}}</a>
 | 
				
			||||||
							</div>
 | 
												</div>
 | 
				
			||||||
 | 
												{{- if .MilestoneID }}
 | 
				
			||||||
							<div class="meta">
 | 
												<div class="meta">
 | 
				
			||||||
								{{ if .MilestoneID }}
 | 
					 | 
				
			||||||
								<a class="milestone" href="{{$.RepoLink}}/milestone/{{ .MilestoneID}}">
 | 
													<a class="milestone" href="{{$.RepoLink}}/milestone/{{ .MilestoneID}}">
 | 
				
			||||||
									{{svg "octicon-milestone"}} {{ .Milestone.Name }}
 | 
														{{svg "octicon-milestone"}} {{ .Milestone.Name }}
 | 
				
			||||||
								</a>
 | 
													</a>
 | 
				
			||||||
								{{ end }}
 | 
					 | 
				
			||||||
							</div>
 | 
												</div>
 | 
				
			||||||
 | 
												{{- end }}
 | 
				
			||||||
 | 
												{{- range index $.LinkedPRs .ID }}
 | 
				
			||||||
 | 
												<div class="meta">
 | 
				
			||||||
 | 
													<a href="{{$.RepoLink}}/pulls/{{ .ID }}">
 | 
				
			||||||
 | 
														<span class="{{if .PullRequest.HasMerged}}purple{{else if .IsClosed}}red{{else}}green{{end}}">{{svg "octicon-git-merge"}}</span>
 | 
				
			||||||
 | 
														{{ .Title}} (#{{ .ID }})
 | 
				
			||||||
 | 
													</a>
 | 
				
			||||||
 | 
												</div>
 | 
				
			||||||
 | 
												{{- end }}
 | 
				
			||||||
						</div>
 | 
											</div>
 | 
				
			||||||
						<div class="extra content">
 | 
											<div class="extra content">
 | 
				
			||||||
							{{ range .Labels }}
 | 
												{{ range .Labels }}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2921,7 +2921,7 @@ tbody.commit-list {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.board-card .content {
 | 
					.board-card .content {
 | 
				
			||||||
  padding: 5px 8px !important;
 | 
					  padding: 8px 8px 5px !important;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.board-card .extra.content {
 | 
					.board-card .extra.content {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user