Bulk topic timers

For adding topic timers, e.g., close topic 1 month after last update, it would be great to have a bulk option. This would allow for adding topic timers to multiple topics at once, without going into each individual topic.

2 « J'aime »

Interesting idea. Are you referring to this modal?

If so, an edge cases to consider: What happens if there’s already a topic timer on one (or more) of the selected topics?

1 « J'aime »

Yes, exactly this modal.

I’d find it natural to have the same behavior as if the set topic timer action is performed again on a topic that already has one, i.e., overwrite the existing timer.

2 « J'aime »

May I ask why the “Auto-close topic hours” setting on the category isn’t enough?
Are you adding these timers on topics spanning multiple categories?

3 « J'aime »

Absolutely. I’ve added this setting (720 hours and ticked Don’t close until the last post in the topic is at least this old) and it seems to affect only newly added topics, not those that are currently in this category.

I wanted to bulk add the topic timer to the topics that already existed in the category.

4 « J'aime »

I thought we had a rails command to apply the category setting retroactively too all topics within the category, but I’m failing to find it right now. I’ll keep looking…

1 « J'aime »

This is a pretty unique request, why not consume the api, my feeling is that your own custom sword here will fit way better

4 « J'aime »

Thanks for the suggestion.

I’ve went with a combination of database queries to identify the relevant topic IDs and requests to the timer API.

J’ai juste trouvé ce sujet, je cherche la même fonctionnalité.

Quelqu’un pourrait-il partager comment je pourrais appliquer un minuteur à tous les sujets d’une catégorie ? J’ai déjà créé des centaines de sujets de documentation et je viens de découvrir cette fonctionnalité et je veux l’appliquer rétroactivement.

Si ce n’est toujours pas possible de le faire via le front-end, pourriez-vous me donner des indications sur la façon de le faire via l’API ? Je ne la connais pas encore très bien.

Merci !

@fhe y a-t-il une chance que vous puissiez partager ce que vous avez fait pour y parvenir ?

Je n’ai malheureusement pas pris de notes :innocent:

Avis de non-responsabilité : Veuillez ne faire tout cela que si vous comprenez ce que je propose et si vous avez une sauvegarde de votre instance Discourse et savez comment l’appliquer. Je n’ai pas testé cela moi-même, donc cela pourrait nécessiter quelques ajustements.

1. Obtenir les identifiants de sujets pertinents

Ceci obtiendrait tous les identifiants de sujets de la catégorie avec l’ID 11 qui ne sont pas supprimés et non fermés.

SELECT id FROM topics WHERE category_id = 11 AND deleted_at IS NULL AND closed = FALSE ORDER BY id

Disons que le résultat est 3, 6, 12, 24

2. Créer les minuteurs de sujets

Ensuite, entrez dans la console Rails de votre conteneur et utilisez quelque chose comme

auto_close_hours = 720
topic_ids = [3,6,12,24]
Topic.where(id: topic_ids).find_each do |topic| 
	topic.set_or_create_timer(
		TopicTimer.types[:close],
		auto_close_hours,
		based_on_last_post: true
	)
	MessageBus.publish("/topic/#{topic.id}", reload_topic: true)
end

Veuillez tester d’abord avec un sujet, j’espère que cela vous aidera !

2 « J'aime »