Mettre à jour les informations utilisateur en masse

Existe-t-il un moyen de mettre à jour les informations de vos utilisateurs en masse ? Ce que je veux faire, c’est exporter les informations de mise à jour des données utilisateur comme le nom, etc., puis les réimporter dans la base de données, en mettant à jour les informations existantes.

Je peux télécharger un CSV depuis le panneau d’administration, mais je me demande comment je pourrais réimporter ces informations sur Discourse.

Je mettais à jour méticuleusement chaque utilisateur dans l’interface d’administration (champ Nom), mais lorsque je reviens, les mises à jour apparaissent vides.

1 « J'aime »

La meilleure façon est probablement avec l’API, bien que vous puissiez également le faire avec un script qui lirait votre CSV et le mettrait à jour dans Rails.

Voici une tâche Rake qui met à jour les champs personnalisés des utilisateurs et qui pourrait être modifiée pour mettre à jour d’autres éléments :


require "csv"
desc "Importer les champs des utilisateurs"
task "user_fields:import_csv", [:filename] => [:environment] do |_, args|
  puts "Nom du fichier : #{args[:filename]}"
  data = CSV.read(args[:filename], headers: true)
  data.each_entry do |row|
    puts "Traitement de la ligne."
    row.to_h.each do |x|
      user_id = row["user_id"]
      if x.first == "user_id"
        u = User.find(user_id)
        puts "Utilisateur trouvé : #{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 "Mise à jour de UCF : #{row["user_id"]} Nom : #{name}, Trouvé #{ucf.value}}"
            ucf.update(value: val)
          end
        else
          if val
            puts "Création de UCF : #{row["user_id"]} Nom : #{name}, valeur : #{val}"
            UserCustomField.create(user_id: user_id, name: name, value: val)
          end
        end
      end
    end
  end
end

Après l’avoir modifié, vous le placeriez dans /var/www/discourse/lib/tasks à l’intérieur du conteneur et exécuteriez rake user_fields:import_csv["VOTRE-CSV.csv"]

Si vous avez besoin d’aide pour le modifier selon vos besoins, envoyez-moi votre CSV par e-mail (ou au moins les en-têtes et les premières lignes) et je vous fournirai un devis.

3 « J'aime »

Voici le même script sur GitHub :

Veuillez noter qu’actuellement, il ne gère que les champs personnalisés des utilisateurs, pas les champs tels que le nom.

C’était probablement parce que vous n’appuyiez pas sur save à la fin de chaque modification. C’est une chose d’interface utilisateur qui serait bien de voir résolue un jour !!

1 « J'aime »

Fonctionne-t-il avec des colonnes qui contiennent des espaces ou les champs doivent-ils avoir des traits de soulignement ? De plus, lors de l’exportation, l’en-tête de la première colonne est id et non user_id. Est-ce un problème ?

Ils portent des noms comme user_field_1. C’est quelque peu expliqué dans le dépôt github lié ci-dessus.

Le script n’est pas conçu pour consommer le téléchargement des données utilisateur. Vous devrez modifier plusieurs en-têtes de colonne. De plus, dans sa forme actuelle, le script ne met à jour que les éléments stockés dans la table custom_fields.