summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2021-01-02 01:49:42 +0800
committerGitHub <noreply@github.com>2021-01-01 12:49:42 -0500
commit21adeaad70ba2386673e00e69147b1cc40551b76 (patch)
treec508337c4ba642f50b70da810884134ac20799e0
parenta07e67d9cc39506c149cfadcf0d6f2ab234cf7f6 (diff)
downloadgitea-21adeaad70ba2386673e00e69147b1cc40551b76.tar.gz
gitea-21adeaad70ba2386673e00e69147b1cc40551b76.zip
Fix dashboard issues labels filter bug (#14210)
Co-authored-by: zeripath <art27@cantab.net>
-rw-r--r--models/issue.go34
-rw-r--r--routers/user/home.go4
2 files changed, 26 insertions, 12 deletions
diff --git a/models/issue.go b/models/issue.go
index 3161fd3e82..eb47a74091 100644
--- a/models/issue.go
+++ b/models/issue.go
@@ -1500,6 +1500,7 @@ type UserIssueStatsOptions struct {
IsPull bool
IsClosed bool
IssueIDs []int64
+ LabelIDs []int64
}
// GetUserIssueStats returns issue statistic information for dashboard by given conditions.
@@ -1516,29 +1517,38 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
cond = cond.And(builder.In("issue.id", opts.IssueIDs))
}
+ sess := func(cond builder.Cond) *xorm.Session {
+ s := x.Where(cond)
+ if len(opts.LabelIDs) > 0 {
+ s.Join("INNER", "issue_label", "issue_label.issue_id = issue.id").
+ In("issue_label.label_id", opts.LabelIDs)
+ }
+ return s
+ }
+
switch opts.FilterMode {
case FilterModeAll:
- stats.OpenCount, err = x.Where(cond).And("issue.is_closed = ?", false).
+ stats.OpenCount, err = sess(cond).And("issue.is_closed = ?", false).
And(builder.In("issue.repo_id", opts.UserRepoIDs)).
Count(new(Issue))
if err != nil {
return nil, err
}
- stats.ClosedCount, err = x.Where(cond).And("issue.is_closed = ?", true).
+ stats.ClosedCount, err = sess(cond).And("issue.is_closed = ?", true).
And(builder.In("issue.repo_id", opts.UserRepoIDs)).
Count(new(Issue))
if err != nil {
return nil, err
}
case FilterModeAssign:
- stats.OpenCount, err = x.Where(cond).And("issue.is_closed = ?", false).
+ stats.OpenCount, err = sess(cond).And("issue.is_closed = ?", false).
Join("INNER", "issue_assignees", "issue.id = issue_assignees.issue_id").
And("issue_assignees.assignee_id = ?", opts.UserID).
Count(new(Issue))
if err != nil {
return nil, err
}
- stats.ClosedCount, err = x.Where(cond).And("issue.is_closed = ?", true).
+ stats.ClosedCount, err = sess(cond).And("issue.is_closed = ?", true).
Join("INNER", "issue_assignees", "issue.id = issue_assignees.issue_id").
And("issue_assignees.assignee_id = ?", opts.UserID).
Count(new(Issue))
@@ -1546,27 +1556,27 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
return nil, err
}
case FilterModeCreate:
- stats.OpenCount, err = x.Where(cond).And("issue.is_closed = ?", false).
+ stats.OpenCount, err = sess(cond).And("issue.is_closed = ?", false).
And("issue.poster_id = ?", opts.UserID).
Count(new(Issue))
if err != nil {
return nil, err
}
- stats.ClosedCount, err = x.Where(cond).And("issue.is_closed = ?", true).
+ stats.ClosedCount, err = sess(cond).And("issue.is_closed = ?", true).
And("issue.poster_id = ?", opts.UserID).
Count(new(Issue))
if err != nil {
return nil, err
}
case FilterModeMention:
- stats.OpenCount, err = x.Where(cond).And("issue.is_closed = ?", false).
+ stats.OpenCount, err = sess(cond).And("issue.is_closed = ?", false).
Join("INNER", "issue_user", "issue.id = issue_user.issue_id and issue_user.is_mentioned = ?", true).
And("issue_user.uid = ?", opts.UserID).
Count(new(Issue))
if err != nil {
return nil, err
}
- stats.ClosedCount, err = x.Where(cond).And("issue.is_closed = ?", true).
+ stats.ClosedCount, err = sess(cond).And("issue.is_closed = ?", true).
Join("INNER", "issue_user", "issue.id = issue_user.issue_id and issue_user.is_mentioned = ?", true).
And("issue_user.uid = ?", opts.UserID).
Count(new(Issue))
@@ -1576,7 +1586,7 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
}
cond = cond.And(builder.Eq{"issue.is_closed": opts.IsClosed})
- stats.AssignCount, err = x.Where(cond).
+ stats.AssignCount, err = sess(cond).
Join("INNER", "issue_assignees", "issue.id = issue_assignees.issue_id").
And("issue_assignees.assignee_id = ?", opts.UserID).
Count(new(Issue))
@@ -1584,14 +1594,14 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
return nil, err
}
- stats.CreateCount, err = x.Where(cond).
+ stats.CreateCount, err = sess(cond).
And("poster_id = ?", opts.UserID).
Count(new(Issue))
if err != nil {
return nil, err
}
- stats.MentionCount, err = x.Where(cond).
+ stats.MentionCount, err = sess(cond).
Join("INNER", "issue_user", "issue.id = issue_user.issue_id and issue_user.is_mentioned = ?", true).
And("issue_user.uid = ?", opts.UserID).
Count(new(Issue))
@@ -1599,7 +1609,7 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
return nil, err
}
- stats.YourRepositoriesCount, err = x.Where(cond).
+ stats.YourRepositoriesCount, err = sess(cond).
And(builder.In("issue.repo_id", opts.UserRepoIDs)).
Count(new(Issue))
if err != nil {
diff --git a/routers/user/home.go b/routers/user/home.go
index 27b7f3c29b..351af1c0d9 100644
--- a/routers/user/home.go
+++ b/routers/user/home.go
@@ -580,6 +580,7 @@ func Issues(ctx *context.Context) {
FilterMode: filterMode,
IsPull: isPullList,
IsClosed: isShowClosed,
+ LabelIDs: opts.LabelIDs,
}
if len(repoIDs) > 0 {
userIssueStatsOpts.UserRepoIDs = repoIDs
@@ -599,6 +600,7 @@ func Issues(ctx *context.Context) {
IsPull: isPullList,
IsClosed: isShowClosed,
IssueIDs: issueIDsFromSearch,
+ LabelIDs: opts.LabelIDs,
}
if len(repoIDs) > 0 {
statsOpts.RepoIDs = repoIDs
@@ -621,6 +623,7 @@ func Issues(ctx *context.Context) {
IsPull: isPullList,
IsClosed: isShowClosed,
IssueIDs: issueIDsFromSearch,
+ LabelIDs: opts.LabelIDs,
})
if err != nil {
ctx.ServerError("GetUserIssueStats All", err)
@@ -672,6 +675,7 @@ func Issues(ctx *context.Context) {
ctx.Data["RepoIDs"] = repoIDs
ctx.Data["IsShowClosed"] = isShowClosed
ctx.Data["TotalIssueCount"] = totalIssues
+ ctx.Data["SelectLabels"] = selectLabels
if isShowClosed {
ctx.Data["State"] = "closed"