@@ -370,11 +370,19 @@ func (issue *Issue) HasLabel(labelID int64) bool {
370370
371371func (issue * Issue ) sendLabelUpdatedWebhook (doer * User ) {
372372 var err error
373+
374+ if err = issue .loadRepo (x ); err != nil {
375+ log .Error (4 , "loadRepo: %v" , err )
376+ return
377+ }
378+
379+ if err = issue .loadPoster (x ); err != nil {
380+ log .Error (4 , "loadPoster: %v" , err )
381+ return
382+ }
383+
384+ mode , _ := AccessLevel (issue .Poster .ID , issue .Repo )
373385 if issue .IsPull {
374- if err = issue .loadRepo (x ); err != nil {
375- log .Error (4 , "loadRepo: %v" , err )
376- return
377- }
378386 if err = issue .loadPullRequest (x ); err != nil {
379387 log .Error (4 , "loadPullRequest: %v" , err )
380388 return
@@ -390,6 +398,14 @@ func (issue *Issue) sendLabelUpdatedWebhook(doer *User) {
390398 Repository : issue .Repo .APIFormat (AccessModeNone ),
391399 Sender : doer .APIFormat (),
392400 })
401+ } else {
402+ err = PrepareWebhooks (issue .Repo , HookEventIssues , & api.IssuePayload {
403+ Action : api .HookIssueLabelUpdated ,
404+ Index : issue .Index ,
405+ Issue : issue .APIFormat (),
406+ Repository : issue .Repo .APIFormat (mode ),
407+ Sender : doer .APIFormat (),
408+ })
393409 }
394410 if err != nil {
395411 log .Error (4 , "PrepareWebhooks [is_pull: %v]: %v" , issue .IsPull , err )
@@ -505,6 +521,11 @@ func (issue *Issue) ClearLabels(doer *User) (err error) {
505521 return fmt .Errorf ("Commit: %v" , err )
506522 }
507523
524+ if err = issue .loadPoster (x ); err != nil {
525+ return fmt .Errorf ("loadPoster: %v" , err )
526+ }
527+
528+ mode , _ := AccessLevel (issue .Poster .ID , issue .Repo )
508529 if issue .IsPull {
509530 err = issue .PullRequest .LoadIssue ()
510531 if err != nil {
@@ -515,9 +536,17 @@ func (issue *Issue) ClearLabels(doer *User) (err error) {
515536 Action : api .HookIssueLabelCleared ,
516537 Index : issue .Index ,
517538 PullRequest : issue .PullRequest .APIFormat (),
518- Repository : issue .Repo .APIFormat (AccessModeNone ),
539+ Repository : issue .Repo .APIFormat (mode ),
519540 Sender : doer .APIFormat (),
520541 })
542+ } else {
543+ err = PrepareWebhooks (issue .Repo , HookEventIssues , & api.IssuePayload {
544+ Action : api .HookIssueLabelCleared ,
545+ Index : issue .Index ,
546+ Issue : issue .APIFormat (),
547+ Repository : issue .Repo .APIFormat (mode ),
548+ Sender : doer .APIFormat (),
549+ })
521550 }
522551 if err != nil {
523552 log .Error (4 , "PrepareWebhooks [is_pull: %v]: %v" , issue .IsPull , err )
@@ -675,13 +704,14 @@ func (issue *Issue) ChangeStatus(doer *User, repo *Repository, isClosed bool) (e
675704 return fmt .Errorf ("Commit: %v" , err )
676705 }
677706
707+ mode , _ := AccessLevel (issue .Poster .ID , issue .Repo )
678708 if issue .IsPull {
679709 // Merge pull request calls issue.changeStatus so we need to handle separately.
680710 issue .PullRequest .Issue = issue
681711 apiPullRequest := & api.PullRequestPayload {
682712 Index : issue .Index ,
683713 PullRequest : issue .PullRequest .APIFormat (),
684- Repository : repo .APIFormat (AccessModeNone ),
714+ Repository : repo .APIFormat (mode ),
685715 Sender : doer .APIFormat (),
686716 }
687717 if isClosed {
@@ -690,6 +720,19 @@ func (issue *Issue) ChangeStatus(doer *User, repo *Repository, isClosed bool) (e
690720 apiPullRequest .Action = api .HookIssueReOpened
691721 }
692722 err = PrepareWebhooks (repo , HookEventPullRequest , apiPullRequest )
723+ } else {
724+ apiIssue := & api.IssuePayload {
725+ Index : issue .Index ,
726+ Issue : issue .APIFormat (),
727+ Repository : repo .APIFormat (mode ),
728+ Sender : doer .APIFormat (),
729+ }
730+ if isClosed {
731+ apiIssue .Action = api .HookIssueClosed
732+ } else {
733+ apiIssue .Action = api .HookIssueReOpened
734+ }
735+ err = PrepareWebhooks (repo , HookEventIssues , apiIssue )
693736 }
694737 if err != nil {
695738 log .Error (4 , "PrepareWebhooks [is_pull: %v, is_closed: %v]: %v" , issue .IsPull , isClosed , err )
@@ -723,6 +766,7 @@ func (issue *Issue) ChangeTitle(doer *User, title string) (err error) {
723766 return err
724767 }
725768
769+ mode , _ := AccessLevel (issue .Poster .ID , issue .Repo )
726770 if issue .IsPull {
727771 issue .PullRequest .Issue = issue
728772 err = PrepareWebhooks (issue .Repo , HookEventPullRequest , & api.PullRequestPayload {
@@ -734,10 +778,24 @@ func (issue *Issue) ChangeTitle(doer *User, title string) (err error) {
734778 },
735779 },
736780 PullRequest : issue .PullRequest .APIFormat (),
737- Repository : issue .Repo .APIFormat (AccessModeNone ),
781+ Repository : issue .Repo .APIFormat (mode ),
738782 Sender : doer .APIFormat (),
739783 })
784+ } else {
785+ err = PrepareWebhooks (issue .Repo , HookEventIssues , & api.IssuePayload {
786+ Action : api .HookIssueEdited ,
787+ Index : issue .Index ,
788+ Changes : & api.ChangesPayload {
789+ Title : & api.ChangesFromPayload {
790+ From : oldTitle ,
791+ },
792+ },
793+ Issue : issue .APIFormat (),
794+ Repository : issue .Repo .APIFormat (mode ),
795+ Sender : issue .Poster .APIFormat (),
796+ })
740797 }
798+
741799 if err != nil {
742800 log .Error (4 , "PrepareWebhooks [is_pull: %v]: %v" , issue .IsPull , err )
743801 } else {
@@ -774,6 +832,7 @@ func (issue *Issue) ChangeContent(doer *User, content string) (err error) {
774832 return fmt .Errorf ("UpdateIssueCols: %v" , err )
775833 }
776834
835+ mode , _ := AccessLevel (issue .Poster .ID , issue .Repo )
777836 if issue .IsPull {
778837 issue .PullRequest .Issue = issue
779838 err = PrepareWebhooks (issue .Repo , HookEventPullRequest , & api.PullRequestPayload {
@@ -785,9 +844,22 @@ func (issue *Issue) ChangeContent(doer *User, content string) (err error) {
785844 },
786845 },
787846 PullRequest : issue .PullRequest .APIFormat (),
788- Repository : issue .Repo .APIFormat (AccessModeNone ),
847+ Repository : issue .Repo .APIFormat (mode ),
789848 Sender : doer .APIFormat (),
790849 })
850+ } else {
851+ err = PrepareWebhooks (issue .Repo , HookEventIssues , & api.IssuePayload {
852+ Action : api .HookIssueEdited ,
853+ Index : issue .Index ,
854+ Changes : & api.ChangesPayload {
855+ Body : & api.ChangesFromPayload {
856+ From : oldContent ,
857+ },
858+ },
859+ Issue : issue .APIFormat (),
860+ Repository : issue .Repo .APIFormat (mode ),
861+ Sender : doer .APIFormat (),
862+ })
791863 }
792864 if err != nil {
793865 log .Error (4 , "PrepareWebhooks [is_pull: %v]: %v" , issue .IsPull , err )
@@ -980,6 +1052,19 @@ func NewIssue(repo *Repository, issue *Issue, labelIDs []int64, assigneeIDs []in
9801052 log .Error (4 , "MailParticipants: %v" , err )
9811053 }
9821054
1055+ mode , _ := AccessLevel (issue .Poster .ID , issue .Repo )
1056+ if err = PrepareWebhooks (repo , HookEventIssues , & api.IssuePayload {
1057+ Action : api .HookIssueOpened ,
1058+ Index : issue .Index ,
1059+ Issue : issue .APIFormat (),
1060+ Repository : repo .APIFormat (mode ),
1061+ Sender : issue .Poster .APIFormat (),
1062+ }); err != nil {
1063+ log .Error (4 , "PrepareWebhooks: %v" , err )
1064+ } else {
1065+ go HookQueue .Add (issue .RepoID )
1066+ }
1067+
9831068 return nil
9841069}
9851070
0 commit comments