mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
Merge pull request #5705 from discourse/new_webhooks
FEATURE: Webhook for group and category events
This commit is contained in:
@@ -55,7 +55,10 @@ class Admin::GroupsController < Admin::AdminController
|
||||
|
||||
# group rename is ignored for automatic groups
|
||||
group.name = group_params[:name] if group_params[:name] && !group.automatic
|
||||
save_group(group) { |g| GroupActionLogger.new(current_user, g).log_change_group_settings }
|
||||
save_group(group) do |group|
|
||||
GroupActionLogger.new(current_user, group).log_change_group_settings
|
||||
DiscourseEvent.trigger(:group_updated, group)
|
||||
end
|
||||
end
|
||||
|
||||
def save_group(group)
|
||||
|
||||
@@ -149,6 +149,7 @@ class CategoriesController < ApplicationController
|
||||
old_permissions = cat.permissions_params
|
||||
|
||||
if result = cat.update(category_params)
|
||||
DiscourseEvent.trigger(:category_updated, cat)
|
||||
Scheduler::Defer.later "Log staff action change category settings" do
|
||||
@staff_action_logger.log_category_settings_change(@category, category_params, old_permissions)
|
||||
end
|
||||
@@ -165,6 +166,7 @@ class CategoriesController < ApplicationController
|
||||
custom_slug = params[:slug].to_s
|
||||
|
||||
if custom_slug.present? && @category.update_attributes(slug: custom_slug)
|
||||
DiscourseEvent.trigger(:category_updated, @category)
|
||||
render json: success_json
|
||||
else
|
||||
render_json_error(@category)
|
||||
|
||||
@@ -137,6 +137,7 @@ class GroupsController < ApplicationController
|
||||
|
||||
if group.update_attributes(group_params)
|
||||
GroupActionLogger.new(current_user, group).log_change_group_settings
|
||||
DiscourseEvent.trigger(:group_updated, group)
|
||||
|
||||
render json: success_json
|
||||
else
|
||||
|
||||
@@ -50,6 +50,18 @@ module Jobs
|
||||
args[:payload] = WebHookUserSerializer.new(user, scope: guardian, root: false).as_json
|
||||
end
|
||||
|
||||
def setup_group(args)
|
||||
group = Group.find(args[:group_id])
|
||||
return if group.blank?
|
||||
args[:payload] = WebHookGroupSerializer.new(group, scope: guardian, root: false).as_json
|
||||
end
|
||||
|
||||
def setup_category(args)
|
||||
category = Category.find(args[:category_id])
|
||||
return if category.blank?
|
||||
args[:payload] = WebHookCategorySerializer.new(category, scope: guardian, root: false).as_json
|
||||
end
|
||||
|
||||
def ping_event?(event_type)
|
||||
event_type.to_s == 'ping'.freeze
|
||||
end
|
||||
|
||||
@@ -61,6 +61,9 @@ class Category < ActiveRecord::Base
|
||||
after_update :rename_category_definition, if: :saved_change_to_name?
|
||||
after_update :create_category_permalink, if: :saved_change_to_slug?
|
||||
|
||||
after_commit :trigger_category_created_event, on: :create
|
||||
after_commit :trigger_category_destroyed_event, on: :destroy
|
||||
|
||||
belongs_to :parent_category, class_name: 'Category'
|
||||
has_many :subcategories, class_name: 'Category', foreign_key: 'parent_category_id'
|
||||
|
||||
@@ -508,6 +511,16 @@ SQL
|
||||
def subcategory_list_includes_topics?
|
||||
subcategory_list_style.end_with?("with_featured_topics")
|
||||
end
|
||||
|
||||
def trigger_category_created_event
|
||||
DiscourseEvent.trigger(:category_created, self)
|
||||
true
|
||||
end
|
||||
|
||||
def trigger_category_destroyed_event
|
||||
DiscourseEvent.trigger(:category_destroyed, self)
|
||||
true
|
||||
end
|
||||
end
|
||||
|
||||
# == Schema Information
|
||||
|
||||
@@ -35,6 +35,9 @@ class Group < ActiveRecord::Base
|
||||
after_save :expire_cache
|
||||
after_destroy :expire_cache
|
||||
|
||||
after_commit :trigger_group_created_event, on: :create
|
||||
after_commit :trigger_group_destroyed_event, on: :destroy
|
||||
|
||||
def expire_cache
|
||||
ApplicationSerializer.expire_cache_fragment!("group_names")
|
||||
end
|
||||
@@ -580,6 +583,16 @@ class Group < ActiveRecord::Base
|
||||
self.member_of(groups, user).where("gu.owner")
|
||||
end
|
||||
|
||||
def trigger_group_created_event
|
||||
DiscourseEvent.trigger(:group_created, self)
|
||||
true
|
||||
end
|
||||
|
||||
def trigger_group_destroyed_event
|
||||
DiscourseEvent.trigger(:group_destroyed, self)
|
||||
true
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def name_format_validator
|
||||
|
||||
@@ -2,6 +2,8 @@ class WebHookEventType < ActiveRecord::Base
|
||||
TOPIC = 1
|
||||
POST = 2
|
||||
USER = 3
|
||||
GROUP = 4
|
||||
CATEGORY = 5
|
||||
|
||||
has_and_belongs_to_many :web_hooks
|
||||
|
||||
|
||||
12
app/serializers/web_hook_category_serializer.rb
Normal file
12
app/serializers/web_hook_category_serializer.rb
Normal file
@@ -0,0 +1,12 @@
|
||||
class WebHookCategorySerializer < CategorySerializer
|
||||
|
||||
%i{
|
||||
can_edit
|
||||
notification_level
|
||||
}.each do |attr|
|
||||
define_method("include_#{attr}?") do
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
12
app/serializers/web_hook_group_serializer.rb
Normal file
12
app/serializers/web_hook_group_serializer.rb
Normal file
@@ -0,0 +1,12 @@
|
||||
class WebHookGroupSerializer < GroupShowSerializer
|
||||
|
||||
%i{
|
||||
is_group_user
|
||||
is_group_owner
|
||||
}.each do |attr|
|
||||
define_method("include_#{attr}?") do
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user