discourse/app/models/skipped_email_log.rb
2023-01-09 14:14:59 +00:00

97 lines
2.7 KiB
Ruby

# frozen_string_literal: true
class SkippedEmailLog < ActiveRecord::Base
belongs_to :email_log
belongs_to :user
belongs_to :post
has_one :topic, through: :post
validates :email_type, :to_address, :reason_type, presence: true
validates :custom_reason, presence: true, if: -> { is_custom? }
validates :custom_reason, absence: true, if: -> { !is_custom? }
validate :ensure_valid_reason_type
def self.reason_types
@types ||=
Enum.new(
custom: 1,
exceeded_emails_limit: 2,
exceeded_bounces_limit: 3,
mailing_list_no_echo_mode: 4,
user_email_no_user: 5,
user_email_post_not_found: 6,
user_email_anonymous_user: 7,
user_email_user_suspended_not_pm: 8,
user_email_seen_recently: 9,
user_email_notification_already_read: 10,
user_email_topic_nil: 11,
user_email_post_user_deleted: 12,
user_email_post_deleted: 13,
user_email_user_suspended: 14,
user_email_already_read: 15,
sender_message_blank: 16,
sender_message_to_blank: 17,
sender_text_part_body_blank: 18,
sender_body_blank: 19,
sender_post_deleted: 20,
sender_message_to_invalid: 21,
user_email_access_denied: 22,
sender_topic_deleted: 23,
user_email_no_email: 24,
group_smtp_post_deleted: 25,
group_smtp_topic_deleted: 26,
group_smtp_disabled_for_group: 27,
# you need to add the reason in server.en.yml below the "skipped_email_log" key
# when you add a new enum value
)
end
def reason
if is_custom?
self.custom_reason
else
type = self.reason_type
I18n.t(
"skipped_email_log.#{SkippedEmailLog.reason_types[type]}",
user_id: self.user_id,
post_id: self.post_id,
)
end
end
private
def is_custom?
self.reason_type == self.class.reason_types[:custom]
end
def ensure_valid_reason_type
self.errors.add(:reason_type, :invalid) unless self.class.reason_types[self.reason_type]
end
end
# == Schema Information
#
# Table name: skipped_email_logs
#
# id :bigint not null, primary key
# email_type :string not null
# to_address :string not null
# user_id :integer
# post_id :integer
# reason_type :integer not null
# custom_reason :text
# created_at :datetime not null
# updated_at :datetime not null
#
# Indexes
#
# index_skipped_email_logs_on_created_at (created_at)
# index_skipped_email_logs_on_post_id (post_id)
# index_skipped_email_logs_on_reason_type (reason_type)
# index_skipped_email_logs_on_user_id (user_id)
#