mirror of https://github.com/docusealco/docuseal
				
				
				
			
							parent
							
								
									40f5fa4217
								
							
						
					
					
						commit
						e0a297cf81
					
				| @ -0,0 +1,77 @@ | |||||||
|  | # 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 | ||||||
|  | 
 | ||||||
|  |     assign_preferences(@submitter, params) | ||||||
|  |     assign_submitter_attrs(@submitter, submitter_params) | ||||||
|  | 
 | ||||||
|  |     if @submitter.save | ||||||
|  |       if @submitter.preferences['send_email'] || @submitter.preferences['send_sms'] | ||||||
|  |         Submitters.send_signature_requests([@submitter]) | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       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 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 assign_preferences(submitter, attrs) | ||||||
|  |     submitter_preferences = Submitters.normalize_preferences(submitter.account, current_user, attrs) | ||||||
|  | 
 | ||||||
|  |     if submitter_preferences.key?('send_email') | ||||||
|  |       submitter.preferences['send_email'] = submitter_preferences['send_email'] | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     submitter.preferences['send_sms'] = submitter_preferences['send_sms'] if submitter_preferences.key?('send_sms') | ||||||
|  | 
 | ||||||
|  |     if submitter_preferences.key?('email_message_uuid') | ||||||
|  |       submitter.preferences['email_message_uuid'] = submitter_preferences['email_message_uuid'] | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     submitter | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def submitter_params | ||||||
|  |     params.require(:submitter).permit(:email, :name, :phone).transform_values(&:strip) | ||||||
|  |   end | ||||||
|  | end | ||||||
| @ -0,0 +1,29 @@ | |||||||
|  | <%= render 'shared/turbo_modal_large', title: t('edit_recipient') do %> | ||||||
|  |   <div class="px-5 mb-5 mt-4"> | ||||||
|  |     <%= form_for '', url: submitter_path(@submitter), method: :patch, html: { class: 'space-y-4', autocomplete: 'off' }, data: { turbo_frame: :_top } do |f| %> | ||||||
|  |       <div class="grid gap-4"> | ||||||
|  |         <submitter-item class="form-control"> | ||||||
|  |           <submitters-autocomplete data-field="name"> | ||||||
|  |             <%= text_field_tag 'submitter[name]', @submitter.name, autocomplete: 'off', class: 'base-input !h-10 w-full', placeholder: "#{t('name')} (#{t('optional')})", dir: 'auto' %> | ||||||
|  |           </submitters-autocomplete> | ||||||
|  |           <div class="grid md:grid-cols-2 gap-1"> | ||||||
|  |             <submitters-autocomplete data-field="email"> | ||||||
|  |               <%= email_field_tag 'submitter[email]', @submitter.email, autocomplete: 'off', class: 'base-input !h-10 mt-1.5 w-full', placeholder: "#{t('email')} (#{t('optional')})" %> | ||||||
|  |             </submitters-autocomplete> | ||||||
|  |             <submitters-autocomplete data-field="phone"> | ||||||
|  |               <%= telephone_field_tag 'submitter[phone]', @submitter.phone, autocomplete: 'off', pattern: '^\+[0-9\s\-]+$', class: 'base-input !h-10 mt-1.5 w-full', placeholder: "#{t('phone')} (#{t('optional')})", oninvalid: "this.value ? this.setCustomValidity('#{t('use_international_format_1xxx_')}') : ''", oninput: "this.setCustomValidity('')" %> | ||||||
|  |             </submitters-autocomplete> | ||||||
|  |           </div> | ||||||
|  |         </submitter-item> | ||||||
|  |       </div> | ||||||
|  |       <div> | ||||||
|  |         <%= render 'submissions/send_email', f:, template: @submitter.template, submitter: @submitter, resend_email: @submitter.sent_at?, submitter_email_message: @submitter_email_message, disable_save_as_default_template_option: true %> | ||||||
|  |         <%= render 'submissions/send_sms', f:, resend_sms: @submitter.sent_at? %> | ||||||
|  |       </div> | ||||||
|  |       <div class="form-control"> | ||||||
|  |         <%= f.button button_title(title: t('update_recipient'), disabled_with: t('updating')), class: 'base-button' %> | ||||||
|  |       </div> | ||||||
|  |     <% end %> | ||||||
|  |   </div> | ||||||
|  |   <%= content_for(:modal_extra) %> | ||||||
|  | <% end %> | ||||||
					Loading…
					
					
				
		Reference in new issue