diff --git a/script/bulk_import/generic_bulk.rb b/script/bulk_import/generic_bulk.rb index d4dffba5323..ff6b362b4eb 100644 --- a/script/bulk_import/generic_bulk.rb +++ b/script/bulk_import/generic_bulk.rb @@ -62,6 +62,8 @@ class BulkImport::Generic < BulkImport::Base import_user_notes import_user_note_counts import_user_followers + import_user_custom_fields + update_user_signatures import_user_avatars update_uploaded_avatar_id @@ -265,6 +267,57 @@ class BulkImport::Generic < BulkImport::Base puts " Creating took #{(Time.now - start_time).to_i} seconds." end + def update_user_signatures + puts "", "Cooking user signatures..." + + users = User.includes(:user_custom_fields).where(user_custom_fields: { name: "signature_raw" }) + + users.each do |user| + if SiteSetting.signatures_advanced_mode && user.custom_fields["signature_raw"] + cooked_sig = + PrettyText.cook( + user.custom_fields["signature_raw"], + omit_nofollow: user.has_trust_level?(TrustLevel[3]) && !SiteSetting.tl3_links_no_follow, + ) + # avoid infinite recursion + if cooked_sig != user.custom_fields["signature_cooked"] + user.custom_fields["signature_cooked"] = cooked_sig + user.save + end + end + end + end + + def import_user_custom_fields + puts "", "Importing user custom fields..." + + user_custom_fields = query(<<~SQL) + SELECT * + FROM user_custom_fields + ORDER BY user_id, name + SQL + + field_names = + query("SELECT DISTINCT name FROM user_custom_fields") { _1.map { |row| row["name"] } } + existing_user_custom_fields = + UserCustomField.where(name: field_names).pluck(:user_id, :name).to_set + + create_user_custom_fields(user_custom_fields) do |row| + user_id = user_id_from_imported_id(row["user_id"]) + next if user_id.nil? + + next if existing_user_custom_fields.include?([user_id, row["name"]]) + + { + user_id: user_id, + name: row["name"], + value: raw_with_placeholders_interpolated(row["value"]), + } + end + + user_custom_fields.close + end + def import_category_custom_fields puts "", "Importing category custom fields..."