Actualizar información de usuario en bloque

¿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.

1 me gusta

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.

3 Me gusta

Aquí está el mismo script en GitHub:

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!

1 me gusta

¿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?

Tienen nombres como user_field_1. Eso se explica en parte en el repositorio de GitHub enlazado arriba.

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.