From 45e1941fb3acf8fdc0544842ce503de007e3c706 Mon Sep 17 00:00:00 2001
From: Jeroen van Baarsen <jeroenvanbaarsen@gmail.com>
Date: Fri, 23 May 2014 15:16:03 +0200
Subject: [PATCH] Return a little more information in Issue webhook

When a webhook for issues is triggered, it should also return the
resource URL, and the action that was performed (ie: Was it reopened,
updated, opened or closed)
---
 app/services/issues/base_service.rb   | 10 ++++++++--
 app/services/issues/close_service.rb  |  2 +-
 app/services/issues/create_service.rb |  2 +-
 app/services/issues/reopen_service.rb |  2 +-
 app/services/issues/update_service.rb |  2 +-
 5 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/app/services/issues/base_service.rb b/app/services/issues/base_service.rb
index eac774210ae..41fbe1ae08f 100644
--- a/app/services/issues/base_service.rb
+++ b/app/services/issues/base_service.rb
@@ -1,5 +1,6 @@
 module Issues
   class BaseService < ::BaseService
+    include Rails.application.routes.url_helpers
 
     private
 
@@ -7,8 +8,13 @@ module Issues
       Note.create_assignee_change_note(issue, issue.project, current_user, issue.assignee)
     end
 
-    def execute_hooks(issue)
-      issue.project.execute_hooks(issue.to_hook_data, :issue_hooks)
+    def execute_hooks(issue, action = 'open')
+      issue_data = issue.to_hook_data
+      issue_url = project_issue_url(id: issue.iid,
+                                    project_id: issue.project,
+                                    host: Settings.gitlab['url'])
+      issue_data[:object_attributes].merge!(url: issue_url, action: action)
+      issue.project.execute_hooks(issue_data, :issue_hooks)
     end
 
     def create_milestone_note(issue)
diff --git a/app/services/issues/close_service.rb b/app/services/issues/close_service.rb
index 85c0226ccab..ffed13a12e1 100644
--- a/app/services/issues/close_service.rb
+++ b/app/services/issues/close_service.rb
@@ -5,7 +5,7 @@ module Issues
         notification_service.close_issue(issue, current_user)
         event_service.close_issue(issue, current_user)
         create_note(issue, commit)
-        execute_hooks(issue)
+        execute_hooks(issue, 'close')
       end
 
       issue
diff --git a/app/services/issues/create_service.rb b/app/services/issues/create_service.rb
index d6137833bb9..6d05d417f1b 100644
--- a/app/services/issues/create_service.rb
+++ b/app/services/issues/create_service.rb
@@ -8,7 +8,7 @@ module Issues
         notification_service.new_issue(issue, current_user)
         event_service.open_issue(issue, current_user)
         issue.create_cross_references!(issue.project, current_user)
-        execute_hooks(issue)
+        execute_hooks(issue, 'open')
       end
 
       issue
diff --git a/app/services/issues/reopen_service.rb b/app/services/issues/reopen_service.rb
index a931398aff6..b23d56258a8 100644
--- a/app/services/issues/reopen_service.rb
+++ b/app/services/issues/reopen_service.rb
@@ -4,7 +4,7 @@ module Issues
       if issue.reopen
         event_service.reopen_issue(issue, current_user)
         create_note(issue)
-        execute_hooks(issue)
+        execute_hooks(issue, 'reopen')
       end
 
       issue
diff --git a/app/services/issues/update_service.rb b/app/services/issues/update_service.rb
index b4a742b0037..169e1e95b4b 100644
--- a/app/services/issues/update_service.rb
+++ b/app/services/issues/update_service.rb
@@ -23,7 +23,7 @@ module Issues
         end
 
         issue.notice_added_references(issue.project, current_user)
-        execute_hooks(issue)
+        execute_hooks(issue, 'update')
       end
 
       issue
-- 
GitLab