otwarchive-symphonyarchive/app/models/preference.rb

49 lines
1.5 KiB
Ruby
Raw Permalink Normal View History

2026-03-11 22:22:11 +00:00
class Preference < ApplicationRecord
# Ignore the email_visible and date_of_birth_visible fields until they can be deleted:
self.ignored_columns = [:email_visible, :date_of_birth_visible]
belongs_to :user
belongs_to :skin
belongs_to :locale, foreign_key: "preferred_locale"
validates :work_title_format,
format: {
with: /\A[a-zA-Z0-9_\-,\. ]+\z/,
message: ts("can only contain letters, numbers, spaces, and some limited punctuation (comma, period, dash, underscore).")
}
validate :can_use_skin, if: :skin_id_changed?
before_create :set_default_skin
def set_default_skin
self.skin_id = AdminSetting.current.default_skin_id
end
def self.disable_work_skin?(param)
return false if param == "creator"
return true if %w[light disable].include?(param)
return false unless User.current_user.is_a?(User)
User.current_user.try(:preference).try(:disable_work_skins)
end
def can_use_skin
return if skin_id == AdminSetting.default_skin_id ||
(skin.is_a?(Skin) && skin.approved_or_owned_by?(user))
errors.add(:base, "You don't have permission to use that skin!")
end
def locale
$rollout.active?(:set_locale_preference, user) ? super : Locale.default
end
def locale_for_mails
# Use preferred_locale to bypass the second $rollout check
l = Locale.find(preferred_locale)
return I18n.default_locale.to_s unless $rollout.active?(:set_locale_preference, user) && l.email_enabled
l.iso
end
end