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.
40 lines
1.4 KiB
40 lines
1.4 KiB
# frozen_string_literal: true
|
|
|
|
class TemplatesCloneAndReplaceController < ApplicationController
|
|
load_and_authorize_resource :template
|
|
|
|
def create
|
|
return head :unprocessable_content if params[:files].blank?
|
|
|
|
ActiveRecord::Associations::Preloader.new(
|
|
records: [@template],
|
|
associations: [schema_documents: :preview_images_attachments]
|
|
).call
|
|
|
|
cloned_template = Templates::Clone.call(@template, author: current_user)
|
|
cloned_template.name = File.basename(params[:files].first.original_filename, '.*')
|
|
cloned_template.save!
|
|
|
|
documents = Templates::ReplaceAttachments.call(cloned_template, params, extract_fields: true)
|
|
|
|
Templates.maybe_assign_access(cloned_template)
|
|
|
|
cloned_template.save!
|
|
|
|
Templates::CloneAttachments.call(template: cloned_template, original_template: @template,
|
|
excluded_attachment_uuids: documents.map(&:uuid))
|
|
|
|
SearchEntries.enqueue_reindex(cloned_template)
|
|
|
|
respond_to do |f|
|
|
f.html { redirect_to edit_template_path(cloned_template) }
|
|
f.json { render json: { id: cloned_template.id } }
|
|
end
|
|
rescue Templates::CreateAttachments::PdfEncrypted
|
|
respond_to do |f|
|
|
f.html { render turbo_stream: turbo_stream.append(params[:form_id], html: helpers.tag.prompt_password) }
|
|
f.json { render json: { error: 'PDF encrypted', status: 'pdf_encrypted' }, status: :unprocessable_content }
|
|
end
|
|
end
|
|
end
|