aboutsummaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2015-07-25 02:52:25 +0800
committerUnknwon <u@gogs.io>2015-07-25 02:52:25 +0800
commit1ba837a0556b2fb77f68248bf36ffe19603f0add (patch)
tree18a8667321bc4ba40cb532f44cc7aa20d33855b9 /models
parent54b58e988d4fac4a3f67feef39d62134352fb07c (diff)
downloadgitea-1ba837a0556b2fb77f68248bf36ffe19603f0add.tar.gz
gitea-1ba837a0556b2fb77f68248bf36ffe19603f0add.zip
new issue and label page
Diffstat (limited to 'models')
-rw-r--r--models/issue.go109
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
}
}