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:
Thibaut Girka
2020-01-27 15:46:50 +01:00
38 changed files with 323 additions and 129 deletions

View File

@@ -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