From 80a51a7c322ec5aa4c83aa416876a8a9f26a3731 Mon Sep 17 00:00:00 2001 From: LaRita Robinson Date: Thu, 16 Apr 2026 13:00:23 -0400 Subject: [PATCH] WIP UI for Bulkrax Field Mapping Management Using a branch of Bulkrax, adds a UI for managing field mappings. This is a work in progress, but the basic functionality is there. The UI allows you to view, add, edit, and delete field mappings. The UI is accessible from the admin dashboard under "Bulkrax Field Mappings". --- Gemfile | 2 +- Gemfile.lock | 40 +++++++++++-------- .../admin/field_mappings_controller.rb | 33 +++++++++++++++ .../dashboard/sidebar/_configuration.html.erb | 3 ++ config/locales/en.yml | 1 + config/routes.rb | 1 + 6 files changed, 62 insertions(+), 18 deletions(-) create mode 100644 app/controllers/admin/field_mappings_controller.rb diff --git a/Gemfile b/Gemfile index 971cd88175..83213c2ca4 100644 --- a/Gemfile +++ b/Gemfile @@ -28,7 +28,7 @@ gem 'blacklight_range_limit', '~> 8.5' gem 'bolognese', '>= 1.9.10' gem 'bootstrap', '~> 4.6' gem 'bootstrap-datepicker-rails' -gem 'bulkrax', '~> 9.4' +gem 'bulkrax', github: 'samvera/bulkrax', branch: 'bulkrax-mappings-ui' gem 'byebug', group: %i[development test] gem 'capybara', group: %i[test] gem 'capybara-screenshot', '~> 1.0', group: %i[test] diff --git a/Gemfile.lock b/Gemfile.lock index 3ea0d48bf5..c17e225915 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -38,6 +38,28 @@ GIT iiif_manifest (> 0.5) rails (>= 5.1, < 8.0) +GIT + remote: https://github.com/samvera/bulkrax.git + revision: 2bac6feffd8bcf282a6076c5e60723b8dc18816a + branch: bulkrax-mappings-ui + specs: + bulkrax (9.4.0) + bagit (~> 0.6.0) + coderay + denormalize_fields + iso8601 (~> 0.9.0) + kaminari + language_list (~> 1.2, >= 1.2.1) + libxml-ruby (~> 5.0) + loofah (>= 2.2.3) + marcel + oai (>= 0.4, < 2.x) + rack (>= 2.0.6) + rails (>= 5.1.6, < 8.0.0) + rdf (>= 2.0.2, < 4.0) + rubyzip + simple_form + GIT remote: https://github.com/samvera/hyrax.git revision: 03ec05c112421670b9d8bfd190beab642e736e77 @@ -379,22 +401,6 @@ GEM signet (~> 0.8) typhoeus builder (3.3.0) - bulkrax (9.4.0) - bagit (~> 0.6.0) - coderay - denormalize_fields - iso8601 (~> 0.9.0) - kaminari - language_list (~> 1.2, >= 1.2.1) - libxml-ruby (~> 5.0) - loofah (>= 2.2.3) - marcel - oai (>= 0.4, < 2.x) - rack (>= 2.0.6) - rails (>= 5.1.6, < 8.0.0) - rdf (>= 2.0.2, < 4.0) - rubyzip - simple_form byebug (12.0.0) cancancan (3.6.1) capybara (3.40.0) @@ -1667,7 +1673,7 @@ DEPENDENCIES bolognese (>= 1.9.10) bootstrap (~> 4.6) bootstrap-datepicker-rails - bulkrax (~> 9.4) + bulkrax! byebug capybara capybara-screenshot (~> 1.0) diff --git a/app/controllers/admin/field_mappings_controller.rb b/app/controllers/admin/field_mappings_controller.rb new file mode 100644 index 0000000000..1ecbce3ccd --- /dev/null +++ b/app/controllers/admin/field_mappings_controller.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +module Admin + class FieldMappingsController < ::Bulkrax::FieldMappingsController + before_action -> { authorize! :manage, Site } + + helper_method :edit_field_mappings_path, :field_mappings_path + + def edit_field_mappings_path(**opts) + main_app.edit_admin_field_mappings_path(**opts) + end + + def field_mappings_path(**opts) + main_app.admin_field_mappings_path(**opts) + end + + protected + + def load_mappings + Bulkrax.field_mappings.deep_dup + end + + def save_mappings(hash) + account = Site.account + account.bulkrax_field_mappings = hash.to_json + account.save! + end + + def default_mappings + Hyku.default_bulkrax_field_mappings.deep_dup + end + end +end diff --git a/app/views/hyrax/dashboard/sidebar/_configuration.html.erb b/app/views/hyrax/dashboard/sidebar/_configuration.html.erb index 4d5e41d30a..66ed326e15 100644 --- a/app/views/hyrax/dashboard/sidebar/_configuration.html.erb +++ b/app/views/hyrax/dashboard/sidebar/_configuration.html.erb @@ -38,6 +38,9 @@ <%= menu.nav_link('/admin/work_types/edit', class: "nav-link", title: t('hyku.admin.work_types')) do %> <%= t('hyku.admin.work_types') %> <% end %> + <%= menu.nav_link(main_app.edit_admin_field_mappings_path, class: "nav-link", title: t('hyku.admin.field_mappings')) do %> + <%= t('hyku.admin.field_mappings') %> + <% end %> <% end %> <% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index b3ced29e19..64843bec47 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -154,6 +154,7 @@ en: work_depositor: Can deposit Works into any Admin Set in this tenant. Can read, edit, and manage Embargoes / Leases for Works belonging to them work_editor: Can create, read, edit, and approve any Work in this tenant, as well as move Works between Admin Sets and manage Embargoes and Leases title: Administration + field_mappings: Bulkrax Field Mappings work_types: Available Work Types footer: admin_login: Administrator login diff --git a/config/routes.rb b/config/routes.rb index e3f9f6262d..4a258e19c3 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -127,6 +127,7 @@ namespace :admin do resource :account, only: %i[edit update] resource :work_types, only: %i[edit update] + resource :field_mappings, only: %i[edit update] resources :users, only: [:index, :destroy] do post 'activate', on: :member delete 'remove_role/:role_id', on: :member, to: 'users#remove_role', as: :remove_role