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 „Gefällt mir“

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 „Gefällt mir“

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 „Gefällt mir“

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 „Gefällt mir“

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 „Gefällt mir“

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 „Gefällt mir“

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 „Gefällt mir“

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.

Ich habe gerade dieses Thema gefunden und suche nach der gleichen Funktionalität.

Kann mir jemand mitteilen, wie ich einen Timer auf alle Themen innerhalb einer Kategorie anwenden kann? Ich habe bereits Hunderte von Dokumentationsthemen erstellt und gerade diese Funktion entdeckt und möchte sie rückwirkend anwenden.

Wenn es über das Frontend noch nicht möglich ist, können Sie mir dann Anleitungen geben, wie ich dies über die API tun kann? Ich bin damit noch nicht sehr vertraut.

Danke!

@fhe, gibt es eine Möglichkeit, dass du teilst, was du getan hast, um das zu erreichen?

Ich habe leider keine Notizen gemacht :innocent:

Haftungsausschluss: Bitte tun Sie dies nur, wenn Sie verstehen, was ich vorschlage, und wenn Sie ein Backup Ihrer Discourse-Instanz haben und wissen, wie Sie es anwenden. Ich habe dies selbst nicht getestet, daher sind möglicherweise Anpassungen erforderlich.

1. Relevante Topic-IDs abrufen

Dies würde alle Topic-IDs aus der Kategorie mit der ID 11 abrufen, die nicht gelöscht und nicht geschlossen sind.

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

Nehmen wir an, das Ergebnis ist 3, 6, 12, 24

2. Topic-Timer erstellen

Geben Sie als Nächstes die Rails-Konsole in Ihrem Container ein und verwenden Sie etwas wie

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

Bitte testen Sie es zuerst mit einem Topic, ich hoffe, das hilft!

2 „Gefällt mir“