Merge branch 'master' into glitch-soc/merge-upstream
Conflicts: - `app/serializers/rest/account_serializer.rb`: Upstream added code too close to glitch-soc-specific followers-hiding code. Ported upstream changes.
This commit is contained in:
@@ -13,15 +13,14 @@
|
||||
# ends_at :datetime
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# published_at :datetime
|
||||
#
|
||||
|
||||
class Announcement < ApplicationRecord
|
||||
after_commit :queue_publish, on: :create
|
||||
|
||||
scope :unpublished, -> { where(published: false) }
|
||||
scope :published, -> { where(published: true) }
|
||||
scope :without_muted, ->(account) { joins("LEFT OUTER JOIN announcement_mutes ON announcement_mutes.announcement_id = announcements.id AND announcement_mutes.account_id = #{account.id}").where('announcement_mutes.id IS NULL') }
|
||||
scope :chronological, -> { order(Arel.sql('COALESCE(announcements.starts_at, announcements.scheduled_at, announcements.created_at) ASC')) }
|
||||
scope :chronological, -> { order(Arel.sql('COALESCE(announcements.starts_at, announcements.scheduled_at, announcements.published_at, announcements.created_at) ASC')) }
|
||||
|
||||
has_many :announcement_mutes, dependent: :destroy
|
||||
has_many :announcement_reactions, dependent: :destroy
|
||||
@@ -31,8 +30,15 @@ class Announcement < ApplicationRecord
|
||||
validates :ends_at, presence: true, if: -> { starts_at.present? }
|
||||
|
||||
before_validation :set_all_day
|
||||
before_validation :set_starts_at, on: :create
|
||||
before_validation :set_ends_at, on: :create
|
||||
before_validation :set_published, on: :create
|
||||
|
||||
def publish!
|
||||
update!(published: true, published_at: Time.now.utc, scheduled_at: nil)
|
||||
end
|
||||
|
||||
def unpublish!
|
||||
update!(published: false, scheduled_at: nil)
|
||||
end
|
||||
|
||||
def time_range?
|
||||
starts_at.present? && ends_at.present?
|
||||
@@ -71,15 +77,10 @@ class Announcement < ApplicationRecord
|
||||
self.all_day = false if starts_at.blank? || ends_at.blank?
|
||||
end
|
||||
|
||||
def set_starts_at
|
||||
self.starts_at = starts_at.change(hour: 0, min: 0, sec: 0) if all_day? && starts_at.present?
|
||||
end
|
||||
def set_published
|
||||
return unless scheduled_at.blank? || scheduled_at.past?
|
||||
|
||||
def set_ends_at
|
||||
self.ends_at = ends_at.change(hour: 23, min: 59, sec: 59) if all_day? && ends_at.present?
|
||||
end
|
||||
|
||||
def queue_publish
|
||||
PublishScheduledAnnouncementWorker.perform_async(id) if scheduled_at.blank?
|
||||
self.published = true
|
||||
self.published_at = Time.now.utc
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user