diff --git a/models/issues/issue_search.go b/models/issues/issue_search.go index 9fd13f0995..f577db6948 100644 --- a/models/issues/issue_search.go +++ b/models/issues/issue_search.go @@ -155,6 +155,18 @@ func applyMilestoneCondition(sess *xorm.Session, opts *IssuesOptions) *xorm.Sess return sess } +func applyProjectCondition(sess *xorm.Session, opts *IssuesOptions) *xorm.Session { + if opts.ProjectID > 0 { // specific project + sess.Join("INNER", "project_issue", "issue.id = project_issue.issue_id"). + And("project_issue.project_id=?", opts.ProjectID) + } else if opts.ProjectID == db.NoConditionID { // show those that are in no project + sess.And(builder.NotIn("issue.id", builder.Select("issue_id").From("project_issue").And(builder.Neq{"project_id": 0}))) + } + // opts.ProjectID == 0 means all projects, + // do not need to apply any condition + return sess +} + func applyRepoConditions(sess *xorm.Session, opts *IssuesOptions) *xorm.Session { if len(opts.RepoIDs) == 1 { opts.RepoCond = builder.Eq{"issue.repo_id": opts.RepoIDs[0]} @@ -213,12 +225,7 @@ func applyConditions(sess *xorm.Session, opts *IssuesOptions) *xorm.Session { sess.And(builder.Lte{"issue.updated_unix": opts.UpdatedBeforeUnix}) } - if opts.ProjectID > 0 { - sess.Join("INNER", "project_issue", "issue.id = project_issue.issue_id"). - And("project_issue.project_id=?", opts.ProjectID) - } else if opts.ProjectID == db.NoConditionID { // show those that are in no project - sess.And(builder.NotIn("issue.id", builder.Select("issue_id").From("project_issue"))) - } + applyProjectCondition(sess, opts) if opts.ProjectBoardID != 0 { if opts.ProjectBoardID > 0 { diff --git a/models/issues/issue_stats.go b/models/issues/issue_stats.go index d86123a824..6c249c2244 100644 --- a/models/issues/issue_stats.go +++ b/models/issues/issue_stats.go @@ -133,10 +133,7 @@ func getIssueStatsChunk(opts *IssuesOptions, issueIDs []int64) (*IssueStats, err applyMilestoneCondition(sess, opts) - if opts.ProjectID > 0 { - sess.Join("INNER", "project_issue", "issue.id = project_issue.issue_id"). - And("project_issue.project_id=?", opts.ProjectID) - } + applyProjectCondition(sess, opts) if opts.AssigneeID > 0 { applyAssigneeCondition(sess, opts.AssigneeID)