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.
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.
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 !!
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 ?
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.