hyrax 5.0.0 → 5.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +7 -176
- data/.dassie/.env +8 -3
- data/.dassie/Gemfile +13 -2
- data/.dassie/app/controllers/hyrax/generic_work_resources_controller.rb +17 -0
- data/.dassie/app/controllers/hyrax/generic_works_controller.rb +7 -1
- data/.dassie/app/forms/generic_work_resource_form.rb +20 -0
- data/.dassie/app/indexers/generic_work_resource_indexer.rb +16 -0
- data/.dassie/app/models/admin_set_resource.rb +9 -0
- data/.dassie/app/models/collection_resource.rb +2 -0
- data/.dassie/app/models/file_set.rb +2 -0
- data/.dassie/app/models/generic_work_resource.rb +10 -0
- data/.dassie/app/views/hyrax/generic_work_resources/_generic_work_resource.html.erb +2 -0
- data/.dassie/config/analytics.yml +6 -1
- data/.dassie/config/application.rb +24 -0
- data/.dassie/config/initializers/hyrax.rb +13 -3
- data/.dassie/config/initializers/wings.rb +109 -0
- data/.dassie/config/metadata/generic_work_resource.yaml +22 -0
- data/.dassie/config/valkyrie_index.yml +4 -10
- data/.dassie/db/migrate/20240506070809_valkyrie_id_to_string.rb +5 -0
- data/.dassie/db/schema.rb +2 -2
- data/.dassie/spec/indexers/generic_work_resource_indexer_spec.rb +13 -0
- data/.dassie/spec/models/generic_work_resource_spec.rb +12 -0
- data/.dassie/spec/views/generic_work_resources/_generic_work_resource.html.erb_spec.rb +7 -0
- data/.dockerignore +6 -4
- data/.github/release.yml +3 -0
- data/.github/workflows/lint-build-test.yml +130 -0
- data/.github/workflows/test-results.yml +40 -0
- data/.koppie/.env +7 -5
- data/.koppie/Gemfile +12 -1
- data/.koppie/config/analytics.yml +6 -1
- data/.koppie/config/environments/test.rb +2 -0
- data/.koppie/config/initializers/1_valkyrie.rb +6 -2
- data/.koppie/config/solr.yml +1 -1
- data/.regen +1 -1
- data/.rubocop.yml +5 -0
- data/Dockerfile +16 -36
- data/Gemfile +2 -0
- data/app/assets/javascripts/hydra-editor/field_manager.es6 +187 -0
- data/app/assets/javascripts/hyrax/analytics_events.js +48 -24
- data/app/assets/javascripts/hyrax/autocomplete/linked_data.es6 +3 -0
- data/app/assets/javascripts/hyrax/collapse.js +4 -4
- data/app/assets/javascripts/hyrax/editor/controlled_vocabulary.es6 +38 -5
- data/app/assets/javascripts/hyrax/file_manager/save_manager.es6 +2 -0
- data/app/assets/javascripts/hyrax/search.js +2 -3
- data/app/assets/javascripts/hyrax/select_work_type.es6 +3 -1
- data/app/assets/javascripts/hyrax/uploader.js +20 -18
- data/app/assets/javascripts/hyrax.js +1 -0
- data/app/assets/stylesheets/_bootstrap-default-overrides.scss +4 -0
- data/app/assets/stylesheets/hyrax/_card.scss +4 -0
- data/app/assets/stylesheets/hyrax/_catalog.scss +21 -0
- data/app/assets/stylesheets/hyrax/_collections.scss +1 -1
- data/app/assets/stylesheets/hyrax/_facets.scss +15 -3
- data/app/assets/stylesheets/hyrax/_featured.scss +4 -0
- data/app/assets/stylesheets/hyrax/_file_upload.scss +6 -0
- data/app/assets/stylesheets/hyrax/_form.scss +4 -0
- data/app/assets/stylesheets/hyrax/_forms.scss +2 -1
- data/app/assets/stylesheets/hyrax/_nestable.scss +9 -8
- data/app/assets/stylesheets/hyrax/_select_work_type.scss +12 -0
- data/app/assets/stylesheets/hyrax/_styles.scss +4 -0
- data/app/assets/stylesheets/hyrax/_work-show.scss +3 -0
- data/app/assets/stylesheets/hyrax/controlled_vocabulary.scss +2 -2
- data/app/controllers/concerns/hyrax/singular_subresource_controller.rb +7 -2
- data/app/controllers/concerns/hyrax/valkyrie_downloads_controller_behavior.rb +11 -2
- data/app/controllers/concerns/hyrax/works_controller_behavior.rb +9 -2
- data/app/controllers/hyrax/admin/analytics/collection_reports_controller.rb +2 -2
- data/app/controllers/hyrax/admin/analytics/work_reports_controller.rb +7 -8
- data/app/controllers/hyrax/dashboard/collections_controller.rb +2 -1
- data/app/controllers/hyrax/downloads_controller.rb +24 -3
- data/app/controllers/hyrax/file_sets_controller.rb +33 -7
- data/app/controllers/hyrax/my/works_controller.rb +20 -0
- data/app/controllers/hyrax/single_use_links_viewer_controller.rb +9 -2
- data/app/controllers/hyrax/stats_controller.rb +1 -1
- data/app/controllers/hyrax/uploads_controller.rb +28 -2
- data/app/forms/hyrax/forms/admin/appearance.rb +1 -1
- data/app/forms/hyrax/forms/admin/collection_type_form.rb +1 -7
- data/app/forms/hyrax/forms/pcdm_collection_form.rb +9 -0
- data/app/forms/hyrax/forms/work_embargo_form.rb +6 -0
- data/app/forms/hyrax/forms/work_lease_form.rb +6 -0
- data/app/indexers/concerns/hyrax/location_indexer.rb +2 -2
- data/app/indexers/hyrax/indexers/file_set_indexer.rb +4 -0
- data/app/indexers/hyrax/indexers/resource_indexer.rb +1 -0
- data/app/indexers/hyrax/valkyrie_indexer.rb +3 -5
- data/app/jobs/migrate_files_to_valkyrie_job.rb +109 -0
- data/app/jobs/migrate_resources_job.rb +34 -0
- data/app/jobs/valkyrie_create_derivatives_job.rb +2 -1
- data/app/models/admin_set.rb +1 -0
- data/app/models/collection.rb +13 -1
- data/app/models/concerns/hyrax/ar_resource.rb +104 -0
- data/app/models/concerns/hyrax/solr_document/ordered_members.rb +2 -1
- data/app/models/concerns/hyrax/solr_document_behavior.rb +13 -2
- data/app/models/concerns/hyrax/valkyrie_lazy_migration.rb +82 -0
- data/app/models/file_download_stat.rb +1 -1
- data/app/models/file_view_stat.rb +1 -1
- data/app/models/hyrax/collection_type.rb +12 -4
- data/app/models/hyrax/file_metadata.rb +19 -0
- data/app/models/hyrax/file_set.rb +25 -0
- data/app/models/hyrax/model_registry.rb +3 -4
- data/app/models/hyrax/resource.rb +5 -0
- data/app/models/hyrax/statistic.rb +12 -37
- data/app/presenters/hyrax/file_set_presenter.rb +2 -1
- data/app/presenters/hyrax/file_usage.rb +3 -3
- data/app/presenters/hyrax/iiif_manifest_presenter.rb +2 -1
- data/app/presenters/hyrax/member_presenter_factory.rb +7 -1
- data/app/presenters/hyrax/menu_presenter.rb +1 -1
- data/app/presenters/hyrax/pcdm_member_presenter_factory.rb +2 -2
- data/app/presenters/hyrax/stats_usage_presenter.rb +2 -1
- data/app/presenters/hyrax/work_show_presenter.rb +15 -19
- data/app/presenters/hyrax/work_usage.rb +5 -2
- data/app/search_builders/hyrax/expired_embargo_search_builder.rb +7 -1
- data/app/search_builders/hyrax/expired_lease_search_builder.rb +7 -1
- data/app/search_builders/hyrax/filter_by_type.rb +1 -3
- data/app/search_builders/hyrax/valkyrie_abstract_type_relation.rb +7 -2
- data/app/services/hyrax/access_control_list.rb +1 -1
- data/app/services/hyrax/admin_set_create_service.rb +16 -5
- data/app/services/hyrax/admin_set_service.rb +2 -1
- data/app/services/hyrax/analytics/ga4/base.rb +96 -0
- data/app/services/hyrax/analytics/ga4/events.rb +25 -0
- data/app/services/hyrax/analytics/ga4/events_daily.rb +36 -0
- data/app/services/hyrax/analytics/ga4/visits.rb +33 -0
- data/app/services/hyrax/analytics/ga4/visits_daily.rb +24 -0
- data/app/services/hyrax/analytics/ga4.rb +204 -0
- data/app/services/hyrax/analytics/google.rb +16 -2
- data/app/services/hyrax/analytics/matomo.rb +16 -3
- data/app/services/hyrax/analytics/results.rb +6 -0
- data/app/services/hyrax/custom_queries/find_access_control.rb +1 -1
- data/app/services/hyrax/custom_queries/find_by_date_range.rb +6 -23
- data/app/services/hyrax/custom_queries/find_collections_by_type.rb +2 -2
- data/app/services/hyrax/custom_queries/find_count_by.rb +3 -31
- data/app/services/hyrax/custom_queries/find_file_metadata.rb +2 -2
- data/app/services/hyrax/custom_queries/find_models_by_access.rb +5 -27
- data/app/services/hyrax/embargo_manager.rb +2 -1
- data/app/services/hyrax/file_set_file_service.rb +10 -1
- data/app/services/hyrax/listeners/file_listener.rb +39 -0
- data/app/services/hyrax/listeners/file_metadata_listener.rb +0 -30
- data/app/services/hyrax/lock_manager.rb +7 -7
- data/app/services/hyrax/lockable.rb +4 -3
- data/app/services/hyrax/simple_schema_loader.rb +1 -1
- data/app/services/hyrax/solr_service.rb +22 -8
- data/app/services/hyrax/statistics/query_service.rb +1 -1
- data/app/services/hyrax/statistics/works/over_time.rb +1 -1
- data/app/services/hyrax/thumbnail_path_service.rb +2 -0
- data/app/services/hyrax/user_stat_importer.rb +5 -5
- data/app/services/hyrax/valkyrie_upload.rb +14 -9
- data/app/services/hyrax/versioning_service.rb +10 -2
- data/app/services/hyrax/work_query_service.rb +2 -2
- data/app/services/migrate_resource_service.rb +55 -0
- data/app/views/_controls.html.erb +5 -5
- data/app/views/_masthead.html.erb +1 -1
- data/app/views/catalog/_search_form.html.erb +9 -16
- data/app/views/catalog/_thumbnail_list_collection.html.erb +1 -1
- data/app/views/catalog/_thumbnail_list_default.html.erb +2 -2
- data/app/views/hyrax/admin/analytics/collection_reports/index.html.erb +4 -4
- data/app/views/hyrax/admin/analytics/work_reports/index.html.erb +1 -1
- data/app/views/hyrax/admin/collection_types/_form.html.erb +4 -4
- data/app/views/hyrax/admin/collection_types/index.html.erb +1 -1
- data/app/views/hyrax/admin/features/index.html.erb +1 -1
- data/app/views/hyrax/base/_file_manager_actions.html.erb +1 -1
- data/app/views/hyrax/base/_file_manager_member.html.erb +7 -4
- data/app/views/hyrax/base/_file_manager_thumbnail.html.erb +1 -1
- data/app/views/hyrax/base/_form_files.html.erb +1 -1
- data/app/views/hyrax/base/_form_member_of_collections.html.erb +4 -0
- data/app/views/hyrax/base/_show_actions.html.erb +7 -8
- data/app/views/hyrax/base/_work_button_row.html.erb +1 -1
- data/app/views/hyrax/batch_select/_add_button.html.erb +1 -1
- data/app/views/hyrax/content_blocks/_form.html.erb +3 -3
- data/app/views/hyrax/dashboard/_sidebar.html.erb +1 -1
- data/app/views/hyrax/dashboard/_user_activity.html.erb +2 -2
- data/app/views/hyrax/dashboard/collections/_form.html.erb +4 -4
- data/app/views/hyrax/dashboard/collections/_form_share.html.erb +6 -4
- data/app/views/hyrax/dashboard/collections/_list_collections.html.erb +1 -1
- data/app/views/hyrax/dashboard/collections/_show_document_list_row.html.erb +1 -1
- data/app/views/hyrax/dashboard/show_admin.html.erb +18 -19
- data/app/views/hyrax/dashboard/sidebar/_activity.html.erb +1 -1
- data/app/views/hyrax/embargoes/_list_expired_active_embargoes.html.erb +7 -7
- data/app/views/hyrax/file_sets/_actions.html.erb +9 -1
- data/app/views/hyrax/file_sets/_permission_form.html.erb +4 -2
- data/app/views/hyrax/file_sets/_show_actions.html.erb +1 -1
- data/app/views/hyrax/homepage/_featured.html.erb +1 -1
- data/app/views/hyrax/homepage/_recent_document.html.erb +2 -2
- data/app/views/hyrax/leases/_list_expired_active_leases.html.erb +6 -6
- data/app/views/hyrax/my/collections/_list_collections.html.erb +1 -1
- data/app/views/hyrax/my/collections/_tabs.html.erb +1 -1
- data/app/views/hyrax/pages/_form.html.erb +8 -8
- data/app/views/hyrax/transfers/_received.html.erb +1 -1
- data/app/views/hyrax/uploads/_js_templates.html.erb +9 -9
- data/app/views/hyrax/uploads/_js_templates_branding.html.erb +3 -3
- data/app/views/hyrax/uploads/_js_templates_versioning.html.erb +1 -1
- data/app/views/hyrax/uploads/create.json.jbuilder +2 -2
- data/app/views/hyrax/users/_activity_log.html.erb +15 -9
- data/app/views/hyrax/users/_user_row.html.erb +6 -3
- data/app/views/hyrax/users/_vitals.html.erb +3 -2
- data/app/views/layouts/_head_tag_content.html.erb +2 -0
- data/app/views/shared/_appearance_styles.html.erb +5 -1
- data/app/views/shared/_ga4.html.erb +11 -0
- data/app/views/shared/_select_work_type_modal.html.erb +10 -1
- data/bin/db-migrate-seed.sh +3 -3
- data/bin/dev-entrypoint.sh +7 -2
- data/bin/{db-wait.sh → service-wait.sh} +1 -1
- data/bin/worker-entrypoint.sh +8 -0
- data/chart/hyrax/Chart.yaml +1 -1
- data/chart/hyrax/templates/deployment-worker.yaml +2 -2
- data/chart/hyrax/templates/deployment.yaml +12 -0
- data/chart/hyrax/values.yaml +10 -0
- data/config/locales/hyrax.en.yml +4 -2
- data/config/metadata/basic_metadata.yaml +20 -0
- data/config/metadata/hyrax_internal_metadata.yaml +1 -1
- data/docker-compose-dassie.yml +167 -0
- data/docker-compose-koppie.yml +21 -36
- data/docker-compose-sirenia.yml +50 -44
- data/docker-compose.yml +2 -183
- data/documentation/developing-your-hyrax-based-app.md +4 -4
- data/hyrax.gemspec +7 -12
- data/lib/freyja/custom_query_container.rb +5 -0
- data/lib/freyja/metadata_adapter.rb +32 -0
- data/lib/freyja/persister.rb +42 -0
- data/lib/freyja/query_service.rb +20 -0
- data/lib/freyja/resource_factory.rb +8 -0
- data/lib/freyja.rb +14 -0
- data/lib/frigg/custom_query_container.rb +5 -0
- data/lib/frigg/metadata_adapter.rb +22 -0
- data/lib/frigg/persister.rb +33 -0
- data/lib/frigg/query_service.rb +15 -0
- data/lib/frigg.rb +13 -0
- data/lib/generators/hyrax/install_generator.rb +5 -0
- data/lib/generators/hyrax/templates/config/analytics.yml +6 -1
- data/lib/generators/hyrax/templates/config/initializers/1_valkyrie.rb +6 -2
- data/lib/generators/hyrax/templates/config/valkyrie_index.yml +1 -1
- data/lib/goddess/custom_query_container.rb +71 -0
- data/lib/goddess/metadata.rb +13 -0
- data/lib/goddess/query.rb +176 -0
- data/lib/hyrax/configuration.rb +83 -0
- data/lib/hyrax/engine.rb +2 -0
- data/lib/hyrax/form_fields.rb +1 -3
- data/lib/hyrax/name.rb +5 -0
- data/lib/hyrax/publisher.rb +11 -0
- data/lib/hyrax/rubocop/custom_cops.rb +30 -0
- data/lib/hyrax/specs/capybara.rb +10 -6
- data/{spec → lib/hyrax/specs/shared_specs}/factories/admin_sets.rb +2 -0
- data/{spec → lib/hyrax/specs/shared_specs}/factories/hyrax_embargo.rb +4 -0
- data/{spec → lib/hyrax/specs/shared_specs}/factories/hyrax_lease.rb +4 -0
- data/{spec → lib/hyrax/specs/shared_specs}/factories/hyrax_work.rb +26 -1
- data/lib/hyrax/specs/shared_specs/hydra_works.rb +1 -1
- data/lib/hyrax/transactions/admin_set_destroy.rb +2 -1
- data/lib/hyrax/transactions/collection_destroy.rb +2 -1
- data/lib/hyrax/transactions/container.rb +9 -0
- data/lib/hyrax/transactions/steps/add_file_sets.rb +2 -1
- data/lib/hyrax/transactions/steps/delete_all_file_metadata.rb +4 -5
- data/lib/hyrax/transactions/steps/delete_permission_template.rb +30 -0
- data/lib/hyrax/transactions/steps/delete_resource.rb +1 -1
- data/lib/hyrax/transactions/steps/save_collection_logo.rb +2 -1
- data/lib/hyrax/valkyrie_can_can_adapter.rb +8 -1
- data/lib/hyrax/version.rb +1 -1
- data/lib/wings/active_fedora_converter.rb +13 -5
- data/lib/wings/converter_value_mapper.rb +1 -0
- data/lib/wings/services/custom_queries/find_collections_by_type.rb +2 -1
- data/lib/wings/services/custom_queries/find_file_metadata.rb +2 -2
- data/lib/wings/setup.rb +12 -3
- data/lib/wings/transformer_value_mapper.rb +5 -1
- data/lib/wings/valkyrie/persister.rb +3 -1
- data/template.rb +1 -1
- metadata +118 -94
- data/.koppie/scripts/db-migrate-seed.sh +0 -9
- data/.koppie/scripts/entrypoint.sh +0 -10
- data/spec/support/book_resource.rb +0 -36
- data/spec/support/can_can_overrides.rb +0 -43
- data/spec/support/clean_solr.rb +0 -7
- data/spec/support/controller_level_helpers.rb +0 -27
- data/spec/support/factory_helpers.rb +0 -94
- data/spec/support/fakes/fake_actor.rb +0 -22
- data/spec/support/fakes/fake_authority.rb +0 -14
- data/spec/support/fakes/fake_search_builder_scope.rb +0 -44
- data/spec/support/fakes/indexing_adapter.rb +0 -17
- data/spec/support/fakes/test_hydra_group_service.rb +0 -55
- data/spec/support/features/batch_edit_actions.rb +0 -37
- data/spec/support/features/session_helpers.rb +0 -15
- data/spec/support/features/workflow.rb +0 -10
- data/spec/support/features.rb +0 -11
- data/spec/support/form_with_validations.rb +0 -15
- data/spec/support/input_support.rb +0 -12
- data/spec/support/logging_formatter.rb +0 -67
- data/spec/support/matchers/api_responses.rb +0 -27
- data/spec/support/matchers/collection_type_property_matchers.rb +0 -30
- data/spec/support/matchers/embargo.rb +0 -9
- data/spec/support/matchers/lease.rb +0 -9
- data/spec/support/matchers/match_valkyrie_ids_with_af_ids.rb +0 -12
- data/spec/support/matchers/pcdm_matchers.rb +0 -34
- data/spec/support/matchers/permission.rb +0 -31
- data/spec/support/matchers/response_matchers.rb +0 -8
- data/spec/support/optional_example.rb +0 -17
- data/spec/support/rake.rb +0 -42
- data/spec/support/selectors.rb +0 -112
- data/spec/support/shared_examples_for_collection_presenter.rb +0 -44
- data/spec/support/simple_work.rb +0 -28
- data/spec/support/spec_statistic.rb +0 -24
- data/spec/support/speedup.rb +0 -7
- data/spec/support/statistic_helper.rb +0 -10
- data/spec/support/valkyrie_indexing.rb +0 -2
- data/spec/support/wings_models.rb +0 -9
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/access_control.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/admin_sets_lw.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/administrative_sets.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/api_items.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/collection_branding_infos.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/collection_type_participants.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/collection_types.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/collections.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/collections_factory.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/content_blocks.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/counter_metrics.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/featured_works.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/file_sets.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/generic_works.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/hyrax_collection.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/hyrax_default_admin_set.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/hyrax_file_metadata.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/hyrax_file_set.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/hyrax_resource.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/object_id.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/operations.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/permission.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/permission_template_accesses.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/permission_templates.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/proxy_deposit_requests.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/single_use_links.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/sipity_entities.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/uploaded_files.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/users.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/workflow_actions.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/workflow_states.rb +0 -0
- /data/{spec → lib/hyrax/specs/shared_specs}/factories/workflows.rb +0 -0
@@ -58,7 +58,7 @@ module Hyrax
|
|
58
58
|
@admin_set_options = available_admin_sets
|
59
59
|
# TODO: move these lines to the work form builder in Hyrax
|
60
60
|
curation_concern.depositor = current_user.user_key
|
61
|
-
curation_concern.admin_set_id = admin_set_id_for_new
|
61
|
+
curation_concern.admin_set_id = params[:admin_set_id] || admin_set_id_for_new
|
62
62
|
build_form
|
63
63
|
end
|
64
64
|
|
@@ -263,6 +263,8 @@ module Hyrax
|
|
263
263
|
|
264
264
|
def contextual_path(presenter, parent_presenter)
|
265
265
|
::Hyrax::ContextualPath.new(presenter, parent_presenter).show
|
266
|
+
rescue NoMethodError
|
267
|
+
''
|
266
268
|
end
|
267
269
|
|
268
270
|
##
|
@@ -385,7 +387,12 @@ module Hyrax
|
|
385
387
|
|
386
388
|
def format_error_messages(errors)
|
387
389
|
# the error may already be a string
|
388
|
-
errors.respond_to?(:messages)
|
390
|
+
return errors unless errors.respond_to?(:messages)
|
391
|
+
|
392
|
+
errors.messages.map do |field, messages|
|
393
|
+
field_name = field.to_s.humanize
|
394
|
+
messages.map { |message| "#{field_name} #{message.sub(/^./, &:downcase)}" }
|
395
|
+
end.flatten.join("\n")
|
389
396
|
end
|
390
397
|
|
391
398
|
def after_create_error(errors, original_input_params_for_form = nil)
|
@@ -5,7 +5,7 @@ module Hyrax
|
|
5
5
|
class CollectionReportsController < AnalyticsController
|
6
6
|
include Hyrax::BreadcrumbsForCollectionAnalytics
|
7
7
|
def index
|
8
|
-
return unless Hyrax.config.
|
8
|
+
return unless Hyrax.config.analytics_reporting?
|
9
9
|
|
10
10
|
@pageviews = Hyrax::Analytics.daily_events('collection-page-view')
|
11
11
|
@work_page_views = Hyrax::Analytics.daily_events('work-in-collection-view')
|
@@ -21,7 +21,7 @@ module Hyrax
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def show
|
24
|
-
return unless Hyrax.config.
|
24
|
+
return unless Hyrax.config.analytics_reporting?
|
25
25
|
@document = ::SolrDocument.find(params[:id])
|
26
26
|
@pageviews = Hyrax::Analytics.daily_events_for_id(@document.id, 'collection-page-view')
|
27
27
|
@work_page_views = Hyrax::Analytics.daily_events_for_id(@document.id, 'work-in-collection-view')
|
@@ -4,9 +4,10 @@ module Hyrax
|
|
4
4
|
module Analytics
|
5
5
|
class WorkReportsController < AnalyticsController
|
6
6
|
include Hyrax::BreadcrumbsForWorksAnalytics
|
7
|
+
before_action :authenticate_user!
|
7
8
|
|
8
9
|
def index
|
9
|
-
return unless Hyrax.config.
|
10
|
+
return unless Hyrax.config.analytics_reporting?
|
10
11
|
|
11
12
|
@accessible_works ||= accessible_works
|
12
13
|
@accessible_file_sets ||= accessible_file_sets
|
@@ -14,10 +15,7 @@ module Hyrax
|
|
14
15
|
@top_works = paginate(top_works_list, rows: 10)
|
15
16
|
@top_file_set_downloads = paginate(top_files_list, rows: 10)
|
16
17
|
|
17
|
-
if current_user.ability.admin?
|
18
|
-
@pageviews = Hyrax::Analytics.daily_events('work-view')
|
19
|
-
@downloads = Hyrax::Analytics.daily_events('file-set-download')
|
20
|
-
end
|
18
|
+
@pageviews = Hyrax::Analytics.daily_events('work-view'), @downloads = Hyrax::Analytics.daily_events('file-set-download') if current_user.ability.admin?
|
21
19
|
|
22
20
|
respond_to do |format|
|
23
21
|
format.html
|
@@ -39,7 +37,7 @@ module Hyrax
|
|
39
37
|
private
|
40
38
|
|
41
39
|
def accessible_works
|
42
|
-
models = Hyrax.
|
40
|
+
models = Hyrax::ModelRegistry.work_rdf_representations.map { |m| "\"#{m}\"" }
|
43
41
|
if current_user.ability.admin?
|
44
42
|
Hyrax::SolrService.query("has_model_ssim:(#{models.join(' OR ')})",
|
45
43
|
fl: 'title_tesim, id, member_of_collections',
|
@@ -54,15 +52,16 @@ module Hyrax
|
|
54
52
|
end
|
55
53
|
|
56
54
|
def accessible_file_sets
|
55
|
+
file_set_model_clause = "has_model_ssim:\"#{Hyrax::ModelRegistry.file_set_rdf_representations.join('" OR "')}\""
|
57
56
|
if current_user.ability.admin?
|
58
57
|
Hyrax::SolrService.query(
|
59
|
-
|
58
|
+
file_set_model_clause,
|
60
59
|
fl: 'title_tesim, id',
|
61
60
|
rows: 50_000
|
62
61
|
)
|
63
62
|
else
|
64
63
|
Hyrax::SolrService.query(
|
65
|
-
"edit_access_person_ssim:#{current_user} AND
|
64
|
+
"edit_access_person_ssim:#{current_user} AND #{file_set_model_clause}",
|
66
65
|
fl: 'title_tesim, id',
|
67
66
|
rows: 50_000
|
68
67
|
)
|
@@ -231,7 +231,8 @@ module Hyrax
|
|
231
231
|
banner_unchanged_indicator: params["banner_unchanged"] },
|
232
232
|
'collection_resource.save_collection_logo' => { update_logo_file_ids: params["logo_files"],
|
233
233
|
alttext_values: params["alttext"],
|
234
|
-
linkurl_values: params["linkurl"]
|
234
|
+
linkurl_values: params["linkurl"],
|
235
|
+
logo_unchanged_indicator: false }
|
235
236
|
)
|
236
237
|
.call(form)
|
237
238
|
@collection = result.value_or { return after_update_errors(result.failure.first) }
|
@@ -11,15 +11,38 @@ module Hyrax
|
|
11
11
|
:original_file
|
12
12
|
end
|
13
13
|
|
14
|
+
# We want to alias the show method for a later use with #show_active_fedora;
|
15
|
+
# because we're adding quite a bit of logic and need a good alias. Why the
|
16
|
+
# alias? Because we were using `super' for the show method and that just
|
17
|
+
# doesn't quite work with all of the antics we're performing.
|
18
|
+
alias hydra_show_active_fedora_file show
|
19
|
+
|
14
20
|
# Render the 404 page if the file doesn't exist.
|
15
21
|
# Otherwise renders the file.
|
16
22
|
def show
|
23
|
+
# We will use the thumbnail from our file system first, if one exists
|
24
|
+
# Otherwise we will fallback to Valkyrie, then the default implementations
|
25
|
+
use = params.fetch(:file, :original_file).to_sym
|
26
|
+
if use == :thumbnail
|
27
|
+
thumbnail = Hyrax::DerivativePath.derivative_path_for_reference(params[:id], 'thumbnail')
|
28
|
+
if thumbnail.present? && File.exist?(thumbnail)
|
29
|
+
@file = thumbnail
|
30
|
+
return send_local_content
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
17
34
|
return show_valkyrie if Hyrax.config.use_valkyrie?
|
18
35
|
|
36
|
+
show_active_fedora
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def show_active_fedora
|
19
42
|
case file
|
20
43
|
when ActiveFedora::File
|
21
44
|
# For original files that are stored in fedora
|
22
|
-
|
45
|
+
hydra_show_active_fedora_file
|
23
46
|
when String
|
24
47
|
# For derivatives stored on the local file system
|
25
48
|
send_local_content
|
@@ -28,8 +51,6 @@ module Hyrax
|
|
28
51
|
end
|
29
52
|
end
|
30
53
|
|
31
|
-
private
|
32
|
-
|
33
54
|
# Override the Hydra::Controller::DownloadBehavior#content_options so that
|
34
55
|
# we have an attachement rather than 'inline'
|
35
56
|
def content_options
|
@@ -8,7 +8,7 @@ module Hyrax
|
|
8
8
|
include Hyrax::Breadcrumbs
|
9
9
|
|
10
10
|
before_action :authenticate_user!, except: [:show, :citation, :stats]
|
11
|
-
load_and_authorize_resource class:
|
11
|
+
load_and_authorize_resource class: Hyrax.config.file_set_class
|
12
12
|
before_action :build_breadcrumbs, only: [:show, :edit, :stats]
|
13
13
|
before_action do
|
14
14
|
blacklight_config.track_search_session = false
|
@@ -94,7 +94,7 @@ module Hyrax
|
|
94
94
|
# @api public
|
95
95
|
def delete(file_set:)
|
96
96
|
case file_set
|
97
|
-
when
|
97
|
+
when Hyrax::Resource
|
98
98
|
transactions['file_set.destroy']
|
99
99
|
.with_step_args('file_set.remove_from_work' => { user: current_user },
|
100
100
|
'file_set.delete' => { user: current_user })
|
@@ -123,20 +123,46 @@ module Hyrax
|
|
123
123
|
def valkyrie_update_metadata
|
124
124
|
change_set = Hyrax::Forms::ResourceForm.for(resource: file_set)
|
125
125
|
|
126
|
+
attributes = coerce_valkyrie_params
|
127
|
+
|
128
|
+
# TODO: We are not performing any error checks. So that's something to
|
129
|
+
# correct.
|
126
130
|
result =
|
127
131
|
change_set.validate(attributes) &&
|
128
132
|
transactions['change_set.update_file_set']
|
129
133
|
.with_step_args(
|
130
|
-
|
131
|
-
|
134
|
+
'file_set.save_acl' => { permissions_params: change_set.input_params["permissions"] }
|
135
|
+
)
|
132
136
|
.call(change_set).value_or { false }
|
133
137
|
@file_set = result if result
|
134
138
|
end
|
135
139
|
|
140
|
+
def coerce_valkyrie_params
|
141
|
+
attrs = attributes
|
142
|
+
# The HTML form might not submit the required data structure for reform;
|
143
|
+
# namely instead of a hash with positional arguments for nested attributes
|
144
|
+
# of a collection, it is an array. So we conditionally coerce that Array
|
145
|
+
# to a Hash.
|
146
|
+
|
147
|
+
# TODO: Do we need to concern ourself with embargo_attributes and
|
148
|
+
# lease_attributes? My suspicion is that since these are singular (for
|
149
|
+
# now), we don't. But it's a quick add.
|
150
|
+
[:permissions].each do |name|
|
151
|
+
next unless attrs["#{name}_attributes"].is_a?(Array)
|
152
|
+
new_perm_attrs = {}
|
153
|
+
attrs["#{name}_attributes"].each_with_index do |el, i|
|
154
|
+
new_perm_attrs[i] = el
|
155
|
+
end
|
156
|
+
|
157
|
+
attrs["#{name}_attributes"] = new_perm_attrs
|
158
|
+
end
|
159
|
+
attrs
|
160
|
+
end
|
161
|
+
|
136
162
|
def parent(file_set: curation_concern)
|
137
163
|
@parent ||=
|
138
164
|
case file_set
|
139
|
-
when Hyrax::
|
165
|
+
when Hyrax::Resource
|
140
166
|
# TODO: Add Hyrax::FileSet#parent method
|
141
167
|
Hyrax.query_service.find_parents(resource: file_set).first
|
142
168
|
else
|
@@ -145,7 +171,7 @@ module Hyrax
|
|
145
171
|
end
|
146
172
|
|
147
173
|
def attempt_update
|
148
|
-
return attempt_update_valkyrie if
|
174
|
+
return attempt_update_valkyrie if curation_concern.is_a?(Hyrax::Resource)
|
149
175
|
if wants_to_revert?
|
150
176
|
actor.revert_content(params[:revision])
|
151
177
|
elsif params.key?(:file_set)
|
@@ -292,7 +318,7 @@ module Hyrax
|
|
292
318
|
end
|
293
319
|
|
294
320
|
def file_metadata
|
295
|
-
@file_metadata ||= Hyrax.
|
321
|
+
@file_metadata ||= Hyrax.config.file_set_file_service.primary_file_for(file_set: file_set)
|
296
322
|
end
|
297
323
|
|
298
324
|
# Override this method to add additional response formats to your local app
|
@@ -24,6 +24,7 @@ module Hyrax
|
|
24
24
|
add_breadcrumb t(:'hyrax.admin.sidebar.works'), hyrax.my_works_path
|
25
25
|
managed_works_count
|
26
26
|
@create_work_presenter = create_work_presenter_class.new(current_user)
|
27
|
+
@admin_sets_for_select = admin_sets_for_select
|
27
28
|
super
|
28
29
|
end
|
29
30
|
|
@@ -47,6 +48,25 @@ module Hyrax
|
|
47
48
|
def managed_works_count
|
48
49
|
@managed_works_count = Hyrax::Works::ManagedWorksService.managed_works_count(scope: self)
|
49
50
|
end
|
51
|
+
|
52
|
+
def admin_sets_for_select
|
53
|
+
source_ids = Hyrax::Collections::PermissionsService.source_ids_for_deposit(ability: current_ability, source_type: 'admin_set')
|
54
|
+
|
55
|
+
admin_sets_list = Hyrax.query_service.find_many_by_ids(ids: source_ids).map do |source|
|
56
|
+
[source.title.first, source.id]
|
57
|
+
end
|
58
|
+
|
59
|
+
# Sorts the default admin set to be first, then the rest by title.
|
60
|
+
admin_sets_list.sort do |a, b|
|
61
|
+
if Hyrax::AdminSetCreateService.default_admin_set?(id: a[1])
|
62
|
+
-1
|
63
|
+
elsif Hyrax::AdminSetCreateService.default_admin_set?(id: b[1])
|
64
|
+
1
|
65
|
+
else
|
66
|
+
a[0] <=> b[0]
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
50
70
|
end
|
51
71
|
end
|
52
72
|
end
|
@@ -84,7 +84,13 @@ module Hyrax
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def current_ability
|
87
|
-
|
87
|
+
link_instance = nil
|
88
|
+
begin
|
89
|
+
link_instance = single_use_link
|
90
|
+
rescue ActiveRecord::RecordNotFound
|
91
|
+
Rails.logger.debug("Single user link was not found while getting current ability")
|
92
|
+
end
|
93
|
+
@current_ability ||= SingleUseLinksViewerController::Ability.new current_user, link_instance
|
88
94
|
end
|
89
95
|
|
90
96
|
def render_single_use_error(exception)
|
@@ -102,9 +108,10 @@ module Hyrax
|
|
102
108
|
include CanCan::Ability
|
103
109
|
|
104
110
|
attr_reader :single_use_link
|
111
|
+
attr_reader :current_user
|
105
112
|
|
106
113
|
def initialize(user, single_use_link)
|
107
|
-
@
|
114
|
+
@current_user = user || ::User.new
|
108
115
|
return unless single_use_link
|
109
116
|
|
110
117
|
@single_use_link = single_use_link
|
@@ -27,7 +27,7 @@ module Hyrax
|
|
27
27
|
when 'file'
|
28
28
|
add_breadcrumb I18n.t("hyrax.file_set.browse_view"), main_app.hyrax_file_set_path(params["id"])
|
29
29
|
when 'work'
|
30
|
-
add_breadcrumb @work.
|
30
|
+
add_breadcrumb @work.title.first, main_app.polymorphic_path(@work)
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
@@ -4,8 +4,12 @@ module Hyrax
|
|
4
4
|
load_and_authorize_resource class: Hyrax::UploadedFile
|
5
5
|
|
6
6
|
def create
|
7
|
-
|
8
|
-
|
7
|
+
if params[:id].blank?
|
8
|
+
@upload.attributes = { file: params[:files].first,
|
9
|
+
user: current_user }
|
10
|
+
else
|
11
|
+
upload_with_chunking
|
12
|
+
end
|
9
13
|
@upload.save!
|
10
14
|
end
|
11
15
|
|
@@ -13,5 +17,27 @@ module Hyrax
|
|
13
17
|
@upload.destroy
|
14
18
|
head :no_content
|
15
19
|
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def upload_with_chunking
|
24
|
+
@upload = Hyrax::UploadedFile.find(params[:id])
|
25
|
+
unpersisted_upload = Hyrax::UploadedFile.new(file: params[:files].first, user: current_user)
|
26
|
+
|
27
|
+
# Check if CONTENT-RANGE header is present
|
28
|
+
content_range = request.headers['CONTENT-RANGE']
|
29
|
+
return @upload.file = unpersisted_upload.file if content_range.nil?
|
30
|
+
|
31
|
+
# deal with chunks
|
32
|
+
current_size = @upload.file.size
|
33
|
+
begin_of_chunk = content_range[/\ (.*?)-/, 1].to_i # "bytes 100-999999/1973660678" will return '100'
|
34
|
+
|
35
|
+
# Add the following chunk to the incomplete upload
|
36
|
+
if @upload.file.present? && begin_of_chunk == current_size
|
37
|
+
File.open(@upload.file.path, "ab") { |f| f.write(params[:files].first.read) }
|
38
|
+
else
|
39
|
+
@upload.file = unpersisted_upload.file
|
40
|
+
end
|
41
|
+
end
|
16
42
|
end
|
17
43
|
end
|
@@ -10,7 +10,7 @@ module Hyrax
|
|
10
10
|
delegate :title, :description, :brandable, :discoverable, :nestable, :sharable, :share_applies_to_new_works,
|
11
11
|
:require_membership, :allow_multiple_membership, :assigns_workflow,
|
12
12
|
:assigns_visibility, :id, :collection_type_participants, :persisted?,
|
13
|
-
:admin_set?, :user_collection?, :badge_color, to: :collection_type
|
13
|
+
:admin_set?, :user_collection?, :badge_color, :collections?, to: :collection_type
|
14
14
|
|
15
15
|
##
|
16
16
|
# @return [Boolean]
|
@@ -23,12 +23,6 @@ module Hyrax
|
|
23
23
|
def share_options_disabled?
|
24
24
|
all_settings_disabled? || !sharable
|
25
25
|
end
|
26
|
-
|
27
|
-
##
|
28
|
-
# @return [Boolean]
|
29
|
-
def collections?
|
30
|
-
collection_type.collections.any?
|
31
|
-
end
|
32
26
|
end
|
33
27
|
end
|
34
28
|
end
|
@@ -81,6 +81,15 @@ module Hyrax
|
|
81
81
|
secondary_terms.any?
|
82
82
|
end
|
83
83
|
|
84
|
+
##
|
85
|
+
# This feature is not supported in Valkyrie collections and should be removed as part of #5764
|
86
|
+
# However, the depreciated method is still needed for some specs
|
87
|
+
# @return [] always empty.
|
88
|
+
def select_files
|
89
|
+
Deprecation.warn "`Hyrax::PcdmCollection` does not currently support thumbnail_id. Collection thumbnails need to be redesigned as part of issue #5764"
|
90
|
+
[]
|
91
|
+
end
|
92
|
+
|
84
93
|
private
|
85
94
|
|
86
95
|
def _form_field_definitions
|
@@ -6,7 +6,7 @@ module Hyrax
|
|
6
6
|
module LocationIndexer
|
7
7
|
def to_solr
|
8
8
|
super.tap do |index_document|
|
9
|
-
index_document[:based_near_label_tesim] = based_near_label_lookup(resource.based_near) if resource.respond_to? :based_near
|
9
|
+
index_document[:based_near_label_tesim] = index_document[:based_near_label_sim] = based_near_label_lookup(resource.based_near) if resource.respond_to? :based_near
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -14,7 +14,7 @@ module Hyrax
|
|
14
14
|
|
15
15
|
def based_near_label_lookup(locations)
|
16
16
|
locations.map do |loc|
|
17
|
-
location_service.full_label(loc)
|
17
|
+
location_service.full_label(loc) if loc.present?
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -101,6 +101,10 @@ module Hyrax
|
|
101
101
|
|
102
102
|
# attributes set by fits for video
|
103
103
|
solr_doc['aspect_ratio_tesim'] = file_metadata.aspect_ratio if file_metadata.aspect_ratio.present?
|
104
|
+
|
105
|
+
# support for derivatives download
|
106
|
+
derivatives = resource.extensions_and_mime_types
|
107
|
+
solr_doc['extensions_and_mime_types_ssm'] = derivatives.to_json if derivatives.present?
|
104
108
|
end
|
105
109
|
end
|
106
110
|
|
@@ -47,6 +47,7 @@ module Hyrax
|
|
47
47
|
"system_modified_dtsi": resource.updated_at,
|
48
48
|
"has_model_ssim": resource.to_rdf_representation,
|
49
49
|
"human_readable_type_tesim": resource.human_readable_type,
|
50
|
+
"human_readable_type_sim": resource.human_readable_type,
|
50
51
|
"alternate_ids_sim": resource.alternate_ids.map(&:to_s)
|
51
52
|
}.with_indifferent_access
|
52
53
|
end
|
@@ -9,11 +9,9 @@ module Hyrax
|
|
9
9
|
super
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
Hyrax::Indexers::ResourceIndexer.for(*args, **kwargs)
|
16
|
-
end
|
12
|
+
def self.for(*args, **kwargs)
|
13
|
+
Deprecation.warn "`Hyrax::ValkyrieIndexer.for` is deprecated. Use `Hyrax::Indexers::ResourceIndexer.for` instead."
|
14
|
+
Hyrax::Indexers::ResourceIndexer.for(*args, **kwargs)
|
17
15
|
end
|
18
16
|
end
|
19
17
|
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
##
|
2
|
+
# Responsible for conditionally enqueuing the file and thumbnail migration
|
3
|
+
# logic of an ActiveFedora object.
|
4
|
+
class MigrateFilesToValkyrieJob < Hyrax::ApplicationJob
|
5
|
+
##
|
6
|
+
#
|
7
|
+
# @param resource [Hyrax::FileSet]
|
8
|
+
def perform(resource)
|
9
|
+
migrate_derivatives!(resource:)
|
10
|
+
# need to reload file_set to get the derivative ids
|
11
|
+
resource = Hyrax.query_service.find_by(id: resource.id)
|
12
|
+
migrate_files!(resource: resource)
|
13
|
+
end
|
14
|
+
|
15
|
+
def attribute_mapping
|
16
|
+
return @attribute_mapping if @attribute_mapping
|
17
|
+
@attribute_mapping = %w[
|
18
|
+
aspect_ratio bit_depth bit_rate byte_order capture_device channels character_count character_set
|
19
|
+
checksum color_map color_space compression creator data_format duration exif_version file_title
|
20
|
+
fits_version format_label frame_rate gps_timestamp graphics_count height image_producer language
|
21
|
+
latitude line_count longitude markup_basis markup_language offset orientation page_count
|
22
|
+
paragraph_count profile_name profile_version recorded_size sample_rate scanning_software
|
23
|
+
table_count well_formed width word_count ].inject({}) { |j, i| j[i] = i; j}
|
24
|
+
@attribute_mapping['recorded_size'] = 'file_size'
|
25
|
+
@attribute_mapping['channels'] = 'alpha_channels'
|
26
|
+
@attribute_mapping['checksum'] = 'original_checksum'
|
27
|
+
@attribute_mapping
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def migrate_derivatives!(resource:)
|
33
|
+
# @todo should we trigger a job if the member is a child work?
|
34
|
+
paths = Hyrax::DerivativePath.derivatives_for_reference(resource)
|
35
|
+
paths.each do |path|
|
36
|
+
container = container_for(path)
|
37
|
+
mime_type = Marcel::MimeType.for(extension: File.extname(path))
|
38
|
+
directives = { url: path, container: container, mime_type: mime_type }
|
39
|
+
File.open(path, 'rb') do |content|
|
40
|
+
Hyrax::ValkyriePersistDerivatives.call(content, directives)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
##
|
46
|
+
# Move the ActiveFedora files out of ActiveFedora's domain and into the
|
47
|
+
# configured {Hyrax.storage_adapter}'s domain.
|
48
|
+
def migrate_files!(resource:)
|
49
|
+
return unless resource.respond_to?(:file_ids)
|
50
|
+
|
51
|
+
files = Hyrax.custom_queries.find_many_file_metadata_by_ids(ids: resource.file_ids)
|
52
|
+
files.each do |file|
|
53
|
+
# If it doesn't start with fedora, we've likely already migrated it.
|
54
|
+
next unless /^fedora:/.match?(file.file_identifier.to_s)
|
55
|
+
resource.file_ids.delete(file.id)
|
56
|
+
|
57
|
+
Tempfile.create do |tempfile|
|
58
|
+
tempfile.binmode
|
59
|
+
tempfile.write(URI.open(file.file_identifier.to_s.gsub("fedora:", "http:")).read)
|
60
|
+
tempfile.rewind
|
61
|
+
|
62
|
+
# valkyrie_file = Hyrax.storage_adapter.upload(resource: resource, file: tempfile, original_filename: file.original_filename)
|
63
|
+
valkyrie_file = Hyrax::ValkyrieUpload.file(
|
64
|
+
filename: resource.label,
|
65
|
+
file_set: resource,
|
66
|
+
io: tempfile,
|
67
|
+
use: file.pcdm_use.select {|use| Hyrax::FileMetadata::Use.use_list.include?(use)},
|
68
|
+
user: User.find_or_initialize_by(User.user_key_field => resource.depositor),
|
69
|
+
mime_type: file.mime_type,
|
70
|
+
skip_derivatives: true
|
71
|
+
)
|
72
|
+
valkyrie_file = copy_attributes(valkyrie_file:, original_file: file)
|
73
|
+
Hyrax.persister.save(resource: valkyrie_file)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
# reindex the file set after migrating files to include characterization info
|
77
|
+
Hyrax.index_adapter.save(resource: resource)
|
78
|
+
end
|
79
|
+
|
80
|
+
def copy_attributes(valkyrie_file:, original_file:)
|
81
|
+
attribute_mapping.each do |k, v|
|
82
|
+
valkyrie_file.set_value(k, original_file.send(v))
|
83
|
+
end
|
84
|
+
# Special case as this property isn't in the characterization proxy
|
85
|
+
valkyrie_file.set_value('alternate_ids', original_file.alternate_ids)
|
86
|
+
valkyrie_file
|
87
|
+
end
|
88
|
+
|
89
|
+
##
|
90
|
+
# Map from the file name used for the derivative to a valid option for
|
91
|
+
# container that ValkyriePersistDerivatives can convert into a
|
92
|
+
# Hyrax::Metadata::Use
|
93
|
+
#
|
94
|
+
# @param filename [String] the name of the derivative file: i.e. 'x-thumbnail.jpg'
|
95
|
+
# @return [String]
|
96
|
+
def container_for(filename)
|
97
|
+
# we want the portion between the '-' and the '.'
|
98
|
+
file_blob = File.basename(filename, '.*').split('-').last
|
99
|
+
|
100
|
+
case file_blob
|
101
|
+
when 'thumbnail'
|
102
|
+
'thumbnail_image'
|
103
|
+
when 'txt', 'json', 'xml'
|
104
|
+
'extracted_text'
|
105
|
+
else
|
106
|
+
'service_file'
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# migrates models from AF to valkyrie
|
4
|
+
class MigrateResourcesJob < ApplicationJob
|
5
|
+
attr_writer :errors
|
6
|
+
# input [Array>>String] Array of ActiveFedora model names to migrate to valkyrie objects
|
7
|
+
# defaults to AdminSet & Collection models if empty
|
8
|
+
def perform(ids: [], models: ['AdminSet', 'Collection'])
|
9
|
+
if ids.blank?
|
10
|
+
models.each do |model|
|
11
|
+
model.constantize.find_each do |item|
|
12
|
+
migrate(item.id)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
else
|
16
|
+
ids.each do |id|
|
17
|
+
migrate(id)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
raise errors.inspect if errors.present?
|
21
|
+
end
|
22
|
+
|
23
|
+
def errors
|
24
|
+
@errors ||= []
|
25
|
+
end
|
26
|
+
|
27
|
+
def migrate(id)
|
28
|
+
resource = Hyrax.query_service.find_by(id: id)
|
29
|
+
return unless resource.wings? # this resource has already been converted
|
30
|
+
result = MigrateResourceService.new(resource: resource).call
|
31
|
+
errors << result unless result.success?
|
32
|
+
result
|
33
|
+
end
|
34
|
+
end
|
@@ -16,8 +16,9 @@ class ValkyrieCreateDerivativesJob < Hyrax::ApplicationJob
|
|
16
16
|
|
17
17
|
def reindex_parent(file_set_id)
|
18
18
|
file_set = Hyrax.query_service.find_by(id: file_set_id)
|
19
|
+
return unless file_set
|
19
20
|
parent = Hyrax.custom_queries.find_parent_work(resource: file_set)
|
20
|
-
return unless parent
|
21
|
+
return unless parent&.thumbnail_id == file_set.id
|
21
22
|
Hyrax.logger.debug { "Reindexing #{parent.id} due to creation of thumbnail derivatives." }
|
22
23
|
Hyrax.index_adapter.save(resource: parent)
|
23
24
|
end
|
data/app/models/admin_set.rb
CHANGED
@@ -17,6 +17,7 @@
|
|
17
17
|
# @see Hyrax::DefaultAdminSetActor
|
18
18
|
# @see Hyrax::ApplyPermissionTemplateActor
|
19
19
|
class AdminSet < ActiveFedora::Base
|
20
|
+
include Hydra::PCDM::CollectionBehavior
|
20
21
|
include Hydra::AccessControls::Permissions
|
21
22
|
include Hyrax::Noid
|
22
23
|
include Hyrax::HumanReadableType
|