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 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

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.

Ho appena trovato questo argomento, sto cercando la stessa funzionalità.

Qualcuno è in grado di condividere come potrei applicare un timer a tutti gli argomenti all’interno di una categoria? Ho già creato centinaia di argomenti di documentazione e ho appena scoperto questa funzionalità e voglio applicarla retroattivamente.

Se non è ancora possibile farlo tramite il front end, siete in grado di fornire indicazioni su come farlo tramite l’API? Non ho molta familiarità con essa.

Grazie!

@fhe hai qualche possibilità di condividere cosa hai fatto per ottenere questo risultato?

Purtroppo non ho preso appunti :innocent:

Disclaimer: Fai tutto questo solo se capisci cosa sto proponendo e se hai un backup della tua istanza di Discourse e sai come applicarlo. Non l’ho testato personalmente, quindi potrebbe richiedere alcuni aggiustamenti.

1. Ottieni gli ID degli argomenti pertinenti

Questo recupererebbe tutti gli ID degli argomenti dalla categoria con ID 11 che non sono stati eliminati e non sono chiusi.

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

Supponiamo che il risultato sia 3, 6, 12, 24

2. Crea i timer degli argomenti

Successivamente, accedi alla console rails nel tuo container e usa qualcosa come

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

Prova prima con un solo argomento, spero sia d’aiuto!

2 Mi Piace