func UpdateMilestone(ctx *middleware.Context) { ctx.Data["Title"] = "Update Milestone" ctx.Data["IsRepoToolbarIssues"] = true ctx.Data["IsRepoToolbarIssuesList"] = true idx := com.StrTo(ctx.Params(":index")).MustInt64() if idx == 0 { ctx.Handle(404, "issue.UpdateMilestone", nil) return } mile, err := models.GetMilestoneByIndex(ctx.Repo.Repository.Id, idx) if err != nil { if err == models.ErrMilestoneNotExist { ctx.Handle(404, "issue.UpdateMilestone(GetMilestoneByIndex)", err) } else { ctx.Handle(500, "issue.UpdateMilestone(GetMilestoneByIndex)", err) } return } action := ctx.Params(":action") if len(action) > 0 { switch action { case "open": if mile.IsClosed { if err = models.ChangeMilestoneStatus(mile, false); err != nil { ctx.Handle(500, "issue.UpdateMilestone(ChangeMilestoneStatus)", err) return } } case "close": if !mile.IsClosed { mile.ClosedDate = time.Now() if err = models.ChangeMilestoneStatus(mile, true); err != nil { ctx.Handle(500, "issue.UpdateMilestone(ChangeMilestoneStatus)", err) return } } case "delete": if err = models.DeleteMilestone(mile); err != nil { ctx.Handle(500, "issue.UpdateMilestone(DeleteMilestone)", err) return } } ctx.Redirect(ctx.Repo.RepoLink + "/issues/milestones") return } mile.DeadlineString = mile.Deadline.UTC().Format("01/02/2006") if mile.DeadlineString == "12/31/9999" { mile.DeadlineString = "" } ctx.Data["Milestone"] = mile ctx.HTML(200, MILESTONE_EDIT) }
func UpdateMilestonePost(ctx *middleware.Context, form auth.CreateMilestoneForm) { ctx.Data["Title"] = "Update Milestone" ctx.Data["IsRepoToolbarIssues"] = true ctx.Data["IsRepoToolbarIssuesList"] = true idx := com.StrTo(ctx.Params(":index")).MustInt64() if idx == 0 { ctx.Handle(404, "issue.UpdateMilestonePost", nil) return } mile, err := models.GetMilestoneByIndex(ctx.Repo.Repository.Id, idx) if err != nil { if err == models.ErrMilestoneNotExist { ctx.Handle(404, "issue.UpdateMilestonePost(GetMilestoneByIndex)", err) } else { ctx.Handle(500, "issue.UpdateMilestonePost(GetMilestoneByIndex)", err) } return } if ctx.HasError() { ctx.HTML(200, MILESTONE_EDIT) return } var deadline time.Time if len(form.Deadline) == 0 { form.Deadline = "12/31/9999" } deadline, err = time.Parse("01/02/2006", form.Deadline) if err != nil { ctx.Handle(500, "issue.UpdateMilestonePost(time.Parse)", err) return } mile.Name = form.Title mile.Content = form.Content mile.Deadline = deadline if err = models.UpdateMilestone(mile); err != nil { ctx.Handle(500, "issue.UpdateMilestonePost(UpdateMilestone)", err) return } ctx.Redirect(ctx.Repo.RepoLink + "/issues/milestones") }
func Issues(ctx *middleware.Context) { ctx.Data["Title"] = "Issues" ctx.Data["IsRepoToolbarIssues"] = true ctx.Data["IsRepoToolbarIssuesList"] = true viewType := ctx.Query("type") types := []string{"assigned", "created_by", "mentioned"} if !com.IsSliceContainsStr(types, viewType) { viewType = "all" } isShowClosed := ctx.Query("state") == "closed" if viewType != "all" && !ctx.IsSigned { ctx.SetCookie("redirect_to", "/"+url.QueryEscape(ctx.Req.RequestURI)) ctx.Redirect("/user/login") return } var assigneeId, posterId int64 var filterMode int switch viewType { case "assigned": assigneeId = ctx.User.Id filterMode = models.FM_ASSIGN case "created_by": posterId = ctx.User.Id filterMode = models.FM_CREATE case "mentioned": filterMode = models.FM_MENTION } var mid int64 midx, _ := base.StrTo(ctx.Query("milestone")).Int64() if midx > 0 { mile, err := models.GetMilestoneByIndex(ctx.Repo.Repository.Id, midx) if err != nil { ctx.Handle(500, "issue.Issues(GetMilestoneByIndex): %v", err) return } mid = mile.Id } selectLabels := ctx.Query("labels") labels, err := models.GetLabels(ctx.Repo.Repository.Id) if err != nil { ctx.Handle(500, "issue.Issues(GetLabels): %v", err) return } for _, l := range labels { l.CalOpenIssues() } ctx.Data["Labels"] = labels page, _ := base.StrTo(ctx.Query("page")).Int() // Get issues. issues, err := models.GetIssues(assigneeId, ctx.Repo.Repository.Id, posterId, mid, page, isShowClosed, selectLabels, ctx.Query("sortType")) if err != nil { ctx.Handle(500, "issue.Issues(GetIssues): %v", err) return } // Get issue-user pairs. pairs, err := models.GetIssueUserPairs(ctx.Repo.Repository.Id, posterId, isShowClosed) if err != nil { ctx.Handle(500, "issue.Issues(GetIssueUserPairs): %v", err) return } // Get posters. for i := range issues { if err = issues[i].GetLabels(); err != nil { ctx.Handle(500, "issue.Issues(GetLabels)", fmt.Errorf("[#%d]%v", issues[i].Id, err)) return } idx := models.PairsContains(pairs, issues[i].Id) if filterMode == models.FM_MENTION && (idx == -1 || !pairs[idx].IsMentioned) { continue } if idx > -1 { issues[i].IsRead = pairs[idx].IsRead } else { issues[i].IsRead = true } if err = issues[i].GetPoster(); err != nil { ctx.Handle(500, "issue.Issues(GetPoster)", fmt.Errorf("[#%d]%v", issues[i].Id, err)) return } } var uid int64 = -1 if ctx.User != nil { uid = ctx.User.Id } issueStats := models.GetIssueStats(ctx.Repo.Repository.Id, uid, isShowClosed, filterMode) ctx.Data["IssueStats"] = issueStats ctx.Data["SelectLabels"], _ = base.StrTo(selectLabels).Int64() ctx.Data["ViewType"] = viewType ctx.Data["Issues"] = issues ctx.Data["IsShowClosed"] = isShowClosed if isShowClosed { ctx.Data["State"] = "closed" ctx.Data["ShowCount"] = issueStats.ClosedCount } else { ctx.Data["ShowCount"] = issueStats.OpenCount } ctx.HTML(200, ISSUES) }