DEV: Drop duration column from topic timers (#13543)

The duration column has been ignored since the commit
4af77f1e38
for topic_timers, we use duration_minutes instead.

Also removing the duration key from Topic.set_or_create_timer. The only
plugin to use this was discourse-solved, which doesn't use it any
longer
since
c722b94a97
This commit is contained in:
Martin Brennan 2021-06-29 09:27:12 +10:00 committed by GitHub
parent 03338f9086
commit d098f51ad3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 24 deletions

View File

@ -1319,19 +1319,13 @@ class Topic < ActiveRecord::Base
# * by_user: User who is setting the topic's status update. # * by_user: User who is setting the topic's status update.
# * based_on_last_post: True if time should be based on timestamp of the last post. # * based_on_last_post: True if time should be based on timestamp of the last post.
# * category_id: Category that the update will apply to. # * category_id: Category that the update will apply to.
# * duration: TODO(2021-06-01): DEPRECATED - do not use
# * duration_minutes: The duration of the timer in minutes, which is used if the timer is based # * duration_minutes: The duration of the timer in minutes, which is used if the timer is based
# on the last post or if the timer type is delete_replies. # on the last post or if the timer type is delete_replies.
# * silent: Affects whether the close topic timer status change will be silent or not. # * silent: Affects whether the close topic timer status change will be silent or not.
def set_or_create_timer(status_type, time, by_user: nil, based_on_last_post: false, category_id: SiteSetting.uncategorized_category_id, duration: nil, duration_minutes: nil, silent: nil) def set_or_create_timer(status_type, time, by_user: nil, based_on_last_post: false, category_id: SiteSetting.uncategorized_category_id, duration_minutes: nil, silent: nil)
return delete_topic_timer(status_type, by_user: by_user) if time.blank? && duration_minutes.blank? && duration.blank? return delete_topic_timer(status_type, by_user: by_user) if time.blank? && duration_minutes.blank?
duration_minutes = duration_minutes ? duration_minutes.to_i : 0 duration_minutes = duration_minutes ? duration_minutes.to_i : 0
# TODO(2021-06-01): deprecated - remove this when plugins calling set_or_create_timer
# have been fixed to use duration_minutes
duration = duration ? duration.to_i : 0
public_topic_timer = !!TopicTimer.public_types[status_type] public_topic_timer = !!TopicTimer.public_types[status_type]
topic_timer_options = { topic: self, public_type: public_topic_timer } topic_timer_options = { topic: self, public_type: public_topic_timer }
topic_timer_options.merge!(user: by_user) unless public_topic_timer topic_timer_options.merge!(user: by_user) unless public_topic_timer
@ -1347,29 +1341,15 @@ class Topic < ActiveRecord::Base
end end
if topic_timer.based_on_last_post if topic_timer.based_on_last_post
if duration > 0 || duration_minutes > 0 if duration_minutes > 0
last_post_created_at = self.ordered_posts.last.present? ? self.ordered_posts.last.created_at : time_now last_post_created_at = self.ordered_posts.last.present? ? self.ordered_posts.last.created_at : time_now
# TODO(2021-06-01): deprecated - remove this when plugins calling set_or_create_timer
# have been fixed to use duration_minutes
if duration > 0
duration_minutes = duration * 60
end
topic_timer.duration_minutes = duration_minutes topic_timer.duration_minutes = duration_minutes
topic_timer.execute_at = last_post_created_at + duration_minutes.minutes topic_timer.execute_at = last_post_created_at + duration_minutes.minutes
topic_timer.created_at = last_post_created_at topic_timer.created_at = last_post_created_at
end end
elsif topic_timer.status_type == TopicTimer.types[:delete_replies] elsif topic_timer.status_type == TopicTimer.types[:delete_replies]
if duration > 0 || duration_minutes > 0 if duration_minutes > 0
first_reply_created_at = (self.ordered_posts.where("post_number > 1").minimum(:created_at) || time_now) first_reply_created_at = (self.ordered_posts.where("post_number > 1").minimum(:created_at) || time_now)
# TODO(2021-06-01): deprecated - remove this when plugins calling set_or_create_timer
# have been fixed to use duration_minutes
if duration > 0
duration_minutes = duration * 60 * 24
end
topic_timer.duration_minutes = duration_minutes topic_timer.duration_minutes = duration_minutes
topic_timer.execute_at = first_reply_created_at + duration_minutes.minutes topic_timer.execute_at = first_reply_created_at + duration_minutes.minutes
topic_timer.created_at = first_reply_created_at topic_timer.created_at = first_reply_created_at

View File

@ -0,0 +1,17 @@
# frozen_string_literal: true
class DropDurationColumnFromTopicTimers < ActiveRecord::Migration[6.1]
DROPPED_COLUMNS ||= {
topic_timers: %i{duration}
}
def up
DROPPED_COLUMNS.each do |table, columns|
Migration::ColumnDropper.execute_drop(table, columns)
end
end
def down
add_column :topic_timers, :duration, :string
end
end