المساعدة في تشكيل استيراد الرسائل الخاصة
هناك كود مكتوب للإصدار السابق من ipb3
في الإصدار الجديد من ips4، تم إعادة تسمية بعض الجداول
ملخص
def import_private_messages
puts “”, “جاري استيراد الرسائل الخاصة…”
topic_count = mysql_query("SELECT COUNT(msg_id) count FROM #{TABLE_PREFIX}message_posts").first["count"]
last_private_message_topic_id = -1
batches(BATCH_SIZE) do |offset|
private_messages = mysql_query(<<-SQL
SELECT msg_id pmtextid,
msg_topic_id topic_id,
msg_author_id fromuserid,
mt_title title,
msg_post message,
mt_invited_members touserarray,
mt_to_member_id to_user_id,
msg_is_first_post first_post,
msg_date dateline
FROM #{TABLE_PREFIX}message_topics, #{TABLE_PREFIX}message_posts
WHERE msg_topic_id = mt_id
AND msg_date > UNIX_TIMESTAMP(STR_TO_DATE('#{IMPORT_AFTER}', '%Y-%m-%d'))
ORDER BY msg_topic_id, msg_id
LIMIT #{BATCH_SIZE}
OFFSET #{offset}
SQL
)
puts "معالجة #{private_messages.count} رسائل"
break if private_messages.count < 1
puts "معالجة . . . "
private_messages = private_messages.reject { |pm| @lookup.post_already_imported?("pm-#{pm['pmtextid']}") }
title_username_of_pm_first_post = {}
create_posts(private_messages, total: topic_count, offset: offset) do |m|
skip = false
mapped = {}
mapped[:id] = "pm-#{m['pmtextid']}"
mapped[:user_id] = user_id_from_imported_user_id(m['fromuserid']) || Discourse::SYSTEM_USER_ID
mapped[:raw] = clean_up(m['message']) rescue nil
mapped[:created_at] = Time.zone.at(m['dateline'])
title = @htmlentities.decode(m['title']).strip[0...255]
topic_id = nil
next if mapped[:raw].blank?
# المستخدمين الذين يشاركون في هذه الرسالة الخاصة.
target_usernames = []
target_userids = []
begin
to_user_array = [ m['to_user_id'] ] + array_from_members_string(m['touserarray'])
rescue
puts "#{m['pmtextid']} -- #{m['touserarray']}"
skip = true
end
begin
to_user_array.each do |to_user|
user_id = user_id_from_imported_user_id(to_user)
username = User.find_by(id: user_id).try(:username)
target_userids << user_id || Discourse::SYSTEM_USER_ID
target_usernames << username if username
if user_id
puts "تم العثور على مستخدم: #{to_user} -- #{user_id} -- #{username}"
else
puts "لا يمكن العثور على المستخدم: #{to_user}"
end
end
rescue
puts "تجاوز pm-#{m['pmtextid']} `to_user_array` تالفة -- #{to_user_array.inspect}"
skip = true
end
participants = target_userids
participants << mapped[:user_id]
begin
participants.sort!
rescue
puts "معرف أحد المشاركين هو nil -- #{participants.inspect}"
end
if last_private_message_topic_id != m['topic_id']
last_private_message_topic_id = m['topic_id']
puts "رسالة جديدة: #{m['topic_id']}: #{title} من #{m['fromuserid']} (#{mapped[:user_id]})" unless QUIET
# رسالة موضوع
topic_id = m['topic_id']
mapped[:title] = title
mapped[:archetype] = Archetype.private_message
mapped[:target_usernames] = target_usernames.join(',')
if mapped[:target_usernames].size < 1 # رسالة خاصة مع نفسك؟
# skip = true
mapped[:target_usernames] = "system"
puts "pm-#{m['pmtextid']} ليس لها مستهدف (#{m['touserarray']})"
end
else # رد
topic_id = topic_lookup_from_imported_post_id("pm-#{topic_id}")
if !topic_id
skip = true
end
mapped[:topic_id] = topic_id
puts "رسالة رد #{topic_id}: #{m['topic_id']}: من #{m['fromuserid']} (#{mapped[:user_id]})" unless QUIET
end
# puts "#{target_usernames} -- #{mapped[:target_usernames]}"
# puts "إضافة #{mapped}"
skip ? nil : mapped
# puts "#{'-'*50}> تمت الإضافة"
end
end
هذا هو شكل الجدول الآن
تظهر المشكلة مع mt_invited_members
إذا قمت بإزالة هذا السطر من الرسالة من الطلب، فسيتم استيراده ولكن سلسلة الردود تضيع. بالكاد أفهم ما الذي يحتاج إلى تعديله حتى يتم استيراد الرسائل الخاصة بشكل صحيح.
حاولت استبدال mt_invited_members بـ mt_starter_id
لم يتم استيراد الرسائل على الإطلاق





