Helfen Sie mit, den Import privater Nachrichten zu gestalten
Es gibt Code, der für die vorherige Version von IPB3 geschrieben wurde.
In der neuen Version von IPS4 wurden einige Tabellen umbenannt.
Zusammenfassung
def import_private_messages
puts “”, “Importiere private Nachrichten…”
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 "Verarbeite #{private_messages.count} Nachrichten"
break if private_messages.count < 1
puts "Verarbeite . . . "
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?
# Benutzer, die Teil dieser privaten Nachricht sind.
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 "Benutzer gefunden: #{to_user} -- #{user_id} -- #{username}"
else
puts "Benutzer nicht gefunden: #{to_user}"
end
end
rescue
puts "Überspringe pm-#{m['pmtextid']} `to_user_array` ist defekt -- #{to_user_array.inspect}"
skip = true
end
participants = target_userids
participants << mapped[:user_id]
begin
participants.sort!
rescue
puts "Eine der Teilnehmer-IDs ist nil -- #{participants.inspect}"
end
if last_private_message_topic_id != m['topic_id']
last_private_message_topic_id = m['topic_id']
puts "Neue Nachricht: #{m['topic_id']}: #{title} von #{m['fromuserid']} (#{mapped[:user_id]})" unless QUIET
# Themen-Nachricht
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 # PN mit sich selbst?
# skip = true
mapped[:target_usernames] = "system"
puts "pm-#{m['pmtextid']} hat kein Ziel (#{m['touserarray']})"
end
else # Antwort
topic_id = topic_lookup_from_imported_post_id("pm-#{topic_id}")
if !topic_id
skip = true
end
mapped[:topic_id] = topic_id
puts "Antwort-Nachricht #{topic_id}: #{m['topic_id']}: von #{m['fromuserid']} (#{mapped[:user_id]})" unless QUIET
end
# puts "#{target_usernames} -- #{mapped[:target_usernames]}"
# puts "Füge #{mapped} hinzu"
skip ? nil : mapped
# puts "#{'-'*50}> hinzugefügt"
end
end
So sieht die Tabelle jetzt aus
Das Problem tritt bei mt_invited_members auf.
Wenn Sie diese Zeile der Nachricht aus der Anfrage entfernen, wird sie importiert, aber die Kette der Antworten geht verloren. Ich verstehe kaum, welche Änderungen vorgenommen werden müssen, damit private Nachrichten korrekt importiert werden.
Ich habe versucht, mt_invited_members durch mt_starter_id zu ersetzen.
Nachrichten wurden überhaupt nicht importiert.





