mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09: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" | 	"fmt" | ||||||
|  |  | ||||||
| 	"code.gitea.io/gitea/models/db" | 	"code.gitea.io/gitea/models/db" | ||||||
|  | 	project_model "code.gitea.io/gitea/models/project" | ||||||
| 	repo_model "code.gitea.io/gitea/models/repo" | 	repo_model "code.gitea.io/gitea/models/repo" | ||||||
| 	user_model "code.gitea.io/gitea/models/user" | 	user_model "code.gitea.io/gitea/models/user" | ||||||
| 	"code.gitea.io/gitea/modules/container" | 	"code.gitea.io/gitea/modules/container" | ||||||
| @@ -222,6 +223,46 @@ func (issues IssueList) loadMilestones(ctx context.Context) error { | |||||||
| 	return nil | 	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 { | func (issues IssueList) loadAssignees(ctx context.Context) error { | ||||||
| 	if len(issues) == 0 { | 	if len(issues) == 0 { | ||||||
| 		return nil | 		return nil | ||||||
| @@ -495,6 +536,10 @@ func (issues IssueList) loadAttributes(ctx context.Context) error { | |||||||
| 		return fmt.Errorf("issue.loadAttributes: loadMilestones: %v", err) | 		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 { | 	if err := issues.loadAssignees(ctx); err != nil { | ||||||
| 		return fmt.Errorf("issue.loadAttributes: loadAssignees: %v", err) | 		return fmt.Errorf("issue.loadAttributes: loadAssignees: %v", err) | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -89,6 +89,11 @@ | |||||||
| 							{{svg "octicon-milestone" 14 "mr-2"}}{{.Milestone.Name}} | 							{{svg "octicon-milestone" 14 "mr-2"}}{{.Milestone.Name}} | ||||||
| 						</a> | 						</a> | ||||||
| 					{{end}} | 					{{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}} | 					{{if .Ref}} | ||||||
| 						<a class="ref" {{if $.RepoLink}}href="{{index $.IssueRefURLs .ID}}"{{else}}href="{{.Repo.Link}}{{index $.IssueRefURLs .ID}}"{{end}}> | 						<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}} | 							{{svg "octicon-git-branch" 14 "mr-2"}}{{index $.IssueRefEndNames .ID}} | ||||||
|   | |||||||
| @@ -101,7 +101,8 @@ | |||||||
|         padding-left: 5px; |         padding-left: 5px; | ||||||
|       } |       } | ||||||
|  |  | ||||||
|       a.milestone { |       a.milestone, | ||||||
|  |       a.project { | ||||||
|         margin-left: 5px; |         margin-left: 5px; | ||||||
|       } |       } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user