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.
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?
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.
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?
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.
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…
This is a pretty unique request, why not consume the api, my feeling is that your own custom sword here will fit way better
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.
このトピックを見つけたばかりで、同じ機能を探しています。
カテゴリ内のすべてのトピックにタイマーを適用する方法を共有していただけますか?すでに数百のドキュメントトピックを作成しましたが、この機能を発見し、遡って適用したいと考えています。
フロントエンドからまだ適用できない場合、API経由で適用する方法についてガイダンスを提供していただけますか?まだAPIにはあまり詳しくありません。
ありがとうございます!
@fhe これを達成するために何をしたか共有していただけますか?
残念ながらメモは取っていませんでした ![]()
免責事項: 私が提案していることを理解しており、Discourseインスタンスのバックアップがあり、その適用方法を知っている場合にのみ、上記を実行してください。私はこれを自分でテストしていないため、調整が必要になる場合があります。
1. 関連するトピックIDを取得する
これは、ID 11 のカテゴリから、削除されておらず、クローズされていないトピックIDを取得します。
SELECT id FROM topics WHERE category_id = 11 AND deleted_at IS NULL AND closed = FALSE ORDER BY id
結果が 3, 6, 12, 24 だと仮定します。
2. トピックタイマーを作成する
次に、コンテナ内のRailsコンソールに入り、次のようなものを使用します。
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
まず1つのトピックでテストしてみてください。お役に立てば幸いです!
