diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 629d84e05..6c6cde648 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -753,6 +753,7 @@ issues.tracker = Time Tracker issues.start_tracking_short = Start issues.start_tracking = Start Time Tracking issues.start_tracking_history = `started working %s` +issues.tracker_auto_close = Timer will be stopped automatically when this issue gets closed issues.tracking_already_started = `You have already started time tracking on this issue!` issues.stop_tracking = Stop issues.stop_tracking_history = `stopped working %s` diff --git a/routers/repo/issue.go b/routers/repo/issue.go index 27c95cd9d..82b2cf623 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -1068,6 +1068,12 @@ func NewComment(ctx *context.Context, form auth.CreateCommentForm) { return } } else { + + if err := stopTimerIfAvailable(ctx.User, issue); err != nil { + ctx.ServerError("CreateOrStopIssueStopwatch", err) + return + } + log.Trace("Issue [%d] status changed to closed: %v", issue.ID, issue.IsClosed) notification.Service.NotifyIssue(issue, ctx.User.ID) diff --git a/routers/repo/issue_stopwatch.go b/routers/repo/issue_stopwatch.go index a7d6ed39c..28105dfe0 100644 --- a/routers/repo/issue_stopwatch.go +++ b/routers/repo/issue_stopwatch.go @@ -17,6 +17,13 @@ func IssueStopwatch(c *context.Context) { if c.Written() { return } + + var showSuccessMessage bool + + if !models.StopwatchExists(c.User.ID, issue.ID) { + showSuccessMessage = true + } + if !c.Repo.CanUseTimetracker(issue, c.User) { c.NotFound("CanUseTimetracker", nil) return @@ -27,6 +34,10 @@ func IssueStopwatch(c *context.Context) { return } + if showSuccessMessage { + c.Flash.Success(c.Tr("repo.issues.tracker_auto_close")) + } + url := issue.HTMLURL() c.Redirect(url, http.StatusSeeOther) } diff --git a/routers/repo/pull.go b/routers/repo/pull.go index c8d65731e..cfaac89ef 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -546,12 +546,28 @@ func MergePullRequest(ctx *context.Context, form auth.MergePullRequestForm) { return } + if err := stopTimerIfAvailable(ctx.User, issue); err != nil { + ctx.ServerError("CreateOrStopIssueStopwatch", err) + return + } + notification.Service.NotifyIssue(pr.Issue, ctx.User.ID) log.Trace("Pull request merged: %d", pr.ID) ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index)) } +func stopTimerIfAvailable(user *models.User, issue *models.Issue) error { + + if models.StopwatchExists(user.ID, issue.ID) { + if err := models.CreateOrStopIssueStopwatch(user, issue); err != nil { + return err + } + } + + return nil +} + // ParseCompareInfo parse compare info between two commit for preparing pull request func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, *git.Repository, *git.PullRequestInfo, string, string) { baseRepo := ctx.Repo.Repository diff --git a/templates/repo/issue/view_content/comments.tmpl b/templates/repo/issue/view_content/comments.tmpl index 6a8cd1dac..5b94499ec 100644 --- a/templates/repo/issue/view_content/comments.tmpl +++ b/templates/repo/issue/view_content/comments.tmpl @@ -1,3 +1,4 @@ +{{ template "base/alert" }} {{range .Issue.Comments}} {{ $createdStr:= TimeSinceUnix .CreatedUnix $.Lang }}