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 curtidas

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 curtida

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 curtidas

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 curtidas

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 curtidas

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 curtida

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 curtidas

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.

Acabei de encontrar este tĂłpico, procurando a mesma funcionalidade.

Alguém consegue compartilhar como posso aplicar um temporizador a todos os tópicos dentro de uma categoria? Já criei centenas de tópicos de Documentação e acabei de descobrir este recurso e quero aplicá-lo retroativamente.

Se ainda não for possível fazer isso pelo front-end, você pode fornecer alguma orientação sobre como fazer isso via API? Ainda não estou muito familiarizado com ela.

Obrigado!

@fhe há alguma chance de você compartilhar o que fez para conseguir isso?

Infelizmente não fiz nenhuma anotação :innocent:

Aviso: Por favor, faça tudo isso apenas se você entender o que estou propondo e se tiver um backup da sua instância do Discourse e souber como aplicá-lo. Eu mesmo não testei isso, então pode ser que precise de alguns ajustes.

1. Obtenha os IDs dos tĂłpicos relevantes

Isso obteria quaisquer IDs de tĂłpicos da categoria com o ID 11 que nĂŁo foram excluĂ­dos e nĂŁo estĂŁo fechados.

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

Vamos dizer que o resultado Ă© 3, 6, 12, 24

2. Crie os timers dos tĂłpicos

Em seguida, entre no console do Rails em seu contĂŞiner e use algo como

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

Por favor, teste primeiro com um tĂłpico, espero que ajude!

2 curtidas