mirror of
https://github.com/discourse/discourse.git
synced 2024-11-28 03:43:45 +08:00
2dd01c61b0
- Move some methods into their own classes in order to make it easier to reuse them outside of classes extending the base importer. For compatibility reasons the old methods are still in the base importer and delegate to the new objects. The following methods and hashes were extracted: - all the lookup maps for existing and imported data - all the methods used for uploads and attachments - No need to store failed users and groups. This information wasn't used anyway. - Print progress instead of category names when importing categories. - Allow importers to override if bbcode_to_md should be used (until now it always used ARGV) - Allow importers to add additional site settings that automatically get restored after the importer finishes. - Show how many posts and messages are imported per minute. This should help detecting when the import is slowing down and needs to be restarted. - Use max_image_width and max_image_height from settings instead of hard-coded values for uploaded images.
100 lines
3.1 KiB
Ruby
100 lines
3.1 KiB
Ruby
module ImportScripts
|
|
class LookupContainer
|
|
def initialize
|
|
puts 'loading existing groups...'
|
|
@groups = {}
|
|
GroupCustomField.where(name: 'import_id').pluck(:group_id, :value).each do |group_id, import_id|
|
|
@groups[import_id] = group_id
|
|
end
|
|
|
|
puts 'loading existing users...'
|
|
@users = {}
|
|
UserCustomField.where(name: 'import_id').pluck(:user_id, :value).each do |user_id, import_id|
|
|
@users[import_id] = user_id
|
|
end
|
|
|
|
puts 'loading existing categories...'
|
|
@categories = {}
|
|
CategoryCustomField.where(name: 'import_id').pluck(:category_id, :value).each do |category_id, import_id|
|
|
@categories[import_id] = category_id
|
|
end
|
|
|
|
puts 'loading existing posts...'
|
|
@posts = {}
|
|
PostCustomField.where(name: 'import_id').pluck(:post_id, :value).each do |post_id, import_id|
|
|
@posts[import_id] = post_id
|
|
end
|
|
|
|
puts 'loading existing topics...'
|
|
@topics = {}
|
|
Post.joins(:topic).pluck('posts.id, posts.topic_id, posts.post_number, topics.slug').each do |p|
|
|
@topics[p[0]] = {
|
|
topic_id: p[1],
|
|
post_number: p[2],
|
|
url: Post.url(p[3], p[1], p[2])
|
|
}
|
|
end
|
|
end
|
|
|
|
# Get the Discourse Post id based on the id of the source record
|
|
def post_id_from_imported_post_id(import_id)
|
|
@posts[import_id] || @posts[import_id.to_s]
|
|
end
|
|
|
|
# Get the Discourse topic info (a hash) based on the id of the source record
|
|
def topic_lookup_from_imported_post_id(import_id)
|
|
post_id = post_id_from_imported_post_id(import_id)
|
|
post_id ? @topics[post_id] : nil
|
|
end
|
|
|
|
# Get the Discourse Group id based on the id of the source group
|
|
def group_id_from_imported_group_id(import_id)
|
|
@groups[import_id] || @groups[import_id.to_s] || find_group_by_import_id(import_id).try(:id)
|
|
end
|
|
|
|
# Get the Discourse Group based on the id of the source group
|
|
def find_group_by_import_id(import_id)
|
|
GroupCustomField.where(name: 'import_id', value: import_id.to_s).first.try(:group)
|
|
end
|
|
|
|
# Get the Discourse User id based on the id of the source user
|
|
def user_id_from_imported_user_id(import_id)
|
|
@users[import_id] || @users[import_id.to_s] || find_user_by_import_id(import_id).try(:id)
|
|
end
|
|
|
|
# Get the Discourse User based on the id of the source user
|
|
def find_user_by_import_id(import_id)
|
|
UserCustomField.where(name: 'import_id', value: import_id.to_s).first.try(:user)
|
|
end
|
|
|
|
# Get the Discourse Category id based on the id of the source category
|
|
def category_id_from_imported_category_id(import_id)
|
|
@categories[import_id] || @categories[import_id.to_s]
|
|
end
|
|
|
|
def add_group(import_id, group)
|
|
@groups[import_id] = group.id
|
|
end
|
|
|
|
def add_user(import_id, user)
|
|
@users[import_id] = user.id
|
|
end
|
|
|
|
def add_category(import_id, category)
|
|
@categories[import_id] = category.id
|
|
end
|
|
|
|
def add_post(import_id, post)
|
|
@posts[import_id] = post.id
|
|
end
|
|
|
|
def add_topic(post)
|
|
@topics[post.id] = {
|
|
post_number: post.post_number,
|
|
topic_id: post.topic_id,
|
|
url: post.url,
|
|
}
|
|
end
|
|
end
|
|
end
|