mirror of https://github.com/docusealco/docuseal
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							83 lines
						
					
					
						
							2.8 KiB
						
					
					
				
			
		
		
	
	
							83 lines
						
					
					
						
							2.8 KiB
						
					
					
				# frozen_string_literal: true
 | 
						|
 | 
						|
class SubmittersController < ApplicationController
 | 
						|
  load_and_authorize_resource :submitter, only: %i[edit update]
 | 
						|
 | 
						|
  def edit
 | 
						|
    @submitter_email_message =
 | 
						|
      if @submitter.preferences['email_message_uuid'].present?
 | 
						|
        @submitter.account.email_messages.find_by(uuid: @submitter.preferences['email_message_uuid'])
 | 
						|
      end
 | 
						|
  end
 | 
						|
 | 
						|
  def update
 | 
						|
    submission = @submitter.submission
 | 
						|
 | 
						|
    if @submitter.submission_events.exists?(event_type: 'start_form') || submission.archived_at? || submission.expired?
 | 
						|
      return redirect_back fallback_location: submission_path(submission), alert: I18n.t('submitter_cannot_be_updated')
 | 
						|
    end
 | 
						|
 | 
						|
    if submitter_params.values.all?(&:blank?)
 | 
						|
      return redirect_back fallback_location: submission_path(submission),
 | 
						|
                           alert: I18n.t('at_least_one_field_must_be_filled')
 | 
						|
    end
 | 
						|
 | 
						|
    if params[:is_custom_message] != '1'
 | 
						|
      params.delete(:subject)
 | 
						|
      params.delete(:body)
 | 
						|
    end
 | 
						|
 | 
						|
    submitter_preferences = Submitters.normalize_preferences(@submitter.account, current_user, params)
 | 
						|
 | 
						|
    if submitter_preferences.key?('email_message_uuid')
 | 
						|
      @submitter.preferences['email_message_uuid'] = submitter_preferences['email_message_uuid']
 | 
						|
    end
 | 
						|
 | 
						|
    assign_submitter_attrs(@submitter, submitter_params)
 | 
						|
 | 
						|
    if @submitter.save
 | 
						|
      maybe_resend_email_sms(@submitter, params)
 | 
						|
 | 
						|
      SearchEntries.enqueue_reindex(@submitter)
 | 
						|
 | 
						|
      redirect_back fallback_location: submission_path(submission), notice: I18n.t('changes_have_been_saved')
 | 
						|
    else
 | 
						|
      redirect_back fallback_location: submission_path(submission), alert: I18n.t('unable_to_save')
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def maybe_resend_email_sms(submitter, params)
 | 
						|
    if params[:send_email] == '1' && submitter.email.present?
 | 
						|
      is_sent_recently = Docuseal.multitenant? &&
 | 
						|
                         EmailEvent.exists?(email: submitter.email,
 | 
						|
                                            tag: 'submitter_invitation',
 | 
						|
                                            emailable: submitter,
 | 
						|
                                            event_type: 'send',
 | 
						|
                                            created_at: 4.hours.ago..Time.current)
 | 
						|
 | 
						|
      SendSubmitterInvitationEmailJob.perform_async('submitter_id' => submitter.id) unless is_sent_recently
 | 
						|
    end
 | 
						|
 | 
						|
    return if submitter.phone.blank?
 | 
						|
    return unless params[:send_sms] == '1'
 | 
						|
 | 
						|
    SendSubmitterInvitationSmsJob.perform_async('submitter_id' => submitter.id)
 | 
						|
  end
 | 
						|
 | 
						|
  def assign_submitter_attrs(submitter, attrs)
 | 
						|
    submitter.phone = attrs[:phone].to_s.gsub(/[^0-9+]/, '') if attrs.key?(:phone)
 | 
						|
 | 
						|
    submitter.email = Submissions.normalize_email(attrs[:email]) if attrs.key?(:email)
 | 
						|
 | 
						|
    submitter.name = attrs[:name] if attrs.key?(:name)
 | 
						|
 | 
						|
    submitter
 | 
						|
  end
 | 
						|
 | 
						|
  def submitter_params
 | 
						|
    params.require(:submitter).permit(:email, :name, :phone).transform_values(&:strip)
 | 
						|
  end
 | 
						|
end
 |