Ayudar a configurar la importación de mensajes privados
Hay código escrito para la versión anterior de IPB3.
En la nueva versión de IPS4, algunas tablas han sido renombradas.
Resumen
def import_private_messages
puts “”, “importando mensajes privados…”
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 "Procesando #{private_messages.count} mensajes"
break if private_messages.count < 1
puts "Procesando . . . "
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?
# usuarios que forman parte de este mensaje privado.
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 "Usuario encontrado: #{to_user} -- #{user_id} -- #{username}"
else
puts "No se pudo encontrar el usuario: #{to_user}"
end
end
rescue
puts "Saltando pm-#{m['pmtextid']} `to_user_array` está roto -- #{to_user_array.inspect}"
skip = true
end
participants = target_userids
participants << mapped[:user_id]
begin
participants.sort!
rescue
puts "uno de los IDs de los participantes es nil -- #{participants.inspect}"
end
if last_private_message_topic_id != m['topic_id']
last_private_message_topic_id = m['topic_id']
puts "Nuevo mensaje: #{m['topic_id']}: #{title} de #{m['fromuserid']} (#{mapped[:user_id]})" unless QUIET
# mensaje del tema inicial
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 # ¿mensaje privado contigo mismo?
# skip = true
mapped[:target_usernames] = "system"
puts "pm-#{m['pmtextid']} no tiene destinatario (#{m['touserarray']})"
end
else # respuesta
topic_id = topic_lookup_from_imported_post_id("pm-#{topic_id}")
if !topic_id
skip = true
end
mapped[:topic_id] = topic_id
puts "Mensaje de respuesta #{topic_id}: #{m['topic_id']}: de #{m['fromuserid']} (#{mapped[:user_id]})" unless QUIET
end
# puts "#{target_usernames} -- #{mapped[:target_usernames]}"
# puts "Añadiendo #{mapped}"
skip ? nil : mapped
# puts "#{'-'*50}> añadido"
end
end
Así es como se ve la tabla ahora
El problema ocurre con mt_invited_members
Si eliminas esta línea del mensaje de la consulta, se importa pero se pierde la cadena de respuestas. Apenas entiendo qué modificaciones deben hacerse para que los mensajes privados se importen correctamente.
Intenté sustituir mt_invited_members por mt_starter_id
Los mensajes no se han importado en absoluto





