summaryrefslogtreecommitdiffstats
path: root/routers/repo/issue.go
diff options
context:
space:
mode:
Diffstat (limited to 'routers/repo/issue.go')
-rw-r--r--routers/repo/issue.go157
1 files changed, 68 insertions, 89 deletions
diff --git a/routers/repo/issue.go b/routers/repo/issue.go
index 9181d5bd4e..b15bd767b5 100644
--- a/routers/repo/issue.go
+++ b/routers/repo/issue.go
@@ -246,36 +246,40 @@ func NewIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) {
// Check milestone.
milestoneID = form.MilestoneID
- ctx.Data["OpenMilestones"], err = models.GetMilestones(repo.ID, -1, false)
- if err != nil {
- ctx.Handle(500, "GetMilestones: %v", err)
- return
- }
- ctx.Data["ClosedMilestones"], err = models.GetMilestones(repo.ID, -1, true)
- if err != nil {
- ctx.Handle(500, "GetMilestones: %v", err)
- return
- }
- ctx.Data["Milestone"], err = repo.GetMilestoneByID(milestoneID)
- if err != nil {
- ctx.Handle(500, "GetMilestoneByID: %v", err)
- return
+ if milestoneID > 0 {
+ ctx.Data["OpenMilestones"], err = models.GetMilestones(repo.ID, -1, false)
+ if err != nil {
+ ctx.Handle(500, "GetMilestones: %v", err)
+ return
+ }
+ ctx.Data["ClosedMilestones"], err = models.GetMilestones(repo.ID, -1, true)
+ if err != nil {
+ ctx.Handle(500, "GetMilestones: %v", err)
+ return
+ }
+ ctx.Data["Milestone"], err = repo.GetMilestoneByID(milestoneID)
+ if err != nil {
+ ctx.Handle(500, "GetMilestoneByID: %v", err)
+ return
+ }
+ ctx.Data["milestone_id"] = milestoneID
}
- ctx.Data["milestone_id"] = milestoneID
// Check assignee.
assigneeID = form.AssigneeID
- ctx.Data["Assignees"], err = repo.GetAssignees()
- if err != nil {
- ctx.Handle(500, "GetAssignees: %v", err)
- return
- }
- ctx.Data["Assignee"], err = repo.GetAssigneeByID(assigneeID)
- if err != nil {
- ctx.Handle(500, "GetAssigneeByID: %v", err)
- return
+ if assigneeID > 0 {
+ ctx.Data["Assignees"], err = repo.GetAssignees()
+ if err != nil {
+ ctx.Handle(500, "GetAssignees: %v", err)
+ return
+ }
+ ctx.Data["Assignee"], err = repo.GetAssigneeByID(assigneeID)
+ if err != nil {
+ ctx.Handle(500, "GetAssigneeByID: %v", err)
+ return
+ }
+ ctx.Data["assignee_id"] = assigneeID
}
- ctx.Data["assignee_id"] = assigneeID
}
if ctx.HasError() {
@@ -288,6 +292,7 @@ func NewIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) {
Index: int64(repo.NumIssues) + 1,
Name: form.Title,
PosterID: ctx.User.Id,
+ Poster: ctx.User,
MilestoneID: milestoneID,
AssigneeID: assigneeID,
Content: form.Content,
@@ -297,71 +302,45 @@ func NewIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) {
return
}
- ctx.Redirect(ctx.Repo.RepoLink + "/issues/" + com.ToStr(issue.Index))
-}
+ // Update mentions.
+ mentions := base.MentionPattern.FindAllString(issue.Content, -1)
+ if len(mentions) > 0 {
+ for i := range mentions {
+ mentions[i] = mentions[i][1:]
+ }
+
+ if err := models.UpdateMentions(mentions, issue.ID); err != nil {
+ ctx.Handle(500, "UpdateMentions", err)
+ return
+ }
+ }
+
+ // Mail watchers and mentions.
+ if setting.Service.EnableNotifyMail {
+ tos, err := mailer.SendIssueNotifyMail(ctx.User, ctx.Repo.Owner, ctx.Repo.Repository, issue)
+ if err != nil {
+ ctx.Handle(500, "SendIssueNotifyMail", err)
+ return
+ }
-func CreateIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) {
- // if setting.AttachmentEnabled {
- // uploadFiles(ctx, issue.ID, 0)
- // }
-
- // // Update mentions.
- // ms := base.MentionPattern.FindAllString(issue.Content, -1)
- // if len(ms) > 0 {
- // for i := range ms {
- // ms[i] = ms[i][1:]
- // }
-
- // if err := models.UpdateMentions(ms, issue.ID); err != nil {
- // send(500, nil, err)
- // return
- // }
- // }
-
- // act := &models.Action{
- // ActUserID: ctx.User.Id,
- // ActUserName: ctx.User.Name,
- // ActEmail: ctx.User.Email,
- // OpType: models.CREATE_ISSUE,
- // Content: fmt.Sprintf("%d|%s", issue.Index, issue.Name),
- // RepoID: ctx.Repo.Repository.ID,
- // RepoUserName: ctx.Repo.Owner.Name,
- // RepoName: ctx.Repo.Repository.Name,
- // RefName: ctx.Repo.BranchName,
- // IsPrivate: ctx.Repo.Repository.IsPrivate,
- // }
- // // Notify watchers.
- // if err := models.NotifyWatchers(act); err != nil {
- // send(500, nil, err)
- // return
- // }
-
- // // Mail watchers and mentions.
- // if setting.Service.EnableNotifyMail {
- // tos, err := mailer.SendIssueNotifyMail(ctx.User, ctx.Repo.Owner, ctx.Repo.Repository, issue)
- // if err != nil {
- // send(500, nil, err)
- // return
- // }
-
- // tos = append(tos, ctx.User.LowerName)
- // newTos := make([]string, 0, len(ms))
- // for _, m := range ms {
- // if com.IsSliceContainsStr(tos, m) {
- // continue
- // }
-
- // newTos = append(newTos, m)
- // }
- // if err = mailer.SendIssueMentionMail(ctx.Render, ctx.User, ctx.Repo.Owner,
- // ctx.Repo.Repository, issue, models.GetUserEmailsByNames(newTos)); err != nil {
- // send(500, nil, err)
- // return
- // }
- // }
- // log.Trace("%d Issue created: %d", ctx.Repo.Repository.ID, issue.ID)
-
- // send(200, fmt.Sprintf("%s/%s/%s/issues/%d", setting.AppSubUrl, ctx.Params(":username"), ctx.Params(":reponame"), issue.Index), nil)
+ tos = append(tos, ctx.User.LowerName)
+ newTos := make([]string, 0, len(mentions))
+ for _, m := range mentions {
+ if com.IsSliceContainsStr(tos, m) {
+ continue
+ }
+
+ newTos = append(newTos, m)
+ }
+ if err = mailer.SendIssueMentionMail(ctx.Render, ctx.User, ctx.Repo.Owner,
+ ctx.Repo.Repository, issue, models.GetUserEmailsByNames(newTos)); err != nil {
+ ctx.Handle(500, "SendIssueMentionMail", err)
+ return
+ }
+ }
+
+ log.Trace("Issue created: %d/%d", ctx.Repo.Repository.ID, issue.ID)
+ ctx.Redirect(ctx.Repo.RepoLink + "/issues/" + com.ToStr(issue.Index))
}
func checkLabels(labels, allLabels []*models.Label) {