2023-09-14 01:43:08 +03:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
|
|
class TemplatesUploadsController < ApplicationController
|
2023-09-17 00:45:57 +03:00
|
|
|
load_and_authorize_resource :template, parent: false
|
|
|
|
|
|
2023-10-28 23:07:18 +03:00
|
|
|
layout 'plain'
|
|
|
|
|
|
|
|
|
|
def show; end
|
|
|
|
|
|
2023-09-14 01:43:08 +03:00
|
|
|
def create
|
2023-10-28 23:07:18 +03:00
|
|
|
url_params = create_file_params_from_url if params[:url].present?
|
|
|
|
|
|
2023-09-19 19:33:34 +03:00
|
|
|
@template.account = current_account
|
2023-09-17 00:45:57 +03:00
|
|
|
@template.author = current_user
|
2023-09-22 02:20:38 +03:00
|
|
|
@template.folder = TemplateFolders.find_or_create_by_name(current_user, params[:folder_name])
|
2023-10-28 23:07:18 +03:00
|
|
|
@template.name = File.basename((url_params || params)[:files].first.original_filename, '.*')
|
2023-09-14 01:43:08 +03:00
|
|
|
|
2023-09-17 00:45:57 +03:00
|
|
|
@template.save!
|
2023-09-14 01:43:08 +03:00
|
|
|
|
2023-10-28 23:07:18 +03:00
|
|
|
documents = Templates::CreateAttachments.call(@template, url_params || params)
|
2023-09-14 01:43:08 +03:00
|
|
|
|
|
|
|
|
schema = documents.map { |doc| { attachment_uuid: doc.uuid, name: doc.filename.base } }
|
|
|
|
|
|
2023-09-17 00:45:57 +03:00
|
|
|
@template.update!(schema:)
|
2023-09-14 01:43:08 +03:00
|
|
|
|
2023-09-17 00:45:57 +03:00
|
|
|
redirect_to edit_template_path(@template)
|
2023-10-28 23:07:18 +03:00
|
|
|
rescue StandardError => e
|
|
|
|
|
Rollbar.error(e) if defined?(Rollbar)
|
|
|
|
|
|
|
|
|
|
redirect_to root_path, alert: 'Unable to upload file'
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
|
|
def create_file_params_from_url
|
|
|
|
|
tempfile = Tempfile.new
|
|
|
|
|
tempfile.binmode
|
2023-11-08 15:25:10 +02:00
|
|
|
tempfile.write(conn.get(Addressable::URI.parse(params[:url]).display_uri.to_s).body)
|
2023-10-28 23:07:18 +03:00
|
|
|
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 conn
|
|
|
|
|
Faraday.new do |faraday|
|
|
|
|
|
faraday.response :follow_redirects
|
|
|
|
|
end
|
2023-09-14 01:43:08 +03:00
|
|
|
end
|
|
|
|
|
end
|