diff --git a/app/controllers/plans_controller.rb b/app/controllers/plans_controller.rb index 2a55a14..25216b7 100644 --- a/app/controllers/plans_controller.rb +++ b/app/controllers/plans_controller.rb @@ -367,8 +367,7 @@ @exported_plan = ExportedPlan.new.tap do |ep| ep.plan = @plan ep.user = current_user - #ep.format = request.format.try(:symbol) - ep.format = request.format.to_sym + ep.format = params[:format].to_sym plan_settings = @plan.settings(:export) Settings::Template::DEFAULT_SETTINGS.each do |key, value| @@ -376,27 +375,30 @@ end end - @exported_plan.save! # FIXME: handle invalid request types without erroring? - file_name = @exported_plan.project_name + begin + @exported_plan.save! + file_name = @exported_plan.project_name - respond_to do |format| - format.html - format.xml - format.json - format.csv { send_data @exported_plan.as_csv, filename: "#{file_name}.csv" } - format.text { send_data @exported_plan.as_txt, filename: "#{file_name}.txt" } - format.docx { headers["Content-Disposition"] = "attachment; filename=\"#{file_name}.docx\""} - format.pdf do - @formatting = @plan.settings(:export).formatting - render pdf: file_name, - margin: @formatting[:margin], - footer: { - center: _('This document was generated by %{application_name}') % {application_name: Rails.configuration.branding[:application][:name]}, - font_size: 8, - spacing: (@formatting[:margin][:bottom] / 2) - 4, - right: '[page] of [topage]' - } + respond_to do |format| + format.html + format.csv { send_data @exported_plan.as_csv, filename: "#{file_name}.csv" } + format.text { send_data @exported_plan.as_txt, filename: "#{file_name}.txt" } + format.docx { headers["Content-Disposition"] = "attachment; filename=\"#{file_name}.docx\""} + format.pdf do + @formatting = @plan.settings(:export).formatting + render pdf: file_name, + margin: @formatting[:margin], + footer: { + center: _('This document was generated by %{application_name}') % {application_name: Rails.configuration.branding[:application][:name]}, + font_size: 8, + spacing: (@formatting[:margin][:bottom] / 2) - 4, + right: '[page] of [topage]' + } + end end + rescue ActiveRecord::RecordInvalid => e + redirect_to show_export_plan_path(@plan), notice: _('%{format} is not a valid exporting format. Available formats to export are %{available_formats}.') % + {format: params[:format], available_formats: ExportedPlan::VALID_FORMATS.to_s} end elsif !user_signed_in? then respond_to do |format| @@ -404,7 +406,7 @@ end elsif !@plan.editable_by(current_user.id) then respond_to do |format| - format.html { redirect_to projects_url, notice: _('This account does not have access to that plan.') } + format.html { redirect_to plans_path, notice: _('This account does not have access to that plan.') } end end end diff --git a/app/models/exported_plan.rb b/app/models/exported_plan.rb index f1562d7..0ce6426 100644 --- a/app/models/exported_plan.rb +++ b/app/models/exported_plan.rb @@ -9,7 +9,7 @@ belongs_to :plan belongs_to :user - VALID_FORMATS = ['csv', 'html', 'json', 'pdf', 'text', 'xml', 'docx'] + VALID_FORMATS = ['csv', 'html', 'pdf', 'text', 'docx'] validates :format, inclusion: { in: VALID_FORMATS,