mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: Rake task to export groups (#9450)
This commit is contained in:
@@ -5,6 +5,7 @@ require "import_export/base_exporter"
|
||||
require "import_export/category_structure_exporter"
|
||||
require "import_export/category_exporter"
|
||||
require "import_export/topic_exporter"
|
||||
require "import_export/group_exporter"
|
||||
require "json"
|
||||
|
||||
module ImportExport
|
||||
@@ -26,4 +27,8 @@ module ImportExport
|
||||
ImportExport::TopicExporter.new(topic_ids).perform.save_to_file(filename)
|
||||
end
|
||||
|
||||
def self.export_groups(include_users, filename = nil)
|
||||
ImportExport::GroupExporter.new(include_users).perform.save_to_file(filename)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -8,9 +8,11 @@ module ImportExport
|
||||
:auto_close_hours, :parent_category_id, :auto_close_based_on_last_post,
|
||||
:topic_template, :all_topics_wiki, :permissions_params]
|
||||
|
||||
GROUP_ATTRS = [ :id, :name, :created_at, :mentionable_level, :messageable_level, :visibility_level,
|
||||
:automatic_membership_email_domains, :automatic_membership_retroactive,
|
||||
:primary_group, :title, :grant_trust_level, :incoming_email]
|
||||
GROUP_ATTRS = [:id, :name, :created_at, :automatic_membership_email_domains, :primary_group,
|
||||
:title, :grant_trust_level, :incoming_email, :bio_raw, :allow_membership_requests,
|
||||
:full_name, :default_notification_level, :visibility_level, :public_exit,
|
||||
:public_admission, :membership_request_template, :messageable_level, :mentionable_level,
|
||||
:members_visibility_level, :publish_read_state]
|
||||
|
||||
USER_ATTRS = [:id, :email, :username, :name, :created_at, :trust_level, :active, :last_emailed_at]
|
||||
|
||||
@@ -39,6 +41,26 @@ module ImportExport
|
||||
self
|
||||
end
|
||||
|
||||
def export_groups(group_names)
|
||||
data = []
|
||||
groups = Group.all
|
||||
groups = groups.where(name: group_names) if group_names.present?
|
||||
|
||||
groups.find_each do |group|
|
||||
attrs = GROUP_ATTRS.inject({}) { |h, a| h[a] = group.public_send(a); h }
|
||||
attrs[:user_ids] = group.users.pluck(:id)
|
||||
data << attrs
|
||||
end
|
||||
|
||||
data
|
||||
end
|
||||
|
||||
def export_groups!
|
||||
@export_data[:groups] = export_groups([])
|
||||
|
||||
self
|
||||
end
|
||||
|
||||
def export_category_groups
|
||||
groups = []
|
||||
group_names = []
|
||||
@@ -53,13 +75,7 @@ module ImportExport
|
||||
group_names.uniq!
|
||||
return [] if group_names.empty?
|
||||
|
||||
Group.where(name: group_names).find_each do |group|
|
||||
attrs = GROUP_ATTRS.inject({}) { |h, a| h[a] = group.public_send(a); h }
|
||||
attrs[:user_ids] = group.users.pluck(:id)
|
||||
groups << attrs
|
||||
end
|
||||
|
||||
groups
|
||||
export_groups(group_names)
|
||||
end
|
||||
|
||||
def export_category_groups!
|
||||
|
||||
28
lib/import_export/group_exporter.rb
Normal file
28
lib/import_export/group_exporter.rb
Normal file
@@ -0,0 +1,28 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module ImportExport
|
||||
class GroupExporter < BaseExporter
|
||||
|
||||
def initialize(include_group_users = false)
|
||||
@include_group_users = include_group_users
|
||||
|
||||
@export_data = {
|
||||
groups: []
|
||||
}
|
||||
@export_data[:users] = [] if @include_group_users
|
||||
end
|
||||
|
||||
def perform
|
||||
puts "Exporting all user groups...", ""
|
||||
export_groups!
|
||||
export_group_users! if @include_group_users
|
||||
|
||||
self
|
||||
end
|
||||
|
||||
def default_filename_prefix
|
||||
"groups-export"
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
@@ -16,3 +16,11 @@ task 'export:category_structure', [:include_group_users, :file_name] => [:enviro
|
||||
ImportExport.export_category_structure(args[:include_group_users], args[:file_name])
|
||||
puts "", "Done", ""
|
||||
end
|
||||
|
||||
desc 'Export all user groups'
|
||||
task 'export:groups', [:include_group_users, :file_name] => [:environment] do |_, args|
|
||||
require "import_export"
|
||||
|
||||
ImportExport.export_groups(args[:include_group_users], args[:file_name])
|
||||
puts "", "Done", ""
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user