mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
add support for badges in discourse_merger
This commit is contained in:
parent
82cb163ef3
commit
b9cb97df7f
@ -48,6 +48,9 @@ class BulkImport::DiscourseMerger < BulkImport::Base
|
|||||||
@tag_groups = {}
|
@tag_groups = {}
|
||||||
@uploads = {}
|
@uploads = {}
|
||||||
@post_actions = {}
|
@post_actions = {}
|
||||||
|
@notifications = {}
|
||||||
|
@badge_groupings = {}
|
||||||
|
@badges = {}
|
||||||
|
|
||||||
@auto_group_ids = Group::AUTO_GROUPS.values
|
@auto_group_ids = Group::AUTO_GROUPS.values
|
||||||
|
|
||||||
@ -74,6 +77,7 @@ class BulkImport::DiscourseMerger < BulkImport::Base
|
|||||||
copy_tags
|
copy_tags
|
||||||
copy_uploads if @uploads_path
|
copy_uploads if @uploads_path
|
||||||
copy_everything_else
|
copy_everything_else
|
||||||
|
copy_badges
|
||||||
fix_category_descriptions
|
fix_category_descriptions
|
||||||
|
|
||||||
# TODO: update @mentions for usernames changed due to conflict
|
# TODO: update @mentions for usernames changed due to conflict
|
||||||
@ -311,14 +315,48 @@ class BulkImport::DiscourseMerger < BulkImport::Base
|
|||||||
copy_model(k, skip_processing: true)
|
copy_model(k, skip_processing: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
[UserHistory, UserWarning, Notification].each do |k|
|
[UserHistory, UserWarning].each do |k|
|
||||||
copy_model(k)
|
copy_model(k)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
copy_model(Notification, mapping: @notifications)
|
||||||
|
end
|
||||||
|
|
||||||
|
def copy_badges
|
||||||
|
copy_model(BadgeGrouping, mapping: @badge_groupings, skip_processing: true)
|
||||||
|
|
||||||
|
puts "merging badges..."
|
||||||
|
columns = Badge.columns.map(&:name)
|
||||||
|
imported_ids = []
|
||||||
|
last_id = Badge.unscoped.maximum(:id)
|
||||||
|
|
||||||
|
sql = "COPY badges (#{columns.map { |c| "\"#{c}\"" }.join(', ')}) FROM STDIN"
|
||||||
|
@raw_connection.copy_data(sql, @encoder) do
|
||||||
|
source_raw_connection.exec("SELECT #{columns.map { |c| "\"#{c}\"" }.join(', ')} FROM badges").each do |row|
|
||||||
|
|
||||||
|
if existing = Badge.where(name: row['name']).first
|
||||||
|
@badges[row['id']] = existing.id
|
||||||
|
next
|
||||||
|
end
|
||||||
|
|
||||||
|
old_id = row['id']
|
||||||
|
row['id'] = (last_id += 1)
|
||||||
|
@badges[old_id.to_s] = row['id']
|
||||||
|
|
||||||
|
row['badge_grouping_id'] = @badge_groupings[row['badge_grouping_id']] if row['badge_grouping_id']
|
||||||
|
|
||||||
|
@raw_connection.put_copy_data(row.values)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@sequences[Badge.sequence_name] = last_id + 1
|
||||||
|
|
||||||
|
copy_model(UserBadge, is_a_user_model: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
def copy_model(klass, skip_if_merged: false, is_a_user_model: false, skip_processing: false, mapping: nil, select_sql: nil)
|
def copy_model(klass, skip_if_merged: false, is_a_user_model: false, skip_processing: false, mapping: nil, select_sql: nil)
|
||||||
|
|
||||||
puts "merging #{klass.table_name}..."
|
puts "copying #{klass.table_name}..."
|
||||||
|
|
||||||
columns = klass.columns.map(&:name)
|
columns = klass.columns.map(&:name)
|
||||||
has_custom_fields = CUSTOM_FIELDS.include?(klass.name.downcase)
|
has_custom_fields = CUSTOM_FIELDS.include?(klass.name.downcase)
|
||||||
@ -361,6 +399,7 @@ class BulkImport::DiscourseMerger < BulkImport::Base
|
|||||||
row['tag_group_id'] = tag_group_id_from_imported_id(row['tag_group_id']) if row['tag_group_id']
|
row['tag_group_id'] = tag_group_id_from_imported_id(row['tag_group_id']) if row['tag_group_id']
|
||||||
row['upload_id'] = upload_id_from_imported_id(row['upload_id']) if row['upload_id']
|
row['upload_id'] = upload_id_from_imported_id(row['upload_id']) if row['upload_id']
|
||||||
row['deleted_by_id'] = user_id_from_imported_id(row['deleted_by_id']) if row['deleted_by_id']
|
row['deleted_by_id'] = user_id_from_imported_id(row['deleted_by_id']) if row['deleted_by_id']
|
||||||
|
row['badge_id'] = badge_id_from_imported_id(row['badge_id']) if row['badge_id']
|
||||||
|
|
||||||
old_id = row['id']
|
old_id = row['id']
|
||||||
if old_id && last_id
|
if old_id && last_id
|
||||||
@ -532,6 +571,12 @@ class BulkImport::DiscourseMerger < BulkImport::Base
|
|||||||
r
|
r
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def process_user_badge(user_badge)
|
||||||
|
user_badge['granted_by_id'] = user_id_from_imported_id(user_badge['granted_by_id']) if user_badge['granted_by_id']
|
||||||
|
user_badge['notification_id'] = notification_id_from_imported_id(user_badge['notification_id']) if user_badge['notification_id']
|
||||||
|
user_badge
|
||||||
|
end
|
||||||
|
|
||||||
def user_id_from_imported_id(id)
|
def user_id_from_imported_id(id)
|
||||||
return id if id.to_i < 1
|
return id if id.to_i < 1
|
||||||
super(id)
|
super(id)
|
||||||
@ -558,6 +603,14 @@ class BulkImport::DiscourseMerger < BulkImport::Base
|
|||||||
@post_actions[id.to_s]
|
@post_actions[id.to_s]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def badge_id_from_imported_id(id)
|
||||||
|
@badges[id.to_s]
|
||||||
|
end
|
||||||
|
|
||||||
|
def notification_id_from_imported_id(id)
|
||||||
|
@notifications[id.to_s]
|
||||||
|
end
|
||||||
|
|
||||||
def fix_primary_keys
|
def fix_primary_keys
|
||||||
@sequences.each do |sequence_name, val|
|
@sequences.each do |sequence_name, val|
|
||||||
sql = "SELECT setval('#{sequence_name}', #{val})"
|
sql = "SELECT setval('#{sequence_name}', #{val})"
|
||||||
|
Loading…
Reference in New Issue
Block a user