mirror of
https://github.com/discourse/discourse.git
synced 2024-12-24 03:03:43 +08:00
88af23e1ca
This PR modernizes the user fields area of the admin UI. It is largely based on the work on the emoji section.
79 lines
2.4 KiB
Ruby
79 lines
2.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class UserField < ActiveRecord::Base
|
|
include AnonCacheInvalidator
|
|
include HasDeprecatedColumns
|
|
include HasSanitizableFields
|
|
|
|
FLAG_ATTRIBUTES = %w[editable show_on_profile show_on_user_card searchable].freeze
|
|
|
|
deprecate_column :required, drop_from: "3.3"
|
|
self.ignored_columns += %i[field_type]
|
|
|
|
validates_presence_of :description
|
|
validates_presence_of :name, unless: -> { field_type == "confirm" }
|
|
has_many :user_field_options, dependent: :destroy
|
|
has_one :directory_column, dependent: :destroy
|
|
accepts_nested_attributes_for :user_field_options
|
|
|
|
before_save :sanitize_description
|
|
after_create :update_required_fields_version
|
|
after_update :update_required_fields_version, if: -> { saved_change_to_requirement? }
|
|
after_save :queue_index_search
|
|
|
|
scope :public_fields, -> { where(show_on_profile: true).or(where(show_on_user_card: true)) }
|
|
scope :required, -> { not_optional }
|
|
|
|
enum :requirement, { optional: 0, for_all_users: 1, on_signup: 2 }.freeze
|
|
enum :field_type_enum, { text: 0, confirm: 1, dropdown: 2, multiselect: 3 }.freeze
|
|
alias_attribute :field_type, :field_type_enum
|
|
|
|
def self.max_length
|
|
2048
|
|
end
|
|
|
|
def required?
|
|
!optional?
|
|
end
|
|
|
|
def queue_index_search
|
|
Jobs.enqueue(:index_user_fields_for_search, user_field_id: self.id)
|
|
end
|
|
|
|
private
|
|
|
|
def update_required_fields_version
|
|
return if !for_all_users?
|
|
|
|
UserRequiredFieldsVersion.create
|
|
Discourse.request_refresh!
|
|
end
|
|
|
|
def sanitize_description
|
|
if description_changed?
|
|
self.description = sanitize_field(self.description, additional_attributes: ["target"])
|
|
end
|
|
end
|
|
end
|
|
|
|
# == Schema Information
|
|
#
|
|
# Table name: user_fields
|
|
#
|
|
# id :integer not null, primary key
|
|
# name :string not null
|
|
# created_at :datetime not null
|
|
# updated_at :datetime not null
|
|
# editable :boolean default(FALSE), not null
|
|
# description :string not null
|
|
# required :boolean default(TRUE), not null
|
|
# show_on_profile :boolean default(FALSE), not null
|
|
# position :integer default(0)
|
|
# show_on_user_card :boolean default(FALSE), not null
|
|
# external_name :string
|
|
# external_type :string
|
|
# searchable :boolean default(FALSE), not null
|
|
# requirement :integer default("optional"), not null
|
|
# field_type_enum :integer not null
|
|
#
|