Danke, Justin. Ich habe mir das ebenfalls kurz angesehen – sieht das für dich in Ordnung aus? (Falls du magst, kannst du es gerne zum offiziellen Importer hinzufügen.)
XENFORO_DB = "xenforo_db_3"
TABLE_PREFIX = "xf_"
BATCH_SIZE = 1000
ATTACHMENT_DIR = '/FULL/PATH/TO/attachments'
AVATAR_DIR = '/FULL/PATH/TO/avatars'
(Habe die letzte Zeile hinzugefügt^^ – das bedeutet, du musst die Avatare dorthin kopieren.)
def execute
import_users
import_categories
import_posts
import_avatars
end
(Habe die letzte Zeile hinzugefügt^^)
def import_avatars
if AVATAR_DIR
users = User.all
users.each do |u|
unless u.custom_fields["import_id"].nil?
import_id = u.custom_fields["import_id"]
if import_id.to_i < 1000
dir_num = "0"
elsif import_id.to_i > 1000
dir_num = import_id.first
end
avatar_filename = "#{import_id}.jpg"
file_path = "#{AVATAR_DIR}/l/#{dir_num}"
file_path_and_name = "#{file_path}/#{avatar_filename}"
if File.exists?(file_path_and_name)
upload = create_upload(u.id, file_path_and_name, avatar_filename)
if upload.persisted?
u.import_mode = false
u.create_user_avatar
u.import_mode = true
u.user_avatar.update(custom_upload_id: upload.id)
u.update(uploaded_avatar_id: upload.id)
else
puts "Error: Upload did not persist for #{u.username} #{avatar_filename}!"
end
end
end
end
end
end
Es ist hier schon sehr spät, daher habe ich vielleicht einige Fehler gemacht oder einiges vergessen. Dabei gehe ich davon aus, dass alle Avatare .jpg sind (was bei meinen allen der Fall zu sein scheint). Bei den u.import_mode-Schaltern war ich mir nicht ganz sicher, daher habe ich sie einfach auskommentiert.
Völlig ungetestet (es ist hier fast 5 Uhr morgens
)
Ich habe auf meiner Dev-Maschine einen Test mit einem Forum von 100.000 Beiträgen durchgeführt, und das dauerte 90 Minuten. Das Forum, das ich importieren möchte, hat einige Millionen Beiträge, also vielleicht das Zehnfache?
Toll! Werdet ihr ihn mit uns teilen? Hast du eine Ahnung, wann?