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.
		
		
		
		
		
			
		
			
				
					
					
						
							75 lines
						
					
					
						
							3.0 KiB
						
					
					
				
			
		
		
	
	
							75 lines
						
					
					
						
							3.0 KiB
						
					
					
				| # frozen_string_literal: true
 | |
| 
 | |
| module ReplaceEmailVariables
 | |
|   TEMPLATE_NAME = '{{template.name}}'
 | |
|   TEMPLATE_ID = '{{template.id}}'
 | |
|   SUBMITTER_LINK = '{{submitter.link}}'
 | |
|   ACCOUNT_NAME = '{{account.name}}'
 | |
|   SENDER_NAME = '{{sender.name}}'
 | |
|   SENDER_EMAIL = '{{sender.email}}'
 | |
|   SUBMITTER_EMAIL = '{{submitter.email}}'
 | |
|   SUBMITTER_NAME = '{{submitter.name}}'
 | |
|   SUBMITTER_ID = '{{submitter.id}}'
 | |
|   SUBMITTER_SLUG = '{{submitter.slug}}'
 | |
|   SUBMISSION_LINK = '{{submission.link}}'
 | |
|   SUBMISSION_ID = '{{submission.id}}'
 | |
|   SUBMISSION_SUBMITTERS = '{{submission.submitters}}'
 | |
|   DOCUMENTS_LINKS = '{{documents.links}}'
 | |
|   DOCUMENTS_LINK = '{{documents.link}}'
 | |
| 
 | |
|   module_function
 | |
| 
 | |
|   # rubocop:disable Metrics
 | |
|   def call(text, submitter:, tracking_event_type: 'click_email', sig: nil)
 | |
|     text = text.gsub(TEMPLATE_NAME) { submitter.template.name }
 | |
|     text = text.gsub(TEMPLATE_ID) { submitter.template.id }
 | |
|     text = text.gsub(SUBMITTER_ID) { submitter.id }
 | |
|     text = text.gsub(SUBMITTER_SLUG) { submitter.slug }
 | |
|     text = text.gsub(SUBMISSION_ID) { submitter.submission.id }
 | |
|     text = text.gsub(SUBMITTER_EMAIL) { submitter.email }
 | |
|     text = text.gsub(SUBMITTER_NAME) { submitter.name || submitter.email || submitter.phone }
 | |
|     text = text.gsub(SUBMITTER_LINK) { build_submitter_link(submitter, tracking_event_type) }
 | |
|     text = text.gsub(SUBMISSION_LINK) do
 | |
|       submitter.submission ? build_submission_link(submitter.submission) : ''
 | |
|     end
 | |
|     text = text.gsub(SUBMISSION_SUBMITTERS) { build_submission_submitters(submitter.submission) }
 | |
|     text = text.gsub(DOCUMENTS_LINKS) { build_documents_links_text(submitter, sig) }
 | |
|     text = text.gsub(DOCUMENTS_LINK) { build_documents_links_text(submitter, sig) }
 | |
|     text = text.gsub(ACCOUNT_NAME) { submitter.submission.account.name }
 | |
|     text = text.gsub(SENDER_NAME) { submitter.submission.created_by_user&.full_name }
 | |
| 
 | |
|     text.gsub(SENDER_EMAIL) { submitter.submission.created_by_user&.email.to_s.sub(/\+\w+@/, '@') }
 | |
|   end
 | |
|   # rubocop:enable Metrics
 | |
| 
 | |
|   def build_documents_links_text(submitter, sig = nil)
 | |
|     Rails.application.routes.url_helpers.submissions_preview_url(
 | |
|       submitter.submission.slug, { sig:, **Docuseal.default_url_options }.compact
 | |
|     )
 | |
|   end
 | |
| 
 | |
|   def build_submitter_link(submitter, tracking_event_type)
 | |
|     if tracking_event_type == 'click_email'
 | |
|       Rails.application.routes.url_helpers.submit_form_url(
 | |
|         slug: submitter.slug,
 | |
|         t: SubmissionEvents.build_tracking_param(submitter, 'click_email'),
 | |
|         **Docuseal.default_url_options
 | |
|       )
 | |
|     else
 | |
|       Rails.application.routes.url_helpers.submit_form_url(
 | |
|         slug: submitter.slug,
 | |
|         c: SubmissionEvents.build_tracking_param(submitter, 'click_sms'),
 | |
|         **Docuseal.default_url_options
 | |
|       )
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def build_submission_link(submission)
 | |
|     Rails.application.routes.url_helpers.submission_url(submission, **Docuseal.default_url_options)
 | |
|   end
 | |
| 
 | |
|   def build_submission_submitters(submission)
 | |
|     submission.submitters.order(:completed_at).map { |e| e.name || e.email || e.phone }.join(', ')
 | |
|   end
 | |
| end
 |