# frozen_string_literal: true class Admin::UserFieldsController < Admin::AdminController def self.columns columns = %i[ name field_type editable description required show_on_profile show_on_user_card position searchable ] DiscoursePluginRegistry.apply_modifier(:admin_user_fields_columns, columns) end def create field = UserField.new(params.require(:user_field).permit(*Admin::UserFieldsController.columns)) field.position = (UserField.maximum(:position) || 0) + 1 field.required = params[:user_field][:required] == "true" update_options(field) json_result(field, serializer: UserFieldSerializer) { field.save } end def index user_fields = UserField.all.includes(:user_field_options).order(:position) render_serialized(user_fields, UserFieldSerializer, root: "user_fields") end def update field_params = params[:user_field] field = UserField.where(id: params.require(:id)).first Admin::UserFieldsController.columns.each do |col| field.public_send("#{col}=", field_params[col]) unless field_params[col].nil? end update_options(field) if field.save if !field.show_on_profile && !field.show_on_user_card DirectoryColumn.where(user_field_id: field.id).destroy_all end render_serialized(field, UserFieldSerializer, root: "user_field") else render_json_error(field) end end def destroy field = UserField.where(id: params.require(:id)).first field.destroy if field.present? render json: success_json end protected def update_options(field) options = params[:user_field][:options] if options.present? UserFieldOption.where(user_field_id: field.id).delete_all field.user_field_options_attributes = options.map { |o| { value: o } }.uniq end end end