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