GetIssueStats returns issue statistic information by given conditions.
(opts *IssueStatsOptions)
| 1236 | |
| 1237 | // GetIssueStats returns issue statistic information by given conditions. |
| 1238 | func GetIssueStats(opts *IssueStatsOptions) *IssueStats { |
| 1239 | stats := &IssueStats{} |
| 1240 | |
| 1241 | countSession := func(opts *IssueStatsOptions) *xorm.Session { |
| 1242 | sess := x.Where("issue.repo_id = ?", opts.RepoID).And("is_pull = ?", opts.IsPull) |
| 1243 | |
| 1244 | if len(opts.Labels) > 0 && opts.Labels != "0" { |
| 1245 | labelIDs := tool.StringsToInt64s(strings.Split(opts.Labels, ",")) |
| 1246 | if len(labelIDs) > 0 { |
| 1247 | sess.Join("INNER", "issue_label", "issue.id = issue_id").In("label_id", labelIDs) |
| 1248 | } |
| 1249 | } |
| 1250 | |
| 1251 | if opts.MilestoneID > 0 { |
| 1252 | sess.And("issue.milestone_id = ?", opts.MilestoneID) |
| 1253 | } |
| 1254 | |
| 1255 | if opts.AssigneeID > 0 { |
| 1256 | sess.And("assignee_id = ?", opts.AssigneeID) |
| 1257 | } |
| 1258 | |
| 1259 | return sess |
| 1260 | } |
| 1261 | |
| 1262 | switch opts.FilterMode { |
| 1263 | case FilterModeYourRepos, FilterModeAssign: |
| 1264 | stats.OpenCount, _ = countSession(opts). |
| 1265 | And("is_closed = ?", false). |
| 1266 | Count(new(Issue)) |
| 1267 | |
| 1268 | stats.ClosedCount, _ = countSession(opts). |
| 1269 | And("is_closed = ?", true). |
| 1270 | Count(new(Issue)) |
| 1271 | case FilterModeCreate: |
| 1272 | stats.OpenCount, _ = countSession(opts). |
| 1273 | And("poster_id = ?", opts.UserID). |
| 1274 | And("is_closed = ?", false). |
| 1275 | Count(new(Issue)) |
| 1276 | |
| 1277 | stats.ClosedCount, _ = countSession(opts). |
| 1278 | And("poster_id = ?", opts.UserID). |
| 1279 | And("is_closed = ?", true). |
| 1280 | Count(new(Issue)) |
| 1281 | case FilterModeMention: |
| 1282 | stats.OpenCount, _ = countSession(opts). |
| 1283 | Join("INNER", "issue_user", "issue.id = issue_user.issue_id"). |
| 1284 | And("issue_user.uid = ?", opts.UserID). |
| 1285 | And("issue_user.is_mentioned = ?", true). |
| 1286 | And("issue.is_closed = ?", false). |
| 1287 | Count(new(Issue)) |
| 1288 | |
| 1289 | stats.ClosedCount, _ = countSession(opts). |
| 1290 | Join("INNER", "issue_user", "issue.id = issue_user.issue_id"). |
| 1291 | And("issue_user.uid = ?", opts.UserID). |
| 1292 | And("issue_user.is_mentioned = ?", true). |
| 1293 | And("issue.is_closed = ?", true). |
| 1294 | Count(new(Issue)) |
| 1295 | } |