diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2021-01-02 01:49:42 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-01 12:49:42 -0500 |
commit | 21adeaad70ba2386673e00e69147b1cc40551b76 (patch) | |
tree | c508337c4ba642f50b70da810884134ac20799e0 | |
parent | a07e67d9cc39506c149cfadcf0d6f2ab234cf7f6 (diff) | |
download | gitea-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.go | 34 | ||||
-rw-r--r-- | routers/user/home.go | 4 |
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" |