|
|
|
@ -198,46 +198,43 @@ func issues(ctx *context.Context, milestoneID, projectID int64, isPullOption uti |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var issueStats *issues_model.IssueStats |
|
|
|
|
{ |
|
|
|
|
statsOpts := &issues_model.IssuesOptions{ |
|
|
|
|
RepoIDs: []int64{repo.ID}, |
|
|
|
|
LabelIDs: labelIDs, |
|
|
|
|
MilestoneIDs: mileIDs, |
|
|
|
|
ProjectID: projectID, |
|
|
|
|
AssigneeID: assigneeID, |
|
|
|
|
MentionedID: mentionedID, |
|
|
|
|
PosterID: posterID, |
|
|
|
|
ReviewRequestedID: reviewRequestedID, |
|
|
|
|
ReviewedID: reviewedID, |
|
|
|
|
IsPull: isPullOption, |
|
|
|
|
IssueIDs: nil, |
|
|
|
|
} |
|
|
|
|
if keyword != "" { |
|
|
|
|
allIssueIDs, err := issueIDsFromSearch(ctx, keyword, statsOpts) |
|
|
|
|
if err != nil { |
|
|
|
|
if issue_indexer.IsAvailable(ctx) { |
|
|
|
|
ctx.ServerError("issueIDsFromSearch", err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
ctx.Data["IssueIndexerUnavailable"] = true |
|
|
|
|
statsOpts := &issues_model.IssuesOptions{ |
|
|
|
|
RepoIDs: []int64{repo.ID}, |
|
|
|
|
LabelIDs: labelIDs, |
|
|
|
|
MilestoneIDs: mileIDs, |
|
|
|
|
ProjectID: projectID, |
|
|
|
|
AssigneeID: assigneeID, |
|
|
|
|
MentionedID: mentionedID, |
|
|
|
|
PosterID: posterID, |
|
|
|
|
ReviewRequestedID: reviewRequestedID, |
|
|
|
|
ReviewedID: reviewedID, |
|
|
|
|
IsPull: isPullOption, |
|
|
|
|
IssueIDs: nil, |
|
|
|
|
} |
|
|
|
|
if keyword != "" { |
|
|
|
|
allIssueIDs, err := issueIDsFromSearch(ctx, keyword, statsOpts) |
|
|
|
|
if err != nil { |
|
|
|
|
if issue_indexer.IsAvailable(ctx) { |
|
|
|
|
ctx.ServerError("issueIDsFromSearch", err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
statsOpts.IssueIDs = allIssueIDs |
|
|
|
|
ctx.Data["IssueIndexerUnavailable"] = true |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
if keyword != "" && len(statsOpts.IssueIDs) == 0 { |
|
|
|
|
// So it did search with the keyword, but no issue found.
|
|
|
|
|
// Just set issueStats to empty.
|
|
|
|
|
issueStats = &issues_model.IssueStats{} |
|
|
|
|
} else { |
|
|
|
|
// So it did search with the keyword, and found some issues. It needs to get issueStats of these issues.
|
|
|
|
|
// Or the keyword is empty, so it doesn't need issueIDs as filter, just get issueStats with statsOpts.
|
|
|
|
|
issueStats, err = issues_model.GetIssueStats(ctx, statsOpts) |
|
|
|
|
if err != nil { |
|
|
|
|
ctx.ServerError("GetIssueStats", err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
statsOpts.IssueIDs = allIssueIDs |
|
|
|
|
} |
|
|
|
|
if keyword != "" && len(statsOpts.IssueIDs) == 0 { |
|
|
|
|
// So it did search with the keyword, but no issue found.
|
|
|
|
|
// Just set issueStats to empty.
|
|
|
|
|
issueStats = &issues_model.IssueStats{} |
|
|
|
|
} else { |
|
|
|
|
// So it did search with the keyword, and found some issues. It needs to get issueStats of these issues.
|
|
|
|
|
// Or the keyword is empty, so it doesn't need issueIDs as filter, just get issueStats with statsOpts.
|
|
|
|
|
issueStats, err = issues_model.GetIssueStats(ctx, statsOpts) |
|
|
|
|
if err != nil { |
|
|
|
|
ctx.ServerError("GetIssueStats", err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
isShowClosed := ctx.FormString("state") == "closed" |
|
|
|
@ -246,6 +243,15 @@ func issues(ctx *context.Context, milestoneID, projectID int64, isPullOption uti |
|
|
|
|
isShowClosed = true |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if repo.IsTimetrackerEnabled(ctx) { |
|
|
|
|
totalTrackedTime, err := issues_model.GetIssueTotalTrackedTime(ctx, statsOpts, isShowClosed) |
|
|
|
|
if err != nil { |
|
|
|
|
ctx.ServerError("GetIssueTotalTrackedTime", err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
ctx.Data["TotalTrackedTime"] = totalTrackedTime |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
archived := ctx.FormBool("archived") |
|
|
|
|
|
|
|
|
|
page := ctx.FormInt("page") |
|
|
|
|