diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2025-02-16 21:14:56 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-02-17 05:14:56 +0000 |
commit | 69de5a65c25b08b501ed1e8123fcdad43f382213 (patch) | |
tree | 9b410f46f8249acca09df5fda51ca4e219742c7c /routers | |
parent | 5df9fd3e9c6ae7f848da65dbe9b9d321f29c003a (diff) | |
download | gitea-69de5a65c25b08b501ed1e8123fcdad43f382213.tar.gz gitea-69de5a65c25b08b501ed1e8123fcdad43f382213.zip |
Fix project issues list and counting (#33594)
Co-authored-by: delvh <dev.lh@web.de>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Diffstat (limited to 'routers')
-rw-r--r-- | routers/web/org/projects.go | 20 | ||||
-rw-r--r-- | routers/web/repo/projects.go | 11 | ||||
-rw-r--r-- | routers/web/user/home.go | 4 |
3 files changed, 30 insertions, 5 deletions
diff --git a/routers/web/org/projects.go b/routers/web/org/projects.go index 32da1b41d1..cbbc51d8e9 100644 --- a/routers/web/org/projects.go +++ b/routers/web/org/projects.go @@ -77,6 +77,11 @@ func Projects(ctx *context.Context) { return } + if err := project_service.LoadIssueNumbersForProjects(ctx, projects, ctx.Doer); err != nil { + ctx.ServerError("LoadIssueNumbersForProjects", err) + return + } + opTotal, err := db.Count[project_model.Project](ctx, project_model.SearchOptions{ OwnerID: ctx.ContextUser.ID, IsClosed: optional.Some(!isShowClosed), @@ -327,6 +332,10 @@ func ViewProject(ctx *context.Context) { ctx.NotFound("", nil) return } + if err := project.LoadOwner(ctx); err != nil { + ctx.ServerError("LoadOwner", err) + return + } columns, err := project.GetColumns(ctx) if err != nil { @@ -340,14 +349,21 @@ func ViewProject(ctx *context.Context) { } assigneeID := ctx.FormInt64("assignee") // TODO: use "optional" but not 0 in the future - issuesMap, err := issues_model.LoadIssuesFromColumnList(ctx, columns, &issues_model.IssuesOptions{ + opts := issues_model.IssuesOptions{ LabelIDs: labelIDs, AssigneeID: optional.Some(assigneeID), - }) + Owner: project.Owner, + Doer: ctx.Doer, + } + + issuesMap, err := project_service.LoadIssuesFromProject(ctx, project, &opts) if err != nil { ctx.ServerError("LoadIssuesOfColumns", err) return } + for _, column := range columns { + column.NumIssues = int64(len(issuesMap[column.ID])) + } if project.CardType != project_model.CardTypeTextOnly { issuesAttachmentMap := make(map[int64][]*attachment_model.Attachment) diff --git a/routers/web/repo/projects.go b/routers/web/repo/projects.go index 346132102f..220684f2ea 100644 --- a/routers/web/repo/projects.go +++ b/routers/web/repo/projects.go @@ -92,6 +92,11 @@ func Projects(ctx *context.Context) { return } + if err := project_service.LoadIssueNumbersForProjects(ctx, projects, ctx.Doer); err != nil { + ctx.ServerError("LoadIssueNumbersForProjects", err) + return + } + for i := range projects { rctx := renderhelper.NewRenderContextRepoComment(ctx, repo) projects[i].RenderedContent, err = markdown.RenderString(rctx, projects[i].Description) @@ -312,7 +317,8 @@ func ViewProject(ctx *context.Context) { assigneeID := ctx.FormInt64("assignee") // TODO: use "optional" but not 0 in the future - issuesMap, err := issues_model.LoadIssuesFromColumnList(ctx, columns, &issues_model.IssuesOptions{ + issuesMap, err := project_service.LoadIssuesFromProject(ctx, project, &issues_model.IssuesOptions{ + RepoIDs: []int64{ctx.Repo.Repository.ID}, LabelIDs: labelIDs, AssigneeID: optional.Some(assigneeID), }) @@ -320,6 +326,9 @@ func ViewProject(ctx *context.Context) { ctx.ServerError("LoadIssuesOfColumns", err) return } + for _, column := range columns { + column.NumIssues = int64(len(issuesMap[column.ID])) + } if project.CardType != project_model.CardTypeTextOnly { issuesAttachmentMap := make(map[int64][]*repo_model.Attachment) diff --git a/routers/web/user/home.go b/routers/web/user/home.go index ff9334da6e..12c0b36678 100644 --- a/routers/web/user/home.go +++ b/routers/web/user/home.go @@ -417,7 +417,7 @@ func buildIssueOverview(ctx *context.Context, unitType unit.Type) { IsPull: optional.Some(isPullList), SortType: sortType, IsArchived: optional.Some(false), - User: ctx.Doer, + Doer: ctx.Doer, } // -------------------------------------------------------------------------- // Build opts (IssuesOptions), which contains filter information. @@ -429,7 +429,7 @@ func buildIssueOverview(ctx *context.Context, unitType unit.Type) { // Get repository IDs where User/Org/Team has access. if ctx.Org != nil && ctx.Org.Organization != nil { - opts.Org = ctx.Org.Organization + opts.Owner = ctx.Org.Organization.AsUser() opts.Team = ctx.Org.Team issue.PrepareFilterIssueLabels(ctx, 0, ctx.Org.Organization.AsUser()) |