Files
docuseal/app/controllers/templates_recipients_controller.rb
T

71 lines
2.1 KiB
Ruby
Raw Normal View History

2024-09-06 19:30:49 +03:00
# frozen_string_literal: true
class TemplatesRecipientsController < ApplicationController
load_and_authorize_resource :template
def create
authorize!(:update, @template)
@template.submitters =
submitters_params.map { |s| s.reject { |_, v| v.is_a?(String) && v.blank? } }
2025-07-30 10:22:38 +03:00
if @template.submitters.each_with_index.all? { |s, index| s['order'] == index }
@template.submitters.each { |s| s.delete('order') }
end
2024-09-06 19:30:49 +03:00
@template.save!
render json: { submitters: @template.submitters }
end
private
def submitters_params
2024-12-19 17:17:34 +02:00
permit_params = { submitters: [%i[name uuid is_requester optional_invite_by_uuid
2026-02-20 12:27:39 +02:00
invite_by_uuid invite_via_field_uuid linked_to_uuid email option order]] }
2024-12-19 17:17:34 +02:00
params.require(:template).permit(permit_params).fetch(:submitters, {}).values.filter_map do |s|
2024-09-06 19:30:49 +03:00
next if s[:uuid].blank?
2024-12-19 17:17:34 +02:00
if s[:is_requester] == '1' && s[:invite_by_uuid].blank? && s[:optional_invite_by_uuid].blank?
2024-09-06 19:30:49 +03:00
s[:is_requester] = true
else
s.delete(:is_requester)
end
2025-07-30 10:22:38 +03:00
s[:order] = s[:order].to_i if s[:order].present?
2024-09-12 17:31:37 +03:00
s.delete(:invite_by_uuid) if s[:invite_by_uuid].blank?
2024-12-19 17:17:34 +02:00
s.delete(:optional_invite_by_uuid) if s[:optional_invite_by_uuid].blank?
2026-02-20 12:27:39 +02:00
s.delete(:invite_via_field_uuid) if s[:invite_via_field_uuid].blank?
2024-09-12 17:31:37 +03:00
2024-12-19 17:17:34 +02:00
normalize_option_value(s)
end
end
2024-09-06 19:30:49 +03:00
2024-12-19 17:17:34 +02:00
def normalize_option_value(attrs)
option = attrs.delete(:option)
if option.present?
case option
when 'is_requester'
attrs[:is_requester] = true
when 'not_set'
attrs.delete(:is_requester)
attrs.delete(:email)
attrs.delete(:linked_to_uuid)
attrs.delete(:invite_by_uuid)
2026-02-20 12:27:39 +02:00
attrs.delete(:invite_via_field_uuid)
2024-12-19 17:17:34 +02:00
attrs.delete(:optional_invite_by_uuid)
when /\Alinked_to_(.*)\z/
attrs[:linked_to_uuid] = ::Regexp.last_match(-1)
when /\Aoptional_invite_by_(.*)\z/
attrs[:optional_invite_by_uuid] = ::Regexp.last_match(-1)
when /\Ainvite_by_(.*)\z/
attrs[:invite_by_uuid] = ::Regexp.last_match(-1)
end
2024-09-06 19:30:49 +03:00
end
2024-12-19 17:17:34 +02:00
attrs
2024-09-06 19:30:49 +03:00
end
end