Aggiorna le informazioni utente in blocco

Esiste un modo per aggiornare le informazioni dell’utente in blocco? Quello che vorrei fare è esportare le informazioni di aggiornamento dei dati utente come nome ecc. e poi reimportarle nel database, aggiornando le informazioni esistenti.

Posso scaricare un CSV dal pannello di amministrazione, ma mi stavo chiedendo come potrei reinserire quelle informazioni su Discourse.

Stavo aggiornando meticolosamente ogni utente sul lato amministrativo (campo Nome) ma quando torno indietro gli aggiornamenti appaiono vuoti.

1 Mi Piace

Il modo migliore è probabilmente con l’API, anche se potresti farlo anche con uno script che legga il tuo CSV e lo aggiorni in Rails.

Ecco un rake task che aggiorna campi utente personalizzati che potrebbero essere modificati per aggiornare altre cose:


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

Dopo averlo modificato, lo metteresti in /var/www/discourse/lib/tasks all’interno del container e rake user_fields:import_csv["YOUR-CSV.csv"]

Se hai bisogno di aiuto per modificarlo per le tue esigenze, inviami via email il tuo CSV (o almeno gli header e le prime righe) e ti fornirò un preventivo.

3 Mi Piace

Ecco lo stesso script su GitHub:

Si prega di notare che al momento esegue solo i campi personalizzati dell’utente, non campi come il nome.

Probabilmente è stato perché non hai premuto salva alla fine di ogni modifica. È una cosa dell’interfaccia utente che sarebbe bello vedere affrontata un giorno!!

1 Mi Piace

Funziona con colonne che contengono spazi o i campi dovrebbero avere underscore? Inoltre, quando esportato, l’intestazione della prima colonna è id e non user_id. È un problema?

Hanno nomi come user_field_1. Questo è in parte spiegato nel repository GitHub collegato sopra.

Lo script non è progettato per consumare il download dei dati utente. Dovrai modificare diverse intestazioni di colonna. Inoltre, nella sua forma attuale, lo script aggiorna solo gli elementi archiviati nella tabella custom_fields.