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.
57 lines
1.9 KiB
57 lines
1.9 KiB
# frozen_string_literal: true
|
|
|
|
class TemplatesCloneController < ApplicationController
|
|
load_and_authorize_resource :template, instance_name: :base_template
|
|
|
|
def new
|
|
authorize!(:create, Template)
|
|
|
|
@template = Template.new(name: "#{@base_template.name} (#{I18n.t('clone')})")
|
|
end
|
|
|
|
def create
|
|
ActiveRecord::Associations::Preloader.new(
|
|
records: [@base_template],
|
|
associations: [schema_documents: :preview_images_attachments]
|
|
).call
|
|
|
|
@template = Templates::Clone.call(@base_template, author: current_user,
|
|
name: params.dig(:template, :name),
|
|
folder_name: params[:folder_name])
|
|
|
|
authorize!(:create, @template)
|
|
|
|
if params[:account_id].present? && true_ability.authorize!(:manage, Account.find(params[:account_id]))
|
|
@template.account_id = params[:account_id]
|
|
@template.author = true_user if true_user.account_id == @template.account_id
|
|
@template.folder = @template.account.default_template_folder if @template.account_id != current_account.id
|
|
else
|
|
@template.account = current_account
|
|
end
|
|
|
|
Templates.maybe_assign_access(@template)
|
|
|
|
if @template.save
|
|
Templates::CloneAttachments.call(template: @template, original_template: @base_template)
|
|
|
|
SearchEntries.enqueue_reindex(@template)
|
|
|
|
WebhookUrls.enqueue_events(@template, 'template.created')
|
|
|
|
maybe_redirect_to_template(@template)
|
|
else
|
|
render turbo_stream: turbo_stream.replace(:modal, partial: 'templates_clone/form'), status: :unprocessable_content
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def maybe_redirect_to_template(template)
|
|
if template.account == current_account
|
|
redirect_to(edit_template_path(template))
|
|
else
|
|
redirect_back(fallback_location: root_path, notice: I18n.t('template_has_been_cloned'))
|
|
end
|
|
end
|
|
end
|