74 Zeilen
1,8 KiB
Ruby
74 Zeilen
1,8 KiB
Ruby
class CustomWizard::TransferController < ::ApplicationController
|
|
before_action :ensure_logged_in
|
|
before_action :ensure_admin
|
|
skip_before_action :check_xhr, :only => [:export]
|
|
|
|
def index
|
|
end
|
|
|
|
def export
|
|
wizards = params['wizards']
|
|
wizard_objects = []
|
|
|
|
if wizards.nil?
|
|
render json: { error: I18n.t('wizard.export.error.select_one') }
|
|
return
|
|
end
|
|
|
|
wizards.each do |w|
|
|
wizard_objects.push(PluginStore.get('custom_wizard', w.tr('-', '_')))
|
|
end
|
|
|
|
send_data wizard_objects.to_json,
|
|
type: "application/json",
|
|
disposition: 'attachment',
|
|
filename: 'wizards.json'
|
|
end
|
|
|
|
def import
|
|
file = File.read(params['file'].tempfile)
|
|
|
|
if file.nil?
|
|
render json: { error: I18n.t('wizard.import.error.no_file') }
|
|
return
|
|
end
|
|
|
|
fileSize = file.size
|
|
maxFileSize = 512 * 1024
|
|
|
|
if maxFileSize < fileSize
|
|
render json: { error: I18n.t('wizard.import.error.file_large') }
|
|
return
|
|
end
|
|
|
|
begin
|
|
jsonObject = JSON.parse file
|
|
rescue JSON::ParserError
|
|
render json: { error: I18n.t('wizard.import.error.invalid_json') }
|
|
return
|
|
end
|
|
|
|
countValid = 0
|
|
success_ids = []
|
|
failed_ids = []
|
|
|
|
jsonObject.each do |o|
|
|
if !CustomWizard::Template.new(o)
|
|
failed_ids.push o['id']
|
|
next
|
|
end
|
|
|
|
countValid += 1
|
|
pluginStoreEntry = PluginStore.new 'custom_wizard'
|
|
saved = pluginStoreEntry.set(o['id'], o) unless pluginStoreEntry.get(o['id'])
|
|
success_ids.push o['id'] if !!saved
|
|
failed_ids.push o['id'] if !saved
|
|
end
|
|
|
|
if countValid == 0
|
|
render json: { error: I18n.t('wizard.import.error.no_valid_wizards') }
|
|
else
|
|
render json: { success: success_ids, failed: failed_ids }
|
|
end
|
|
end
|
|
end
|