¿Hay alguna forma de actualizar la información de su usuario en bloque? Lo que quiero hacer es exportar la información de actualización de datos de usuario, como el nombre, etc., y luego importarla de nuevo a la base de datos, actualizando la información existente.
Puedo descargar un CSV del panel de administración, pero me pregunto cómo podría volver a cargar esa información en Discourse.
Estuve actualizando minuciosamente a cada usuario en el lado de administración (campo Nombre), pero cuando vuelvo a entrar, las actualizaciones aparecen en blanco.
La mejor manera es probablemente con la API, aunque también podrías hacerlo con un script que lea tu CSV y lo actualice en Rails.
Aquí tienes una tarea rake que actualiza campos personalizados de usuario que podrían modificarse para actualizar otras cosas:
require "csv"
desc "Import user fields"
task "user_fields:import_csv", [:filename] => [:environment] do |_, args|
puts "Filename: #{args[:filename]}"
data = CSV.read(args[:filename], headers: true );
data.each_entry do |row|
puts "doing row."
row.to_h.each do |x|
user_id = row['user_id']
if x.first == 'user_id'
u = User.find(user_id)
puts "Got user: #{u.username}"
else
name = x.first
val = row[x.first]
ucf = UserCustomField.find_by(user_id: row['user_id'], name: name)
if ucf
if val != ucf.value
puts "Updating UCF: #{row['user_id']} Name: #{name}, Found #{ucf.value}}"
ucf.update(value: val)
end
else
if val
puts "Creating UCF: #{row['user_id']} Name: #{name}, value: #{val}"
UserCustomField.create(user_id: user_id, name: name, value: val)
end
end
end
end
end
end
Después de modificarlo, lo pondrías en /var/www/discourse/lib/tasks dentro del contenedor y ejecutarías rake user_fields:import_csv["TU-CSV.csv"]
Si necesitas ayuda para modificarlo para tus necesidades, envíame tu CSV (o al menos las cabeceras y las primeras filas) por correo electrónico y te daré un presupuesto.
Tenga en cuenta que en este momento solo hace campos personalizados de usuario, no campos como el nombre.
Eso probablemente se debió a que no estabas presionando guardar al final de cada edición. ¡Es una cosa de la interfaz de usuario que sería bueno ver abordada algún día!
¿Funciona con columnas que tienen espacios o los campos deben tener guiones bajos? Además, cuando se exporta, el encabezado de la primera columna es id y no user_id. ¿Es eso un problema?
El script no está diseñado para consumir la descarga de datos de usuario. Deberá modificar varios de los encabezados de las columnas. Además, en su forma actual, el script solo actualiza los elementos almacenados en la tabla custom_fields.