diff --git a/models/issues/issue.go b/models/issues/issue.go index 62b936331b92d..b865c34146293 100644 --- a/models/issues/issue.go +++ b/models/issues/issue.go @@ -1226,7 +1226,7 @@ func (opts *IssuesOptions) setupSessionNoLimit(sess *xorm.Session) { } if opts.MentionedID > 0 { - applyMentionedCondition(sess, opts.MentionedID) + applyMentionedCondition(sess, opts.MentionedID, opts.IsPull.IsTrue()) } if opts.ReviewRequestedID > 0 { @@ -1388,10 +1388,43 @@ func applyPosterCondition(sess *xorm.Session, posterID int64) *xorm.Session { return sess.And("issue.poster_id=?", posterID) } -func applyMentionedCondition(sess *xorm.Session, mentionedID int64) *xorm.Session { - return sess.Join("INNER", "issue_user", "issue.id = issue_user.issue_id"). - And("issue_user.is_mentioned = ?", true). - And("issue_user.uid = ?", mentionedID) +func applyMentionedCondition(sess *xorm.Session, mentionedID int64, isPull bool) *xorm.Session { + // Query for any type of relation to the user, not just @ mention + poster := builder.Eq{"issue.poster_id": mentionedID} + assignee := builder.In("issue.id", builder. + Select("issue_id"). + From("issue_assignees"). + Where(builder.Eq{"assignee_id": mentionedID}), + ) + mention := builder.In("issue.id", builder. + Select("issue_id"). + From("issue_user"). + Where(builder.Eq{"is_mentioned": true, "uid": mentionedID}), + ) + comment := builder.In("issue.id", builder. + Select("issue_id"). + From("comment"). + Where(builder.Eq{"poster_id": mentionedID}), + ) + + if !isPull { + return sess.And(builder.Or(poster, assignee, mention, comment)) + } + + reviewer := builder.In("issue.id", builder. + Select("issue_id"). + From("review"). + Where(builder.Or( + builder.Eq{"reviewer_id": mentionedID}, + builder.In("reviewer_team_id", builder. + Select("team_id"). + From("team_user"). + Where(builder.Eq{"uid": mentionedID}), + ), + )), + ) + + return sess.And(builder.Or(poster, assignee, mention, comment, reviewer)) } func applyReviewRequestedCondition(sess *xorm.Session, reviewRequestedID int64) *xorm.Session { @@ -1667,7 +1700,7 @@ func getIssueStatsChunk(opts *IssueStatsOptions, issueIDs []int64) (*IssueStats, } if opts.MentionedID > 0 { - applyMentionedCondition(sess, opts.MentionedID) + applyMentionedCondition(sess, opts.MentionedID, opts.IsPull.IsTrue()) } if opts.ReviewRequestedID > 0 { @@ -1789,13 +1822,13 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) { return nil, err } case FilterModeMention: - stats.OpenCount, err = applyMentionedCondition(sess(cond), opts.UserID). + stats.OpenCount, err = applyMentionedCondition(sess(cond), opts.UserID, opts.IsPull). And("issue.is_closed = ?", false). Count(new(Issue)) if err != nil { return nil, err } - stats.ClosedCount, err = applyMentionedCondition(sess(cond), opts.UserID). + stats.ClosedCount, err = applyMentionedCondition(sess(cond), opts.UserID, opts.IsPull). And("issue.is_closed = ?", true). Count(new(Issue)) if err != nil { @@ -1827,7 +1860,7 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) { return nil, err } - stats.MentionCount, err = applyMentionedCondition(sess(cond), opts.UserID).Count(new(Issue)) + stats.MentionCount, err = applyMentionedCondition(sess(cond), opts.UserID, opts.IsPull).Count(new(Issue)) if err != nil { return nil, err } diff --git a/models/issues/issue_test.go b/models/issues/issue_test.go index de1da19ab9fad..b73c84556a344 100644 --- a/models/issues/issue_test.go +++ b/models/issues/issue_test.go @@ -212,6 +212,7 @@ func TestGetUserIssueStats(t *testing.T) { YourRepositoriesCount: 1, // 6 AssignCount: 1, // 6 CreateCount: 1, // 6 + MentionCount: 1, // 6 OpenCount: 1, // 6 ClosedCount: 1, // 1 }, @@ -227,6 +228,7 @@ func TestGetUserIssueStats(t *testing.T) { YourRepositoriesCount: 1, // 6 AssignCount: 0, CreateCount: 0, + MentionCount: 0, OpenCount: 1, // 6 ClosedCount: 1, // 1 }, @@ -240,6 +242,7 @@ func TestGetUserIssueStats(t *testing.T) { YourRepositoriesCount: 1, // 6 AssignCount: 1, // 6 CreateCount: 1, // 6 + MentionCount: 1, // 6 OpenCount: 1, // 6 ClosedCount: 0, }, @@ -253,6 +256,7 @@ func TestGetUserIssueStats(t *testing.T) { YourRepositoriesCount: 1, // 6 AssignCount: 1, // 6 CreateCount: 1, // 6 + MentionCount: 1, // 6 OpenCount: 1, // 6 ClosedCount: 0, }, @@ -266,8 +270,8 @@ func TestGetUserIssueStats(t *testing.T) { YourRepositoriesCount: 1, // 6 AssignCount: 1, // 6 CreateCount: 1, // 6 - MentionCount: 0, - OpenCount: 0, + MentionCount: 1, // 6 + OpenCount: 1, // 6 ClosedCount: 0, }, }, @@ -281,6 +285,7 @@ func TestGetUserIssueStats(t *testing.T) { YourRepositoriesCount: 1, // 1 AssignCount: 1, // 1 CreateCount: 1, // 1 + MentionCount: 1, // 1 OpenCount: 1, // 1 ClosedCount: 0, }, @@ -296,6 +301,7 @@ func TestGetUserIssueStats(t *testing.T) { YourRepositoriesCount: 2, AssignCount: 1, CreateCount: 1, + MentionCount: 2, OpenCount: 2, }, }, diff --git a/templates/repo/issue/list.tmpl b/templates/repo/issue/list.tmpl index 96d82d4aa6e2d..26d9b76bbe360 100644 --- a/templates/repo/issue/list.tmpl +++ b/templates/repo/issue/list.tmpl @@ -165,10 +165,10 @@ {{.locale.Tr "repo.issues.filter_type.all_issues"}} {{.locale.Tr "repo.issues.filter_type.assigned_to_you"}} {{.locale.Tr "repo.issues.filter_type.created_by_you"}} - {{.locale.Tr "repo.issues.filter_type.mentioning_you"}} {{if .PageIsPullList}} {{.locale.Tr "repo.issues.filter_type.review_requested"}} {{end}} + {{.locale.Tr "repo.issues.filter_type.mentioning_you"}} {{end}} diff --git a/templates/repo/issue/milestone_issues.tmpl b/templates/repo/issue/milestone_issues.tmpl index 45b5b490a9e17..4907512b79bea 100644 --- a/templates/repo/issue/milestone_issues.tmpl +++ b/templates/repo/issue/milestone_issues.tmpl @@ -111,8 +111,8 @@ {{.locale.Tr "repo.issues.filter_type.all_issues"}} {{.locale.Tr "repo.issues.filter_type.assigned_to_you"}} {{.locale.Tr "repo.issues.filter_type.created_by_you"}} - {{.locale.Tr "repo.issues.filter_type.mentioning_you"}} {{.locale.Tr "repo.issues.filter_type.review_requested"}} + {{.locale.Tr "repo.issues.filter_type.mentioning_you"}} {{end}} diff --git a/templates/user/dashboard/issues.tmpl b/templates/user/dashboard/issues.tmpl index 5ecae3a7b9f3f..dfba22f27e5ee 100644 --- a/templates/user/dashboard/issues.tmpl +++ b/templates/user/dashboard/issues.tmpl @@ -17,16 +17,16 @@ {{.locale.Tr "repo.issues.filter_type.created_by_you"}} {{CountFmt .IssueStats.CreateCount}} - - {{.locale.Tr "repo.issues.filter_type.mentioning_you"}} - {{CountFmt .IssueStats.MentionCount}} - {{if .PageIsPulls}} {{.locale.Tr "repo.issues.filter_type.review_requested"}} {{CountFmt .IssueStats.ReviewRequestedCount}} {{end}} + + {{.locale.Tr "repo.issues.filter_type.mentioning_you"}} + {{CountFmt .IssueStats.MentionCount}} +
All