summaryrefslogtreecommitdiffstats
path: root/models/issue.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/issue.go')
-rw-r--r--models/issue.go34
1 files changed, 22 insertions, 12 deletions
diff --git a/models/issue.go b/models/issue.go
index ee75623f53..9f7b9787eb 100644
--- a/models/issue.go
+++ b/models/issue.go
@@ -1491,6 +1491,7 @@ type UserIssueStatsOptions struct {
IsPull bool
IsClosed bool
IssueIDs []int64
+ LabelIDs []int64
}
// GetUserIssueStats returns issue statistic information for dashboard by given conditions.
@@ -1507,29 +1508,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))
@@ -1537,27 +1547,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))
@@ -1567,7 +1577,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))
@@ -1575,14 +1585,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))
@@ -1590,7 +1600,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 {