Forráskód Böngészése

Add change assignee back end

Unknown 11 éve
szülő
commit
a742ee543e
2 módosított fájl, 34 hozzáadás és 3 törlés
  1. 12 0
      models/issue.go
  2. 22 3
      routers/repo/issue.go

+ 12 - 0
models/issue.go

@@ -338,6 +338,18 @@ func UpdateIssueUserPairsByStatus(iid int64, isClosed bool) error {
 	return err
 }
 
+// UpdateIssueUserPairByAssignee updates issue-user pair for assigning.
+func UpdateIssueUserPairByAssignee(aid, iid int64) error {
+	rawSql := "UPDATE `issue_user` SET is_assigned = ? WHERE issue_id = ?"
+	if _, err := orm.Exec(rawSql, false, iid); err != nil {
+		return err
+	}
+
+	rawSql = "UPDATE `issue_user` SET is_assigned = true WHERE uid = ? AND issue_id = ?"
+	_, err := orm.Exec(rawSql, true, aid, iid)
+	return err
+}
+
 // UpdateIssueUserPairByRead updates issue-user pair for reading.
 func UpdateIssueUserPairByRead(uid, iid int64) error {
 	rawSql := "UPDATE `issue_user` SET is_read = ? WHERE uid = ? AND issue_id = ?"

+ 22 - 3
routers/repo/issue.go

@@ -141,6 +141,10 @@ func CreateIssuePost(ctx *middleware.Context, params martini.Params, form auth.C
 		return
 	}
 
+	// Only collaborators can assign.
+	if !ctx.Repo.IsOwner {
+		form.AssigneeId = 0
+	}
 	issue := &models.Issue{
 		Index:       int64(ctx.Repo.Repository.NumIssues) + 1,
 		Name:        form.IssueName,
@@ -220,13 +224,28 @@ func ViewIssue(ctx *middleware.Context, params martini.Params) {
 	issue, err := models.GetIssueByIndex(ctx.Repo.Repository.Id, idx)
 	if err != nil {
 		if err == models.ErrIssueNotExist {
-			ctx.Handle(404, "issue.ViewIssue", err)
+			ctx.Handle(404, "issue.ViewIssue(GetIssueByIndex)", err)
 		} else {
-			ctx.Handle(200, "issue.ViewIssue", err)
+			ctx.Handle(500, "issue.ViewIssue(GetIssueByIndex)", err)
 		}
 		return
 	}
 
+	// Update assignee.
+	if ctx.Repo.IsOwner {
+		aid, _ := base.StrTo(ctx.Query("assignneid")).Int64()
+		if aid > 0 {
+			// Not check for invalid assignne id and give responsibility to owners.
+			issue.AssigneeId = aid
+			if err = models.UpdateIssueUserPairByAssignee(aid, issue.Id); err != nil {
+				ctx.Handle(500, "issue.ViewIssue(UpdateIssueUserPairByAssignee): %v", err)
+				return
+			}
+			ctx.Redirect(fmt.Sprintf("%s/issues/%d", ctx.Repo.RepoLink, issue.Index))
+			return
+		}
+	}
+
 	// Update issue-user.
 	if err = models.UpdateIssueUserPairByRead(ctx.User.Id, issue.Id); err != nil {
 		ctx.Handle(500, "issue.ViewIssue(UpdateIssueUserPairByRead): %v", err)
@@ -254,7 +273,7 @@ func ViewIssue(ctx *middleware.Context, params martini.Params) {
 	for i := range comments {
 		u, err := models.GetUserById(comments[i].PosterId)
 		if err != nil {
-			ctx.Handle(500, "issue.ViewIssue(get poster of comment): %v", err)
+			ctx.Handle(500, "issue.ViewIssue(GetUserById.2): %v", err)
 			return
 		}
 		comments[i].Poster = u