diff --git a/app/controllers/bulkrax/exporters_controller.rb b/app/controllers/bulkrax/exporters_controller.rb index 324dc776..1c89a55c 100644 --- a/app/controllers/bulkrax/exporters_controller.rb +++ b/app/controllers/bulkrax/exporters_controller.rb @@ -51,9 +51,12 @@ def create if @exporter.save if params[:commit] == 'Create and Export' # Use perform now for export - Bulkrax::ExporterJob.perform_now(@exporter.id) + Bulkrax::ExporterJob.perform_later(@exporter.id) + message = 'Exporter was successfully created. A download link will appear once it completes.' + else + message = 'Exporter was successfully created.' end - redirect_to exporters_path, notice: 'Exporter was successfully created.' + redirect_to exporters_path, notice: message else render :new end @@ -63,8 +66,13 @@ def create def update field_mapping_params if @exporter.update(exporter_params) - Bulkrax::ExporterJob.perform_now(@exporter.id) if params[:commit] == 'Update and Re-Export All Items' - redirect_to exporters_path, notice: 'Exporter was successfully updated.' + if params[:commit] == 'Update and Re-Export All Items' + Bulkrax::ExporterJob.perform_later(@exporter.id) + message = 'Exporter was successfully updated. A download link will appear once it completes.' + else + 'Exporter was successfully updated.' + end + redirect_to exporters_path, notice: message else render :edit end diff --git a/app/jobs/bulkrax/exporter_job.rb b/app/jobs/bulkrax/exporter_job.rb index 5dfc1d90..2f8572b3 100644 --- a/app/jobs/bulkrax/exporter_job.rb +++ b/app/jobs/bulkrax/exporter_job.rb @@ -8,6 +8,7 @@ def perform(exporter_id) exporter = Exporter.find(exporter_id) exporter.export exporter.write + exporter.save true end end diff --git a/app/models/bulkrax/exporter.rb b/app/models/bulkrax/exporter.rb index 8dd6446b..4f8ad702 100644 --- a/app/models/bulkrax/exporter.rb +++ b/app/models/bulkrax/exporter.rb @@ -14,7 +14,7 @@ class Exporter < ApplicationRecord validates :name, presence: true validates :parser_klass, presence: true - delegate :write, :create_from_collection, :create_from_importer, :create_from_worktype, to: :parser + delegate :write, :create_from_collection, :create_from_importer, :create_from_worktype, :create_from_all, to: :parser def export current_run && setup_export_path @@ -25,6 +25,8 @@ def export create_from_importer when 'worktype' create_from_worktype + when 'all' + create_from_all end rescue StandardError => e status_info(e) @@ -77,7 +79,8 @@ def export_from_list [ [I18n.t('bulkrax.exporter.labels.importer'), 'importer'], [I18n.t('bulkrax.exporter.labels.collection'), 'collection'], - [I18n.t('bulkrax.exporter.labels.worktype'), 'worktype'] + [I18n.t('bulkrax.exporter.labels.worktype'), 'worktype'], + [I18n.t('bulkrax.exporter.labels.all'), 'all'] ] end diff --git a/app/parsers/bulkrax/csv_parser.rb b/app/parsers/bulkrax/csv_parser.rb index d4de1202..511ab71c 100644 --- a/app/parsers/bulkrax/csv_parser.rb +++ b/app/parsers/bulkrax/csv_parser.rb @@ -130,6 +130,8 @@ def extra_filters def current_work_ids case importerexporter.export_from + when 'all' + ActiveFedora::SolrService.query("has_model_ssim:(#{Hyrax.config.curation_concerns.join(' OR ')}) #{extra_filters}", rows: 2_147_483_647).map(&:id) when 'collection' ActiveFedora::SolrService.query("member_of_collection_ids_ssim:#{importerexporter.export_source + extra_filters}", rows: 2_000_000_000).map(&:id) when 'worktype' @@ -164,6 +166,7 @@ def create_new_entries alias create_from_collection create_new_entries alias create_from_importer create_new_entries alias create_from_worktype create_new_entries + alias create_from_all create_new_entries def entry_class CsvEntry diff --git a/app/views/bulkrax/exporters/show.html.erb b/app/views/bulkrax/exporters/show.html.erb index ddc761d6..a7968c17 100644 --- a/app/views/bulkrax/exporters/show.html.erb +++ b/app/views/bulkrax/exporters/show.html.erb @@ -57,8 +57,9 @@ <%= t('bulkrax.exporter.labels.limit') %>: <%= @exporter.limit %>

+ <%= render partial: 'bulkrax/shared/bulkrax_errors', locals: {item: @exporter} %> - <%= render partial: 'bulkrax/shared/bulkrax_field_mapping', locals: {item: @exporter} %> + <%= render partial: 'bulkrax/shared/bulkrax_field_mapping', locals: {item: @exporter} %> <%# Currently, no parser-specific fields exist on Exporter, thus there's no real reason to always show this field %> diff --git a/config/locales/bulkrax.en.yml b/config/locales/bulkrax.en.yml index a8b5feb1..e6bd6407 100644 --- a/config/locales/bulkrax.en.yml +++ b/config/locales/bulkrax.en.yml @@ -6,6 +6,7 @@ en: importers: Importers exporter: labels: + all: All collection: Collection export_format: Export Format export_from: Export From diff --git a/spec/models/bulkrax/exporter_spec.rb b/spec/models/bulkrax/exporter_spec.rb index 35d8975e..9e2ddcc1 100644 --- a/spec/models/bulkrax/exporter_spec.rb +++ b/spec/models/bulkrax/exporter_spec.rb @@ -13,7 +13,8 @@ module Bulkrax [ [I18n.t('bulkrax.exporter.labels.importer'), 'importer'], [I18n.t('bulkrax.exporter.labels.collection'), 'collection'], - [I18n.t('bulkrax.exporter.labels.worktype'), 'worktype'] + [I18n.t('bulkrax.exporter.labels.worktype'), 'worktype'], + [I18n.t('bulkrax.exporter.labels.all'), 'all'] ] ) end