Je prévois de convertir un tas de sujets en MP de groupe afin de déprécier certaines catégories peu utilisées. Nous ne pouvons pas le faire via l’interface utilisateur (un par un seulement), ni trouver un moyen groupé de le faire.
D’après ce que je peux dire, cela devrait fonctionner via la console :
Identifier les sujets par leur catégorie
Changer topic.archetype en private_message
Changer topic.subtype en ‘user_to_user’
Mettre topic.category à Null
Dans topic_groups (ou peut-être topic_allowed_groups), ajouter une ligne avec le group_id et le topic_id pertinents
Cette approche a-t-elle du sens ? Je dois d’abord déterminer la différence entre ces tables topic/groups. Et le faire dans un bac à sable pour commencer !!
Merci Jay ! Ce serait bien et rapide pour la première moitié. Cependant, je dois aussi m’assurer qu’ils finissent par devenir des chefs de groupe.
Avez-vous une idée de ce que je dois faire avec les tables topic_groups / topic_allowed_groups ? Je ne pense pas pouvoir m’en sortir avec un update_all pour celles-ci.
J’ai depuis lors (il a fallu du temps, c’est clair !) trouvé deux façons d’y parvenir. Vous pouvez le faire via l’interface utilisateur (UI), ce qui fonctionne bien pour les petites catégories (et les petits groupes). Il faut faire attention à ne pas déclencher de notifications inutiles pendant l’opération, mais c’est tout à fait faisable.
Alternativement, vous pouvez utiliser la console Rails (en supposant que vous êtes auto-hébergé), ce qui est plus rapide et beaucoup plus puissant.
Depuis l’interface utilisateur (UI)
Supprimez les autres membres du groupe du Groupe (mais conservez une liste des noms d’utilisateur/e-mails afin de pouvoir les rajouter facilement). Cela évitera qu’ils soient notifiés.
Parcourez chaque sujet dans la Catégorie, en convertissant chacun d’eux en MP (Message Privé) à l’aide du menu de la clé à molette d’administration
Je trouve cela plus facile à faire en ouvrant chaque sujet dans son propre onglet, puis en les parcourant un par un
Ajoutez le Groupe à chacun des Sujets (maintenant des MP)
Réajoutez les membres du Groupe au groupe
Nettoyez/supprimez tous les « petits messages » dans chaque Message de Groupe comme souhaité
Dans la console Rails
Accédez à la console en entrant dans le conteneur, puis en appelant la console :
./launcher enter app
rails c
Définissez la Catégorie et le Groupe, puis copiez le script ci-dessous dans la console :
category_id = =CategoryID=
group_name = '=GroupName='
group = Group.find_by('lower(name) = ?', group_name.downcase)
about_id = Category.find(category_id).topic_id
topic_ids = Topic.where(category_id: category_id).where.not(id: about_id).pluck(:id)
Topic.where(id: topic_ids).find_each do |topic|
topic.archetype = Archetype.private_message
topic.category_id = nil
topic.subtype = 'user_to_user'
topic.save!
TopicAllowedGroup.find_or_create_by!(topic_id: topic.id, group_id: group.id)
Post.where(topic_id: topic.id).pluck(:user_id).uniq.each do |uid|
TopicAllowedUser.find_or_create_by!(topic_id: topic.id, user_id: uid)
end
end
Ceci ne notifie pas les utilisateurs du tout, et préserve joliment les utilisateurs participant aux messages (au cas où ils ne seraient pas dans le Groupe)