summaryrefslogtreecommitdiffstats
path: root/models
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 /models
parenta07e67d9cc39506c149cfadcf0d6f2ab234cf7f6 (diff)
downloadgitea-21adeaad70ba2386673e00e69147b1cc40551b76.tar.gz
gitea-21adeaad70ba2386673e00e69147b1cc40551b76.zip
Fix dashboard issues labels filter bug (#14210)
Co-authored-by: zeripath <art27@cantab.net>
Diffstat (limited to 'models')
-rw-r--r--models/issue.go34
1 files changed, 22 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 {