Hola, estoy intentando importar mensajes privados desde una base de datos vBulletin5.
Funciona, pero en el perfil del autor, la discusión solo aparece en “enviados”, no en “buzón de entrada”.
Por otro lado, en el perfil del otro participante, la discusión aparece correctamente tanto en “buzón de entrada” como en “enviados”.
Perfil del autor:
Aparece en “enviados”
Pero no en “buzón de entrada”
Perfil del otro participante:
Aparece en ambos:
¿Cómo puedo hacer que la discusión aparezca en el buzón de entrada del autor?
Si es necesario, aquí está mi código actual, algo desordenado:
def import_pm
puts "", "importando temas de mensajes privados..."
pms_count = mysql_query("SELECT COUNT(nodeid) cnt, starter
FROM #{DB_PREFIX}node
WHERE (unpublishdate = 0 OR unpublishdate IS NULL)
AND (approved = 1 AND showapproved = 1)
AND starter = 2676436
AND contenttypeid=#{@pm};"
).first["cnt"]
batches(BATCH_SIZE) do |offset|
pms = mysql_query <<~SQL
SELECT pm.nodeid AS pmid, pm.starter, pm.title, pm.parentid AS parentid,pm.open,pm.userid AS postuserid,pm.publishdate AS dateline,
nv.count views, 1 AS visible, pm.sticky,
CONVERT(CAST(rawtext AS BINARY)USING utf8) AS raw
FROM #{DB_PREFIX}node pm
LEFT JOIN #{DB_PREFIX}nodeview nv ON nv.nodeid=pm.nodeid
LEFT JOIN #{DB_PREFIX}text txt ON txt.nodeid=pm.nodeid
WHERE
pm.contenttypeid = #{@pm}
AND (pm.unpublishdate = 0 OR pm.unpublishdate IS NULL)
AND pm.approved = 1 AND pm.showapproved = 1
AND pm.starter = 2676436
ORDER BY pm.nodeid
LIMIT #{BATCH_SIZE}
OFFSET #{offset}
SQL
break if pms.size < 1
create_posts(pms, total: pms_count, offset: 0) do |pm|
p = {}
p[:id] = "pm-#{pm['pmid']}"
p[:user_id] = user_id_from_imported_user_id(pm['postuserid']) || Discourse::SYSTEM_USER_ID
p[:raw] = preprocess_post_raw(pm['raw']) rescue nil
p[:created_at] = parse_timestamp(pm["dateline"]),
topic_id = nil
next if p[:raw].blank?
# si es el primer mensaje
if pm['parentid'] == 8
#next unless post = topic_lookup_from_imported_post_id("pm-#{pm["pmid"]}")
target_usernames = []
target_userids = []
# obtener lista de usuarios
userlist = mysql_query("select distinct userid from sentto where nodeid = #{pm["starter"]}")
userlist.each do |user|
userid = user_id_from_imported_user_id(user["userid"]) || Discourse::SYSTEM_USER_ID;
target_userids << userid || Discourse::SYSTEM_USER_ID
target_usernames << User.find_by(id: userid).try(:username) || "system"
end
participants = target_userids
begin
participants.sort!
rescue
puts "uno de los IDs de participante es nil -- #{participants.inspect}"
end
p[:title] = @htmlentities.decode(pm['title']).strip[0...255]
p[:archetype] = Archetype.private_message
p[:target_usernames] = target_usernames.join(',')
if p[:target_usernames].size < 1 # ¿mensaje privado contigo mismo?
# skip = true
p[:target_usernames] = "system"
puts "pm-#{pm['nodeid']} no tiene destinatario"
end
# si no es el primer mensaje
else
next unless topic = topic_lookup_from_imported_post_id("pm-#{pm["starter"]}")
p[:topic_id] = topic[:topic_id]
end
puts "mensaje : #{p}\n"
p
end
end
exit
end





