aboutsummaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2025-02-16 21:14:56 -0800
committerGitHub <noreply@github.com>2025-02-17 05:14:56 +0000
commit69de5a65c25b08b501ed1e8123fcdad43f382213 (patch)
tree9b410f46f8249acca09df5fda51ca4e219742c7c /routers
parent5df9fd3e9c6ae7f848da65dbe9b9d321f29c003a (diff)
downloadgitea-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.go20
-rw-r--r--routers/web/repo/projects.go11
-rw-r--r--routers/web/user/home.go4
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())