mirror of
https://github.com/discourse/discourse.git
synced 2024-12-01 07:33:37 +08:00
6d72c8ab19
This PR revamps the topic timer UI, using the time shortcut selector from the bookmark modal. * Fixes an issue where the duration of hours/days after last reply or auto delete replies was not enforced to be > 0 * Fixed an issue where the timer dropdown options were not reloaded correctly if the topic status changes in the background (use `MessageBus` to publish topic state in the open/close timer jobs) * Moved the duration input and the "based on last post" option from the `future-date-input` component, as it was only used for topic timers. Also moved out the notice that is displayed which was also only relevant for topic timers.
39 lines
1.1 KiB
Ruby
39 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Jobs
|
|
class OpenTopic < ::Jobs::TopicTimerBase
|
|
def execute_timer_action(topic_timer, topic)
|
|
user = topic_timer.user
|
|
|
|
if !Guardian.new(user).can_open_topic?(topic) || topic.open?
|
|
topic_timer.destroy!
|
|
topic.reload
|
|
|
|
topic.inherit_auto_close_from_category(timer_type: :close)
|
|
|
|
return
|
|
end
|
|
|
|
# guards against reopening a topic too early if the topic has
|
|
# been auto closed because of reviewables/reports, this will
|
|
# just update the existing topic timer and push it down the line
|
|
if topic.auto_close_threshold_reached?
|
|
topic.set_or_create_timer(
|
|
TopicTimer.types[:open],
|
|
SiteSetting.num_hours_to_close_topic,
|
|
by_user: Discourse.system_user
|
|
)
|
|
else
|
|
|
|
# autoclosed, false is just another way of saying open.
|
|
# this handles deleting the topic timer as wel, see TopicStatusUpdater
|
|
topic.update_status('autoclosed', false, user)
|
|
end
|
|
|
|
topic.inherit_auto_close_from_category(timer_type: :close)
|
|
|
|
MessageBus.publish("/topic/#{topic.id}", reload_topic: true)
|
|
end
|
|
end
|
|
end
|