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.
76 lines
2.3 KiB
76 lines
2.3 KiB
# frozen_string_literal: true
|
|
|
|
class TemplatesUploadsController < ApplicationController
|
|
load_and_authorize_resource :template, parent: false
|
|
|
|
layout 'plain'
|
|
|
|
def show; end
|
|
|
|
def create
|
|
url_params = create_file_params_from_url if params[:url].present?
|
|
|
|
save_template!(@template, url_params)
|
|
|
|
documents = Templates::CreateAttachments.call(@template, url_params || params, extract_fields: true)
|
|
schema = documents.map { |doc| { attachment_uuid: doc.uuid, name: doc.filename.base } }
|
|
|
|
if @template.fields.blank?
|
|
@template.fields = Templates::ProcessDocument.normalize_attachment_fields(@template, documents)
|
|
|
|
schema.each { |item| item['pending_fields'] = true } if @template.fields.present?
|
|
end
|
|
|
|
@template.update!(schema:)
|
|
|
|
enqueue_template_created_webhooks(@template)
|
|
|
|
redirect_to edit_template_path(@template)
|
|
rescue Templates::CreateAttachments::PdfEncrypted
|
|
render turbo_stream: turbo_stream.append(params[:form_id], html: helpers.tag.prompt_password)
|
|
rescue StandardError => e
|
|
Rollbar.error(e) if defined?(Rollbar)
|
|
|
|
raise if Rails.env.local?
|
|
|
|
redirect_to root_path, alert: I18n.t('unable_to_update_file')
|
|
end
|
|
|
|
private
|
|
|
|
def save_template!(template, url_params)
|
|
template.account = current_account
|
|
template.author = current_user
|
|
template.folder = TemplateFolders.find_or_create_by_name(current_user, params[:folder_name])
|
|
template.name = File.basename((url_params || params)[:files].first.original_filename, '.*')
|
|
|
|
template.save!
|
|
|
|
template
|
|
end
|
|
|
|
def create_file_params_from_url
|
|
tempfile = Tempfile.new
|
|
tempfile.binmode
|
|
tempfile.write(DownloadUtils.call(params[:url]).body)
|
|
tempfile.rewind
|
|
|
|
file = ActionDispatch::Http::UploadedFile.new(
|
|
tempfile:,
|
|
filename: File.basename(
|
|
URI.decode_www_form_component(params[:filename].presence || params[:url]), '.*'
|
|
),
|
|
type: Marcel::MimeType.for(tempfile)
|
|
)
|
|
|
|
{ files: [file] }
|
|
end
|
|
|
|
def enqueue_template_created_webhooks(template)
|
|
WebhookUrls.for_account_id(template.account_id, 'template.created').each do |webhook_url|
|
|
SendTemplateCreatedWebhookRequestJob.perform_async('template_id' => template.id,
|
|
'webhook_url_id' => webhook_url.id)
|
|
end
|
|
end
|
|
end
|