aboutsummaryrefslogtreecommitdiffstats
path: root/services/issue/issue.go
diff options
context:
space:
mode:
Diffstat (limited to 'services/issue/issue.go')
-rw-r--r--services/issue/issue.go51
1 files changed, 51 insertions, 0 deletions
diff --git a/services/issue/issue.go b/services/issue/issue.go
index 5afdfc9901..a28916a7f9 100644
--- a/services/issue/issue.go
+++ b/services/issue/issue.go
@@ -45,3 +45,54 @@ func NewIssue(repo *models.Repository, issue *models.Issue, labelIDs []int64, as
return nil
}
+
+// ChangeTitle changes the title of this issue, as the given user.
+func ChangeTitle(issue *models.Issue, doer *models.User, title string) (err error) {
+ oldTitle := issue.Title
+ issue.Title = title
+
+ if err = issue.ChangeTitle(doer, oldTitle); err != nil {
+ return
+ }
+
+ mode, _ := models.AccessLevel(issue.Poster, issue.Repo)
+ if issue.IsPull {
+ if err = issue.LoadPullRequest(); err != nil {
+ return fmt.Errorf("loadPullRequest: %v", err)
+ }
+ issue.PullRequest.Issue = issue
+ err = models.PrepareWebhooks(issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{
+ Action: api.HookIssueEdited,
+ Index: issue.Index,
+ Changes: &api.ChangesPayload{
+ Title: &api.ChangesFromPayload{
+ From: oldTitle,
+ },
+ },
+ PullRequest: issue.PullRequest.APIFormat(),
+ Repository: issue.Repo.APIFormat(mode),
+ Sender: doer.APIFormat(),
+ })
+ } else {
+ err = models.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{
+ Action: api.HookIssueEdited,
+ Index: issue.Index,
+ Changes: &api.ChangesPayload{
+ Title: &api.ChangesFromPayload{
+ From: oldTitle,
+ },
+ },
+ Issue: issue.APIFormat(),
+ Repository: issue.Repo.APIFormat(mode),
+ Sender: issue.Poster.APIFormat(),
+ })
+ }
+
+ if err != nil {
+ log.Error("PrepareWebhooks [is_pull: %v]: %v", issue.IsPull, err)
+ } else {
+ go models.HookQueue.Add(issue.RepoID)
+ }
+
+ return nil
+}