The same way we did for banners. We needed to add new translation keys so the labels are displayed in the correct language. I've kept the original `title` and `body` attributes so they can be used in other places. While backporting, we also added the original translations because they hadn't been backported yet.
53 lines
1.2 KiB
Ruby
53 lines
1.2 KiB
Ruby
class AdminNotification < ActiveRecord::Base
|
|
include Notifiable
|
|
|
|
translates :title, touch: true
|
|
translates :body, touch: true
|
|
globalize_accessors
|
|
accepts_nested_attributes_for :translations, allow_destroy: true
|
|
|
|
translation_class.instance_eval do
|
|
validates :title, presence: true
|
|
validates :body, presence: true
|
|
end
|
|
|
|
validates :segment_recipient, presence: true
|
|
validate :validate_segment_recipient
|
|
|
|
before_validation :complete_link_url
|
|
|
|
def list_of_recipients
|
|
UserSegments.send(segment_recipient) if valid_segment_recipient?
|
|
end
|
|
|
|
def valid_segment_recipient?
|
|
segment_recipient && UserSegments.respond_to?(segment_recipient)
|
|
end
|
|
|
|
def draft?
|
|
sent_at.nil?
|
|
end
|
|
|
|
def list_of_recipients_count
|
|
list_of_recipients.try(:count) || 0
|
|
end
|
|
|
|
def deliver
|
|
list_of_recipients.each { |user| Notification.add(user, self) }
|
|
self.update(sent_at: Time.current, recipients_count: list_of_recipients.count)
|
|
end
|
|
|
|
private
|
|
|
|
def validate_segment_recipient
|
|
errors.add(:segment_recipient, :invalid) unless valid_segment_recipient?
|
|
end
|
|
|
|
def complete_link_url
|
|
return unless link.present?
|
|
unless self.link[/\Ahttp:\/\//] || self.link[/\Ahttps:\/\//]
|
|
self.link = "http://#{self.link}"
|
|
end
|
|
end
|
|
end
|