شكرًا لك يا جاستن، لقد ألقيت نظرة سريعة عليها - هل يبدو هذا مقبولاً لديك؟ (لا تتردد في إضافتها إلى أداة الاستيراد الرسمية إذا أردت)
XENFORO_DB = "xenforo_db_3"
TABLE_PREFIX = "xf_"
BATCH_SIZE = 1000
ATTACHMENT_DIR = '/FULL/PATH/TO/attachments'
AVATAR_DIR = '/FULL/PATH/TO/avatars'
(تمت إضافة السطر الأخير^^ - وهذا يعني أنه ستحتاج إلى نسخ الصور الشخصية إلى هناك)
def execute
import_users
import_categories
import_posts
import_avatars
end
(تمت إضافة السطر الأخير^^)
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
إنه متأخر جدًا هنا لذا قد يكون ارتكبت بعض الأخطاء أو أغفلت الكثير من الأشياء، لكن هذا يفترض أن جميع الصور الشخصية بصيغة .jpg (وهو ما يبدو أنه ينطبق على جميع صوري). لم أكن متأكدًا تمامًا من مفاتيح التبديل u.import_mode لذا قمت بتعليقها.
لم يتم اختبارها على الإطلاق (الساعة الآن حوالي 5 صباحًا هنا
)
لقد أجريت اختبارًا على جهاز التطوير الخاص بي على منتدي يحتوي على 100 ألف منشور واستغرق الأمر 90 دقيقة. المنتدي الذي أريد إجراء الاستيراد عليه يحتوي على بضعة ملايين من المنشورات، لذا ربما يستغرق الأمر 10 أضعاف ذلك؟
رائع! هل ستشاركونها معنا؟ هل لديك أي فكرة عن التوقيت؟