mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Display project in issue list (#20434)
Co-authored-by: lukas <lukas.walter@aceart.de>
This commit is contained in:
		@@ -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)
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -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}}
 | 
			
		||||
 
 | 
			
		||||
@@ -101,7 +101,8 @@
 | 
			
		||||
        padding-left: 5px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      a.milestone {
 | 
			
		||||
      a.milestone,
 | 
			
		||||
      a.project {
 | 
			
		||||
        margin-left: 5px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user