app/controllers/admin/exports_controller.rb
class Admin::ExportsController < Admin::AdminController
def index; end
def download
filters = (filter_params || {}).merge({
:csv_separator =>
if filter_params && filter_params[:csv_separator] &&
filter_params[:csv_separator].downcase.strip.to_sym == :semicolon
:semicolon
else
:comma
end
})
case params[:data_type]
when 'Names'
result = Species::TaxonConceptsNamesExport.new(filters).export
when 'SynonymsAndTradeNames'
result = Species::SynonymsAndTradeNamesExport.new(filters).export
when 'CommonNames'
result = Species::CommonNamesExport.new(filters).export
when 'OrphanedTaxonConcepts'
result = Species::OrphanedTaxonConceptsExport.new(filters).export
when 'SpeciesReferenceOutput'
result = Species::SpeciesReferenceOutputExport.new(filters).export
when 'StandardReferenceOutput'
result = Species::StandardReferenceOutputExport.new(filters).export
when 'Distributions'
result = Species::TaxonConceptsDistributionsExport.new(filters).export
when 'Documents'
result = Species::DocumentsExport.new(filters).export
when 'IdMaterials'
result = Species::IdManualDocumentsExport.new.export
when 'IucnMappings'
result = Species::IucnMappingsExport.new.export
when 'CmsMappings'
result = Species::CmsMappingsExport.new.export
when 'CitesProcesses'
result = Species::CitesProcessesExport.new.export
end
if result.is_a?(Array)
# this was added in order to prevent download managers from
# failing when chunked_transfer_encoding is set in nginx (1.8.1)
file_path = Pathname.new(result[0]).realpath
response.headers['Content-Length'] = File.size(file_path).to_s
send_file file_path, result[1]
else
redirect_to admin_exports_path, :notice => "There are no #{params[:data_type]} to download."
end
end
private
def filter_params
params[:filters].permit!
rescue NoMethodError
{}
end
end