diff options
author | Unknwon <u@gogs.io> | 2015-07-25 02:52:25 +0800 |
---|---|---|
committer | Unknwon <u@gogs.io> | 2015-07-25 02:52:25 +0800 |
commit | 1ba837a0556b2fb77f68248bf36ffe19603f0add (patch) | |
tree | 18a8667321bc4ba40cb532f44cc7aa20d33855b9 /models | |
parent | 54b58e988d4fac4a3f67feef39d62134352fb07c (diff) | |
download | gitea-1ba837a0556b2fb77f68248bf36ffe19603f0add.tar.gz gitea-1ba837a0556b2fb77f68248bf36ffe19603f0add.zip |
new issue and label page
Diffstat (limited to 'models')
-rw-r--r-- | models/issue.go | 109 |
1 files changed, 50 insertions, 59 deletions
diff --git a/models/issue.go b/models/issue.go index f62bc1e096..03a8a52ef9 100644 --- a/models/issue.go +++ b/models/issue.go @@ -14,7 +14,6 @@ import ( "time" "github.com/Unknwon/com" - "github.com/go-xorm/xorm" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/setting" @@ -73,7 +72,7 @@ func (i *Issue) GetLabels() error { strIds := strings.Split(strings.TrimSuffix(i.LabelIds[1:], "|"), "|$") i.Labels = make([]*Label, 0, len(strIds)) for _, strId := range strIds { - id, _ := com.StrTo(strId).Int64() + id := com.StrTo(strId).MustInt64() if id > 0 { l, err := GetLabelById(id) if err != nil { @@ -186,29 +185,29 @@ func GetIssueById(id int64) (*Issue, error) { } // GetIssues returns a list of issues by given conditions. -func GetIssues(uid, rid, pid, mid int64, page int, isClosed bool, labelIds, sortType string) ([]Issue, error) { +func GetIssues(uid, assigneeID, repoID, posterID, milestoneID int64, page int, isClosed, isMention bool, labelIds, sortType string) ([]Issue, error) { sess := x.Limit(setting.IssuePagingNum, (page-1)*setting.IssuePagingNum) - if rid > 0 { - sess.Where("repo_id=?", rid).And("is_closed=?", isClosed) + if repoID > 0 { + sess.Where("issue.repo_id=?", repoID).And("issue.is_closed=?", isClosed) } else { - sess.Where("is_closed=?", isClosed) + sess.Where("issue.is_closed=?", isClosed) } - if uid > 0 { - sess.And("assignee_id=?", uid) - } else if pid > 0 { - sess.And("poster_id=?", pid) + if assigneeID > 0 { + sess.And("issue.assignee_id=?", assigneeID) + } else if posterID > 0 { + sess.And("issue.poster_id=?", posterID) } - if mid > 0 { - sess.And("milestone_id=?", mid) + if milestoneID > 0 { + sess.And("issue.milestone_id=?", milestoneID) } if len(labelIds) > 0 { for _, label := range strings.Split(labelIds, ",") { if com.StrTo(label).MustInt() > 0 { - sess.And("label_ids like ?", "'%$"+label+"|%'") + sess.And("label_ids like ?", "%$"+label+"|%") } } } @@ -230,6 +229,14 @@ func GetIssues(uid, rid, pid, mid int64, page int, isClosed bool, labelIds, sort sess.Desc("created") } + if isMention { + queryStr := "issue.id == issue_user.issue_id AND issue_user.is_mentioned=1" + if uid > 0 { + queryStr += " AND issue_user.uid = " + com.ToStr(uid) + } + sess.Join("INNER", "issue_user", queryStr) + } + var issues []Issue return issues, sess.Find(&issues) } @@ -394,53 +401,42 @@ type IssueStats struct { // Filter modes. const ( - FM_ASSIGN = iota + 1 + FM_ALL = iota + FM_ASSIGN FM_CREATE FM_MENTION ) // GetIssueStats returns issue statistic information by given conditions. -func GetIssueStats(rid, uid int64, isShowClosed bool, filterMode int) *IssueStats { +func GetIssueStats(repoID, uid, labelID int64, isShowClosed bool, filterMode int) *IssueStats { stats := &IssueStats{} issue := new(Issue) - tmpSess := &xorm.Session{} - - sess := x.Where("repo_id=?", rid) - *tmpSess = *sess - stats.OpenCount, _ = tmpSess.And("is_closed=?", false).Count(issue) - *tmpSess = *sess - stats.ClosedCount, _ = tmpSess.And("is_closed=?", true).Count(issue) - if isShowClosed { - stats.AllCount = stats.ClosedCount - } else { - stats.AllCount = stats.OpenCount - } - - if filterMode != FM_MENTION { - sess = x.Where("repo_id=?", rid) - switch filterMode { - case FM_ASSIGN: - sess.And("assignee_id=?", uid) - case FM_CREATE: - sess.And("poster_id=?", uid) - default: - goto nofilter - } - *tmpSess = *sess - stats.OpenCount, _ = tmpSess.And("is_closed=?", false).Count(issue) - *tmpSess = *sess - stats.ClosedCount, _ = tmpSess.And("is_closed=?", true).Count(issue) - } else { - sess := x.Where("repo_id=?", rid).And("uid=?", uid).And("is_mentioned=?", true) - *tmpSess = *sess - stats.OpenCount, _ = tmpSess.And("is_closed=?", false).Count(new(IssueUser)) - *tmpSess = *sess - stats.ClosedCount, _ = tmpSess.And("is_closed=?", true).Count(new(IssueUser)) - } -nofilter: - stats.AssignCount, _ = x.Where("repo_id=?", rid).And("is_closed=?", isShowClosed).And("assignee_id=?", uid).Count(issue) - stats.CreateCount, _ = x.Where("repo_id=?", rid).And("is_closed=?", isShowClosed).And("poster_id=?", uid).Count(issue) - stats.MentionCount, _ = x.Where("repo_id=?", rid).And("uid=?", uid).And("is_closed=?", isShowClosed).And("is_mentioned=?", true).Count(new(IssueUser)) + + queryStr := "repo_id=? AND is_closed=?" + switch filterMode { + case FM_ALL: + stats.OpenCount, _ = x.Where(queryStr, repoID, false).Count(issue) + stats.ClosedCount, _ = x.Where(queryStr, repoID, true).Count(issue) + return stats + + case FM_ASSIGN: + queryStr += " AND assignee_id=?" + stats.OpenCount, _ = x.Where(queryStr, repoID, false, uid).Count(issue) + stats.ClosedCount, _ = x.Where(queryStr, repoID, true, uid).Count(issue) + return stats + + case FM_CREATE: + queryStr += " AND poster_id=?" + stats.OpenCount, _ = x.Where(queryStr, repoID, false, uid).Count(issue) + stats.ClosedCount, _ = x.Where(queryStr, repoID, true, uid).Count(issue) + return stats + + case FM_MENTION: + queryStr += " AND uid=? AND is_mentioned=?" + stats.OpenCount, _ = x.Where(queryStr, repoID, false, uid, true).Count(new(IssueUser)) + stats.ClosedCount, _ = x.Where(queryStr, repoID, true, uid, true).Count(new(IssueUser)) + return stats + } return stats } @@ -894,7 +890,7 @@ type Comment struct { // CreateComment creates comment of issue or commit. func CreateComment(userId, repoId, issueId, commitId, line int64, cmtType CommentType, content string, attachments []int64) (*Comment, error) { sess := x.NewSession() - defer sess.Close() + defer sessionRelease(sess) if err := sess.Begin(); err != nil { return nil, err } @@ -903,7 +899,6 @@ func CreateComment(userId, repoId, issueId, commitId, line int64, cmtType Commen CommitId: commitId, Line: line, Content: content} if _, err := sess.Insert(comment); err != nil { - sess.Rollback() return nil, err } @@ -912,7 +907,6 @@ func CreateComment(userId, repoId, issueId, commitId, line int64, cmtType Commen case COMMENT_TYPE_COMMENT: rawSql := "UPDATE `issue` SET num_comments = num_comments + 1 WHERE id = ?" if _, err := sess.Exec(rawSql, issueId); err != nil { - sess.Rollback() return nil, err } @@ -926,20 +920,17 @@ func CreateComment(userId, repoId, issueId, commitId, line int64, cmtType Commen } if _, err := sess.Exec(rawSql, comment.Id, strings.Join(astrs, ",")); err != nil { - sess.Rollback() return nil, err } } case COMMENT_TYPE_REOPEN: rawSql := "UPDATE `repository` SET num_closed_issues = num_closed_issues - 1 WHERE id = ?" if _, err := sess.Exec(rawSql, repoId); err != nil { - sess.Rollback() return nil, err } case COMMENT_TYPE_CLOSE: rawSql := "UPDATE `repository` SET num_closed_issues = num_closed_issues + 1 WHERE id = ?" if _, err := sess.Exec(rawSql, repoId); err != nil { - sess.Rollback() return nil, err } } |