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.
74 lines
2.1 KiB
74 lines
2.1 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:)
|
|
|
|
WebhookUrls.enqueue_events(@template, 'template.created')
|
|
|
|
SearchEntries.enqueue_reindex(@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, '.*')
|
|
|
|
Templates.maybe_assign_access(template)
|
|
|
|
template.save!
|
|
|
|
template
|
|
end
|
|
|
|
def create_file_params_from_url
|
|
tempfile = Tempfile.new
|
|
tempfile.binmode
|
|
tempfile.write(DownloadUtils.call(params[:url]).body)
|
|
tempfile.rewind
|
|
|
|
filename = URI.decode_www_form_component(params[:filename]) if params[:filename].present?
|
|
filename ||= File.basename(URI.decode_www_form_component(params[:url]))
|
|
|
|
file = ActionDispatch::Http::UploadedFile.new(
|
|
tempfile:,
|
|
filename:,
|
|
type: Marcel::MimeType.for(tempfile)
|
|
)
|
|
|
|
{ files: [file] }
|
|
end
|
|
end
|