Ho intenzione di convertire un gruppo di argomenti in messaggi privati di gruppo per deprecare alcune categorie poco utilizzate. Non possiamo farlo tramite l’interfaccia utente (solo uno per volta), né riesco a trovare un modo per farlo in blocco.
Per quanto ne so, questo dovrebbe funzionare tramite la console:
Identifica gli argomenti per la loro categoria
Cambia topic.archetype in private_message
Cambia topic.subtype in ‘user_to_user’
Rendi topic.categoryNull
In topic_groups (o forse topic_allowed_groups), aggiungi una riga con il group_id e il topic_id pertinenti
Questo approccio ha senso? Devo prima capire la differenza tra quelle tabelle topic/groups. E farlo prima in un ambiente sandbox!!
Ho poi (ci è voluto un po’!) trovato due modi per raggiungere questo obiettivo. Puoi farlo tramite l’interfaccia utente (UI), che funziona bene per le Categorie piccole (e i gruppi piccoli). Richiede un po’ di attenzione per evitare di inviare notifiche inutili mentre lo fai, ma è fattibile.
In alternativa, puoi usare la Console Rails (supponendo che tu sia self-hosted), che è più veloce e molto più potente.
Dall’Interfaccia Utente (UI)
Rimuovi gli altri membri del gruppo dal Gruppo (ma tieni un elenco di nomi utente/email in modo da poterli aggiungere di nuovo facilmente). Questo eviterà che vengano notificati.
Scorri ogni argomento nella Categoria, convertendolo in un MP (Messaggio Privato) utilizzando il menu della chiave inglese dell’amministratore
Trovo più facile farlo aprendo ogni argomento in una scheda separata, e poi scorrendo uno per uno
Aggiungi il Gruppo a ciascuno degli Argomenti (ora MP)
Aggiungi di nuovo i membri del Gruppo al gruppo
Pulisci/elimina tutti i “piccoli post” in ogni Messaggio di Gruppo come desiderato
Nella Console Rails
Accedi alla console entrando nel container e quindi richiamando la console:
./launcher enter app
rails c
Imposta l’ID della Categoria e il Nome del Gruppo, quindi copia lo script seguente nella 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
Questo non notifica affatto gli utenti e conserva bene gli utenti che partecipano ai post (nel caso in cui non facciano parte del Gruppo)