hyrax 5.0.0.rc1 → 5.0.0.rc3
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 +25 -4
- data/.dassie/.env +5 -1
- data/.dassie/Gemfile +27 -42
- data/.dassie/Gemfile.dassie +2 -0
- data/.dassie/app/assets/config/manifest.js +2 -0
- data/.dassie/app/assets/stylesheets/hyrax.scss +1 -0
- data/.dassie/app/listeners/hyrax_listener.rb +81 -0
- data/.dassie/config/environments/test.rb +0 -5
- data/.dassie/config/initializers/hyrax.rb +5 -0
- data/.dassie/config/initializers/publisher.rb +3 -0
- data/.dassie/config/initializers/riiif.rb +82 -11
- data/.dassie/config/metadata/collection_resource.yaml +3 -0
- data/.dassie/config/metadata/monograph.yaml +8 -0
- data/.dassie/config/metadata/sample_metadata.yaml +1 -0
- data/.dassie/config/redis.yml +2 -0
- data/.dassie/db/migrate/20230725222727_create_hyrax_counter_metrics.hyrax.rb +14 -0
- data/.dassie/db/migrate/20230803165135_change_work_id_to_string.rb +5 -0
- data/.dassie/db/migrate/20230808102105_add_indices_to_hyrax_counter_metrics.hyrax.rb +8 -0
- data/.dassie/db/migrate/20230821153635_add_fields_to_counter_metric.rb +8 -0
- data/.dassie/db/schema.rb +20 -1
- data/.dockerignore +2 -1
- data/.gitignore +5 -1
- data/.koppie/.env +10 -4
- data/.koppie/Gemfile +10 -12
- data/.koppie/Gemfile.koppie +2 -0
- data/.koppie/Rakefile +0 -2
- data/.koppie/app/listeners/hyrax_listener.rb +81 -0
- data/.koppie/app/models/ability.rb +1 -5
- data/.koppie/app/models/collection.rb +1 -1
- data/.koppie/app/models/user.rb +0 -2
- data/.koppie/config/analytics.yml +5 -5
- data/.koppie/config/application.rb +2 -1
- data/.koppie/config/arkivo.yml +6 -0
- data/.koppie/config/blacklight.yml +2 -2
- data/.koppie/config/features.yml +2 -0
- data/.koppie/config/initializers/1_valkyrie.rb +29 -6
- data/.koppie/config/initializers/arkivo_constraint.rb +12 -0
- data/.koppie/config/initializers/hyrax.rb +2 -2
- data/.koppie/config/initializers/publisher.rb +3 -0
- data/.koppie/config/initializers/riiif.rb +84 -11
- data/.koppie/config/metadata/collection_resource.yaml +19 -1
- data/.koppie/config/metadata/generic_work.yaml +2 -0
- data/.koppie/config/metadata/monograph.yaml +10 -0
- data/.koppie/config/metadata/sample_metadata.yaml +4 -0
- data/.koppie/config/role_map.yml +3 -25
- data/.koppie/config/routes.rb +1 -2
- data/.koppie/config/solr.yml +1 -1
- data/.koppie/config/valkyrie_index.yml +4 -10
- data/.koppie/config/zotero.yml +6 -0
- data/.koppie/db/migrate/20230725222727_create_hyrax_counter_metrics.hyrax.rb +14 -0
- data/.koppie/db/migrate/20230803165135_change_work_id_to_string.rb +5 -0
- data/.koppie/db/schema.rb +12 -1
- data/CONTAINERS.md +39 -4
- data/Dockerfile +25 -13
- data/Gemfile +8 -24
- data/Gemfile.dassie +2 -0
- data/Gemfile.koppie +2 -0
- data/README.md +2 -1
- data/Rakefile +0 -11
- data/app/actors/hyrax/actors/base_actor.rb +6 -3
- data/app/actors/hyrax/actors/embargo_actor.rb +3 -6
- data/app/actors/hyrax/actors/file_actor.rb +1 -1
- data/app/actors/hyrax/actors/lease_actor.rb +3 -6
- data/app/assets/javascripts/hyrax/batch_select_all.js +1 -1
- data/app/assets/javascripts/hyrax/file_manager/member.es6 +1 -1
- data/app/assets/javascripts/hyrax/save_work/uploaded_files.es6 +10 -2
- data/app/assets/stylesheets/hyrax/_file-listing.scss +0 -2
- data/app/assets/stylesheets/hyrax/_work-show.scss +19 -3
- data/app/assets/stylesheets/hyrax/sidebar.scss +29 -1
- data/app/controllers/concerns/hyrax/collections_controller_behavior.rb +1 -1
- data/app/controllers/concerns/hyrax/embargoes_controller_behavior.rb +7 -1
- data/app/controllers/concerns/hyrax/leases_controller_behavior.rb +7 -1
- data/app/controllers/concerns/hyrax/local_file_downloads_controller_behavior.rb +12 -19
- data/app/controllers/concerns/hyrax/stream_file_downloads_controller_behavior.rb +54 -0
- data/app/controllers/concerns/hyrax/valkyrie_downloads_controller_behavior.rb +52 -18
- data/app/controllers/concerns/hyrax/works_controller_behavior.rb +69 -23
- data/app/controllers/hyrax/admin/admin_sets_controller.rb +2 -2
- data/app/controllers/hyrax/admin/analytics/work_reports_controller.rb +5 -5
- data/app/controllers/hyrax/api/items_controller.rb +2 -3
- data/app/controllers/hyrax/batch_edits_controller.rb +6 -6
- data/app/controllers/hyrax/batch_uploads_controller.rb +5 -1
- data/app/controllers/hyrax/dashboard/collections_controller.rb +6 -3
- data/app/controllers/hyrax/downloads_controller.rb +1 -0
- data/app/controllers/hyrax/file_sets_controller.rb +51 -7
- data/app/controllers/hyrax/my/collections_controller.rb +3 -1
- data/app/controllers/hyrax/single_use_links_viewer_controller.rb +16 -2
- data/app/forms/concerns/hyrax/basic_metadata_form_fields_behavior.rb +39 -0
- data/app/forms/concerns/hyrax/contained_in_works_behavior.rb +24 -0
- data/app/forms/concerns/hyrax/deposit_agreement_behavior.rb +12 -0
- data/app/forms/concerns/hyrax/leaseability_behavior.rb +49 -0
- data/app/forms/concerns/hyrax/permission_behavior.rb +20 -0
- data/app/forms/hyrax/forms/administrative_set_form.rb +1 -5
- data/app/forms/hyrax/forms/collection_form.rb +16 -12
- data/app/forms/hyrax/forms/dashboard/nest_collection_form.rb +0 -34
- data/app/forms/hyrax/forms/file_set_form.rb +7 -2
- data/app/forms/hyrax/forms/pcdm_collection_form.rb +1 -5
- data/app/forms/hyrax/forms/pcdm_object_form.rb +13 -1
- data/app/forms/hyrax/forms/permission_template_form.rb +0 -7
- data/app/forms/hyrax/forms/resource_batch_edit_form.rb +55 -22
- data/app/forms/hyrax/forms/resource_form.rb +31 -114
- data/app/forms/hyrax/forms.rb +52 -0
- data/app/helpers/hyrax/dashboard_helper_behavior.rb +13 -0
- data/app/helpers/hyrax/hyrax_helper_behavior.rb +2 -0
- data/app/indexers/concerns/hyrax/location_indexer.rb +25 -0
- data/app/indexers/{hyrax → concerns/hyrax}/permission_indexer.rb +2 -2
- data/app/indexers/{hyrax → concerns/hyrax}/visibility_indexer.rb +1 -1
- data/app/indexers/hyrax/administrative_set_indexer.rb +5 -17
- data/app/indexers/hyrax/indexers/administrative_set_indexer.rb +25 -0
- data/app/indexers/hyrax/indexers/file_set_indexer.rb +144 -0
- data/app/indexers/hyrax/indexers/pcdm_collection_indexer.rb +27 -0
- data/app/indexers/hyrax/indexers/pcdm_object_indexer.rb +72 -0
- data/app/indexers/hyrax/indexers/resource_indexer.rb +86 -0
- data/app/indexers/hyrax/indexers.rb +54 -0
- data/app/indexers/hyrax/pcdm_collection_indexer.rb +5 -26
- data/app/indexers/hyrax/valkyrie_collection_indexer.rb +6 -4
- data/app/indexers/hyrax/valkyrie_file_set_indexer.rb +5 -141
- data/app/indexers/hyrax/valkyrie_indexer.rb +8 -112
- data/app/indexers/hyrax/valkyrie_work_indexer.rb +5 -63
- data/app/indexers/hyrax/work_indexer.rb +1 -0
- data/app/inputs/controlled_vocabulary_input.rb +1 -1
- data/app/jobs/characterize_job.rb +1 -1
- data/app/jobs/create_work_job.rb +37 -4
- data/app/jobs/valkyrie_characterization_job.rb +9 -0
- data/app/jobs/valkyrie_ingest_job.rb +1 -3
- data/app/models/admin_set.rb +20 -1
- data/app/models/collection.rb +5 -0
- data/app/models/collection_branding_info.rb +2 -9
- data/app/models/concerns/hyrax/ability/admin_set_ability.rb +13 -28
- data/app/models/concerns/hyrax/ability/collection_ability.rb +26 -28
- data/app/models/concerns/hyrax/ability/resource_ability.rb +19 -0
- data/app/models/concerns/hyrax/ability.rb +12 -9
- data/app/models/concerns/hyrax/collection_behavior.rb +12 -12
- data/app/models/concerns/hyrax/solr_document_behavior.rb +33 -6
- data/app/models/concerns/hyrax/work_behavior.rb +4 -0
- data/app/models/featured_work.rb +12 -4
- data/app/models/file_set.rb +5 -0
- data/app/models/hyrax/administrative_set.rb +1 -1
- data/app/models/hyrax/change_set.rb +2 -2
- data/app/models/hyrax/counter_metric.rb +7 -0
- data/app/models/hyrax/file_metadata.rb +37 -9
- data/app/models/hyrax/file_set.rb +77 -24
- data/app/models/hyrax/group.rb +9 -38
- data/app/models/hyrax/group_behavior.rb +58 -0
- data/app/models/hyrax/model_registry.rb +111 -0
- data/app/models/hyrax/orcid_validator.rb +0 -6
- data/app/models/hyrax/pcdm_collection.rb +1 -7
- data/app/models/hyrax/resource.rb +66 -8
- data/app/models/hyrax/statistic.rb +1 -1
- data/app/models/hyrax/work.rb +3 -12
- data/app/presenters/hyrax/collapsable_section_presenter.rb +7 -3
- data/app/presenters/hyrax/collection_presenter.rb +0 -17
- data/app/presenters/hyrax/embargo_presenter.rb +4 -0
- data/app/presenters/hyrax/file_set_presenter.rb +8 -6
- data/app/presenters/hyrax/lease_presenter.rb +4 -0
- data/app/presenters/hyrax/menu_presenter.rb +14 -2
- data/app/presenters/hyrax/pcdm_member_presenter_factory.rb +7 -5
- data/app/presenters/hyrax/version_list_presenter.rb +25 -14
- data/app/presenters/hyrax/version_presenter.rb +19 -4
- data/app/search_builders/hyrax/admin_set_search_builder.rb +1 -1
- data/app/search_builders/hyrax/catalog_search_builder.rb +2 -2
- data/app/search_builders/hyrax/dashboard/collections_search_builder.rb +5 -3
- data/app/search_builders/hyrax/exposed_models_relation.rb +1 -1
- data/app/search_builders/hyrax/file_set_search_builder.rb +1 -1
- data/app/search_builders/hyrax/filter_by_type.rb +3 -2
- data/app/search_builders/hyrax/member_with_files_search_builder.rb +1 -1
- data/app/search_builders/hyrax/my/collections_search_builder.rb +2 -2
- data/app/search_builders/hyrax/my/find_works_search_builder.rb +8 -3
- data/app/services/hyrax/access_control_list.rb +21 -4
- data/app/services/hyrax/action/create_valkyrie_work.rb +80 -0
- data/app/services/hyrax/admin_set_create_service.rb +7 -20
- data/app/services/hyrax/admin_set_service.rb +2 -2
- data/app/services/hyrax/characterization/valkyrie_characterization_service.rb +5 -0
- data/app/services/hyrax/collections/collection_member_search_service.rb +2 -0
- data/app/services/hyrax/collections/collection_member_service.rb +1 -1
- data/app/services/hyrax/collections/permissions_service.rb +27 -9
- data/app/services/hyrax/custom_queries/find_collections_by_type.rb +1 -1
- data/app/services/hyrax/custom_queries/find_file_metadata.rb +1 -1
- data/app/services/hyrax/custom_queries/navigators/find_files.rb +1 -1
- data/app/services/hyrax/custom_queries/navigators/parent_work_navigator.rb +1 -1
- data/app/services/hyrax/edit_permissions_service.rb +1 -1
- data/app/services/hyrax/embargo_manager.rb +44 -17
- data/app/services/hyrax/embargo_service.rb +12 -10
- data/app/services/hyrax/file_set_derivatives_service.rb +11 -11
- data/app/services/hyrax/file_set_file_service.rb +21 -10
- data/app/services/hyrax/fixity_check_failure_service.rb +1 -1
- data/app/services/hyrax/form_factory.rb +1 -1
- data/app/services/hyrax/identifier/dispatcher.rb +9 -2
- data/app/services/hyrax/lease_manager.rb +39 -16
- data/app/services/hyrax/lease_service.rb +12 -6
- data/app/services/hyrax/listeners/acl_index_listener.rb +1 -1
- data/app/services/hyrax/listeners/active_fedora_acl_index_listener.rb +1 -1
- data/app/services/hyrax/listeners/file_metadata_listener.rb +14 -6
- data/app/services/hyrax/listeners/member_cleanup_listener.rb +12 -24
- data/app/services/hyrax/listeners/metadata_index_listener.rb +11 -0
- data/app/services/hyrax/listeners/object_lifecycle_listener.rb +5 -1
- data/app/services/hyrax/listeners/trophy_cleanup_listener.rb +2 -1
- data/app/services/hyrax/listeners/workflow_listener.rb +13 -0
- data/app/services/hyrax/listeners.rb +2 -1
- data/app/services/hyrax/location_service.rb +3 -0
- data/app/services/hyrax/lock_manager.rb +1 -2
- data/app/services/hyrax/multiple_membership_checker.rb +1 -1
- data/app/services/hyrax/simple_schema_loader.rb +32 -1
- data/app/services/hyrax/solr_service.rb +19 -5
- data/app/services/hyrax/statistics/collections/over_time.rb +1 -1
- data/app/services/hyrax/statistics/query_service.rb +6 -0
- data/app/services/hyrax/valkyrie_persist_derivatives.rb +12 -5
- data/app/services/hyrax/valkyrie_upload.rb +13 -27
- data/app/services/hyrax/versioning_service.rb +29 -15
- data/app/services/hyrax/work_uploads_handler.rb +6 -5
- data/app/validators/hyrax/collection_membership_validator.rb +1 -1
- data/app/views/_user_util_links.html.erb +1 -1
- data/app/views/catalog/_search_form.html.erb +1 -1
- data/app/views/collections/edit_fields/_based_near.html.erb +11 -7
- data/app/views/hyrax/admin/admin_sets/_form_participants.html.erb +67 -67
- data/app/views/hyrax/admin/admin_sets/edit.html.erb +1 -1
- data/app/views/hyrax/admin/collection_types/_form_participants.html.erb +3 -1
- data/app/views/hyrax/admin/collection_types/index.html.erb +1 -1
- data/app/views/hyrax/base/_attribute_rows.html.erb +1 -0
- data/app/views/hyrax/base/_base_form_files_prepend.html.erb +4 -0
- data/app/views/hyrax/base/_file_manager_resource_form.html.erb +1 -1
- data/app/views/hyrax/base/_form_files.html.erb +65 -64
- data/app/views/hyrax/base/_form_visibility_component.html.erb +4 -4
- data/app/views/hyrax/base/_show_actions.html.erb +1 -1
- data/app/views/hyrax/base/_workflow_actions.html.erb +25 -23
- data/app/views/hyrax/base/show.html.erb +2 -3
- data/app/views/hyrax/base/show.json.jbuilder +2 -1
- data/app/views/hyrax/collections/_show_document_list_row.html.erb +1 -1
- data/app/views/hyrax/collections/show.html.erb +7 -9
- data/app/views/hyrax/dashboard/_sidebar.html.erb +4 -3
- data/app/views/hyrax/dashboard/collections/_form_share_table.html.erb +2 -2
- 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/collections/_sort_and_per_page.html.erb +3 -3
- data/app/views/hyrax/file_sets/_versioning.html.erb +5 -5
- data/app/views/hyrax/file_sets/media_display/_audio.html.erb +5 -5
- data/app/views/hyrax/file_sets/media_display/_default.html.erb +1 -1
- data/app/views/hyrax/file_sets/media_display/_video.html.erb +3 -3
- data/app/views/hyrax/my/_search_form.html.erb +1 -1
- data/app/views/hyrax/my/facet.html.erb +1 -1
- data/app/views/hyrax/notifications/_notifications.html.erb +1 -1
- data/app/views/hyrax/users/_vitals.html.erb +1 -1
- data/app/views/layouts/_head_tag_content.html.erb +1 -0
- data/app/views/shared/_footer.html.erb +1 -1
- data/bin/dev-entrypoint.sh +13 -0
- data/chart/hyrax/Chart.yaml +5 -5
- data/chart/hyrax/templates/_helpers.tpl +8 -0
- data/chart/hyrax/templates/configmap-env.yaml +1 -1
- data/chart/hyrax/values.yaml +12 -1
- data/config/initializers/file_length_patch.rb +10 -0
- data/config/initializers/listeners.rb +1 -1
- data/config/locales/hyrax.de.yml +5 -0
- data/config/locales/hyrax.en.yml +10 -0
- data/config/locales/hyrax.es.yml +5 -0
- data/config/locales/hyrax.fr.yml +5 -0
- data/config/locales/hyrax.it.yml +5 -0
- data/config/locales/hyrax.pt-BR.yml +5 -0
- data/config/locales/hyrax.zh.yml +5 -0
- data/config/metadata/basic_metadata.yaml +53 -0
- data/config/metadata/core_metadata.yaml +6 -0
- data/config/metadata/file_set_metadata.yaml +21 -0
- data/config/metadata/hyrax_internal_metadata.yaml +57 -0
- data/docker-compose-koppie.yml +26 -25
- data/docker-compose-sirenia.yml +202 -0
- data/docker-compose.yml +27 -24
- data/documentation/developing-your-hyrax-based-app.md +77 -60
- data/hyrax.gemspec +18 -12
- data/karma.conf.js +1 -1
- data/lib/generators/hyrax/collection_resource/templates/collection_indexer.rb.erb +1 -1
- data/lib/generators/hyrax/collection_resource/templates/collection_metadata.yaml +2 -0
- data/lib/generators/hyrax/config_generator.rb +12 -0
- data/lib/generators/hyrax/install_generator.rb +37 -7
- data/lib/generators/hyrax/listeners_generator.rb +18 -0
- data/lib/generators/hyrax/models_generator.rb +1 -10
- data/lib/generators/hyrax/riiif_generator.rb +6 -4
- data/lib/generators/hyrax/templates/.env +9 -0
- data/lib/generators/hyrax/templates/.lando.yml +50 -0
- data/lib/generators/hyrax/templates/app/listeners/hyrax_listener.rb +81 -0
- data/lib/generators/hyrax/templates/app/models/file_set.rb +1 -2
- data/lib/generators/hyrax/templates/config/initializers/1_valkyrie.rb +102 -0
- data/lib/generators/hyrax/templates/config/initializers/file_services.rb +6 -0
- data/lib/generators/hyrax/templates/config/initializers/hyrax.rb +41 -5
- data/lib/generators/hyrax/templates/config/initializers/publisher.rb +3 -0
- data/lib/generators/hyrax/templates/config/initializers/riiif.rb +90 -19
- data/lib/generators/hyrax/templates/config/locales/hyrax.de.yml +1 -1
- data/lib/generators/hyrax/templates/config/locales/hyrax.en.yml +1 -1
- data/lib/generators/hyrax/templates/config/locales/hyrax.es.yml +1 -1
- data/lib/generators/hyrax/templates/config/locales/hyrax.fr.yml +1 -1
- data/lib/generators/hyrax/templates/config/locales/hyrax.it.yml +1 -1
- data/lib/generators/hyrax/templates/config/locales/hyrax.pt-BR.yml +1 -1
- data/lib/generators/hyrax/templates/config/locales/hyrax.zh.yml +1 -1
- data/lib/generators/hyrax/templates/config/redis.yml +3 -6
- data/lib/generators/hyrax/templates/config/valkyrie_index.yml +4 -9
- data/lib/generators/hyrax/templates/db/migrate/20230725222727_create_hyrax_counter_metrics.rb.erb +14 -0
- data/lib/generators/hyrax/templates/db/migrate/20230803165135_change_work_id_to_string.rb.erb +5 -0
- data/lib/generators/hyrax/templates/db/migrate/20230808102105_add_indices_to_hyrax_counter_metrics.rb.erb +8 -0
- data/lib/generators/hyrax/templates/db/migrate/20230821153635_add_fields_to_counter_metric.rb.erb +8 -0
- data/lib/generators/hyrax/templates/db/seeds.rb +1 -1
- data/lib/generators/hyrax/work_resource/templates/form.rb.erb +1 -1
- data/lib/generators/hyrax/work_resource/templates/indexer.rb.erb +1 -1
- data/lib/generators/hyrax/work_resource/templates/metadata.yaml +2 -0
- data/lib/hyrax/configuration.rb +241 -55
- data/lib/hyrax/controlled_vocabularies/location.rb +7 -1
- data/lib/hyrax/engine.rb +0 -1
- data/lib/hyrax/form_fields.rb +6 -0
- data/lib/hyrax/indexer.rb +1 -1
- data/lib/hyrax/publisher.rb +9 -2
- data/lib/hyrax/redis_event_store.rb +7 -8
- data/lib/hyrax/resource_name.rb +4 -0
- data/lib/hyrax/resource_sync/change_list_writer.rb +1 -1
- data/lib/hyrax/resource_sync/resource_list_writer.rb +1 -1
- data/lib/hyrax/specs/capybara.rb +26 -42
- data/lib/hyrax/specs/shared_specs/hydra_works.rb +112 -27
- data/lib/hyrax/specs/shared_specs/indexers.rb +25 -7
- data/lib/hyrax/transactions/admin_set_destroy.rb +2 -1
- data/lib/hyrax/transactions/collection_destroy.rb +3 -2
- data/lib/hyrax/transactions/container.rb +47 -0
- data/lib/hyrax/transactions/file_metadata_destroy.rb +20 -0
- data/lib/hyrax/transactions/file_set_destroy.rb +3 -1
- data/lib/hyrax/transactions/file_set_update.rb +21 -0
- data/lib/hyrax/transactions/steps/add_to_parent.rb +2 -1
- data/lib/hyrax/transactions/steps/check_for_default_admin_set.rb +32 -0
- data/lib/hyrax/transactions/steps/check_for_empty_admin_set.rb +1 -1
- data/lib/hyrax/transactions/steps/delete_all_file_metadata.rb +46 -0
- data/lib/hyrax/transactions/steps/delete_all_file_sets.rb +46 -0
- data/lib/hyrax/transactions/steps/file_metadata_delete.rb +40 -0
- data/lib/hyrax/transactions/steps/remove_from_membership.rb +45 -0
- data/lib/hyrax/transactions/steps/save.rb +2 -1
- data/lib/hyrax/transactions/steps/set_user_as_creator.rb +1 -1
- data/lib/hyrax/transactions/steps/update_work_members.rb +2 -0
- data/lib/hyrax/transactions/work_destroy.rb +3 -2
- data/lib/hyrax/version.rb +1 -1
- data/lib/hyrax.rb +1 -0
- data/lib/tasks/collection_type_global_id.rake +9 -4
- data/lib/tasks/embargo_lease.rake +2 -0
- data/lib/valkyrie/indexing/solr/indexing_adapter.rb +22 -6
- data/lib/wings/active_fedora_converter/default_work.rb +4 -5
- data/lib/wings/active_fedora_converter/file_metadata_node.rb +1 -1
- data/lib/wings/active_fedora_converter.rb +6 -0
- data/lib/wings/attribute_transformer.rb +24 -17
- data/lib/wings/model_registry.rb +8 -0
- data/lib/wings/model_transformer.rb +19 -10
- data/lib/wings/orm_converter.rb +27 -18
- data/lib/wings/services/custom_queries/find_ids_by_model.rb +2 -2
- data/lib/wings/setup.rb +2 -2
- data/lib/wings/valkyrie/query_service.rb +5 -2
- data/lib/wings/valkyrie/storage.rb +8 -90
- data/lib/wings.rb +8 -0
- data/spec/factories/access_control.rb +12 -0
- data/spec/factories/admin_sets.rb +32 -0
- data/spec/factories/admin_sets_lw.rb +222 -0
- data/spec/factories/administrative_sets.rb +79 -0
- data/spec/factories/api_items.rb +92 -0
- data/spec/factories/collection_branding_infos.rb +12 -0
- data/spec/factories/collection_type_participants.rb +9 -0
- data/spec/factories/collection_types.rb +139 -0
- data/spec/factories/collections.rb +282 -0
- data/spec/factories/collections_factory.rb +107 -0
- data/spec/factories/content_blocks.rb +5 -0
- data/spec/factories/counter_metrics.rb +12 -0
- data/spec/factories/featured_works.rb +5 -0
- data/spec/factories/file_sets.rb +45 -0
- data/spec/factories/generic_works.rb +200 -0
- data/spec/factories/hyrax_collection.rb +92 -0
- data/spec/factories/hyrax_default_admin_set.rb +7 -0
- data/spec/factories/hyrax_embargo.rb +18 -0
- data/spec/factories/hyrax_file_metadata.rb +92 -0
- data/spec/factories/hyrax_file_set.rb +129 -0
- data/spec/factories/hyrax_lease.rb +18 -0
- data/spec/factories/hyrax_resource.rb +15 -0
- data/spec/factories/hyrax_work.rb +221 -0
- data/spec/factories/object_id.rb +7 -0
- data/spec/factories/operations.rb +22 -0
- data/spec/factories/permission.rb +7 -0
- data/spec/factories/permission_template_accesses.rb +17 -0
- data/spec/factories/permission_templates.rb +111 -0
- data/spec/factories/proxy_deposit_requests.rb +7 -0
- data/spec/factories/single_use_links.rb +14 -0
- data/spec/factories/sipity_entities.rb +17 -0
- data/spec/factories/uploaded_files.rb +11 -0
- data/spec/factories/users.rb +52 -0
- data/spec/factories/workflow_actions.rb +7 -0
- data/spec/factories/workflow_states.rb +7 -0
- data/spec/factories/workflows.rb +7 -0
- data/spec/support/book_resource.rb +36 -0
- data/spec/support/can_can_overrides.rb +43 -0
- data/spec/support/clean_solr.rb +7 -0
- data/spec/support/controller_level_helpers.rb +27 -0
- data/spec/support/factory_helpers.rb +94 -0
- data/spec/support/fakes/fake_actor.rb +22 -0
- data/spec/support/fakes/fake_authority.rb +14 -0
- data/spec/support/fakes/fake_search_builder_scope.rb +44 -0
- data/spec/support/fakes/indexing_adapter.rb +17 -0
- data/spec/support/fakes/test_hydra_group_service.rb +55 -0
- data/spec/support/features/batch_edit_actions.rb +37 -0
- data/spec/support/features/session_helpers.rb +15 -0
- data/spec/support/features/workflow.rb +10 -0
- data/spec/support/features.rb +11 -0
- data/spec/support/form_with_validations.rb +15 -0
- data/spec/support/input_support.rb +12 -0
- data/spec/support/logging_formatter.rb +67 -0
- data/spec/support/matchers/api_responses.rb +27 -0
- data/spec/support/matchers/collection_type_property_matchers.rb +30 -0
- data/spec/support/matchers/embargo.rb +9 -0
- data/spec/support/matchers/lease.rb +9 -0
- data/spec/support/matchers/match_valkyrie_ids_with_af_ids.rb +12 -0
- data/spec/support/matchers/pcdm_matchers.rb +34 -0
- data/spec/support/matchers/permission.rb +31 -0
- data/spec/support/matchers/response_matchers.rb +8 -0
- data/spec/support/optional_example.rb +17 -0
- data/spec/support/rake.rb +42 -0
- data/spec/support/selectors.rb +112 -0
- data/spec/support/shared_examples_for_collection_presenter.rb +44 -0
- data/spec/support/simple_work.rb +28 -0
- data/spec/support/spec_statistic.rb +24 -0
- data/spec/support/speedup.rb +7 -0
- data/spec/support/statistic_helper.rb +10 -0
- data/spec/support/valkyrie_indexing.rb +2 -0
- data/spec/support/wings_models.rb +9 -0
- data/tasks/hyrax_dev.rake +2 -33
- data/template.rb +1 -3
- metadata +184 -84
- data/.engine_cart.yml +0 -3
- data/app/indexers/hyrax/resource_indexer.rb +0 -15
- data/app/services/hyrax/characterization/model_wrapper.rb +0 -0
- data/app/services/hyrax/custom_queries/find_by_collection_type.rb +0 -0
- data/app/services/hyrax/query_service.rb +0 -0
- data/app/views/hyrax/users/_user_util_links_extra.html.erb +0 -0
- data/lib/hyrax/specs/disable_animations_in_test_environment.rb +0 -53
- data/lib/hyrax/specs/shared_specs/valkyrie_storage_versions.rb +0 -9
- /data/app/indexers/{hyrax → concerns/hyrax}/thumbnail_indexer.rb +0 -0
data/.koppie/db/schema.rb
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
#
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
|
-
ActiveRecord::Schema.define(version:
|
13
|
+
ActiveRecord::Schema.define(version: 2023_08_03_165135) do
|
14
14
|
|
15
15
|
# These are extensions that must be enabled in order to support this database
|
16
16
|
enable_extension "plpgsql"
|
@@ -140,6 +140,17 @@ ActiveRecord::Schema.define(version: 2021_12_07_172259) do
|
|
140
140
|
t.index ["machine_id"], name: "index_hyrax_collection_types_on_machine_id", unique: true
|
141
141
|
end
|
142
142
|
|
143
|
+
create_table "hyrax_counter_metrics", force: :cascade do |t|
|
144
|
+
t.string "worktype"
|
145
|
+
t.string "resource_type"
|
146
|
+
t.string "work_id"
|
147
|
+
t.date "date"
|
148
|
+
t.integer "total_item_investigations"
|
149
|
+
t.integer "total_item_requests"
|
150
|
+
t.datetime "created_at", precision: 6, null: false
|
151
|
+
t.datetime "updated_at", precision: 6, null: false
|
152
|
+
end
|
153
|
+
|
143
154
|
create_table "hyrax_default_administrative_set", force: :cascade do |t|
|
144
155
|
t.string "default_admin_set_id", null: false
|
145
156
|
t.datetime "created_at", null: false
|
data/CONTAINERS.md
CHANGED
@@ -5,10 +5,11 @@ Our goal is to provide a practical, reusable reference environment for applicati
|
|
5
5
|
|
6
6
|
The [Hyrax Engine Development](#hyrax-engine-development) is further along than the [Docker Image for Hyrax-based Applications](#docker-image-for-hyrax-based-applications) which is further along than [Deploying to Production](#deploying-to-production).
|
7
7
|
|
8
|
-
There are
|
8
|
+
There are three options for development environments to run:
|
9
9
|
|
10
10
|
- [Dassie](#dassie-internal-test-app-with-activefedora) is the default internal test app that will run an ActiveFedora-based Hyrax web application using Fedora 4 as the backend storage. See [Troubleshooting Dassie](#troubleshooting-dassie) if you encounter any issues.
|
11
11
|
- [Koppie](#koppie-internal-test-app-with-valkyrie-connector-to-postgres) is a newer internal test app that is a Valkyrie-based Hyrax web application that runs with PostGres as backend storage. It does not run ActiveFedora or use Fedora 4. See [Troubleshooting Koppie](#troubleshooting-koppie) if you encounter any issues.
|
12
|
+
- [Sirenia](#sirenia-internal-test-app-with-valkyrie-connector-to-fedora) is Koppie but with Valkyrie configured to use Fedora 6 metadata and storage adapters.
|
12
13
|
|
13
14
|
<!-- NOTE: This title is referenced in the top-level README.md. Keep that in mind if you change it. -->
|
14
15
|
## Hyrax Engine Development
|
@@ -37,6 +38,7 @@ This starts containers for:
|
|
37
38
|
- Redis
|
38
39
|
- Memcached
|
39
40
|
- SideKiq (for background jobs)
|
41
|
+
- Chrome (for feature tests)
|
40
42
|
|
41
43
|
It also runs database migrations. This will also bring up a development application on `http://localhost:3000`.
|
42
44
|
|
@@ -71,8 +73,6 @@ Let's break down the above command:
|
|
71
73
|
|
72
74
|
_**Note:**_ The `bundle exec rspec` portion of the command runs the whole test suite. See the [rspec command documentation](https://github.com/rspec/rspec-core#the-rspec-command) for how to refine your test runs.
|
73
75
|
|
74
|
-
_**Note**: The `/app/samvera/hyrax-webapp` is analogous to the `.internal_test_app` that we generate as part of the Hyrax engine Continuous Integration._
|
75
|
-
|
76
76
|
#### The Docker Container Named "app"
|
77
77
|
|
78
78
|
As a developer, you may need to run commands against the Hyrax-based application and/or the Hyrax engine. Examples
|
@@ -149,6 +149,7 @@ This starts containers for:
|
|
149
149
|
- Redis
|
150
150
|
- Memcached
|
151
151
|
- SideKiq (for background jobs)
|
152
|
+
- Chrome (for feature tests)
|
152
153
|
|
153
154
|
It also runs database migrations. This will also bring up a development application on `http://localhost:3001`.
|
154
155
|
|
@@ -185,13 +186,47 @@ echo "FROM samveralabs/hyrax" > Dockerfile
|
|
185
186
|
|
186
187
|
_This is for applications that mount Hyrax and is separate from the docker containers for Hyrax engine development._
|
187
188
|
|
189
|
+
### Sirenia Internal Test App with Valkyrie Connector to Fedora
|
190
|
+
|
191
|
+
Sirenia uses the same image as koppie. If you have not already done so, follow the build instructions for koppie above.
|
192
|
+
|
193
|
+
Start Sirenia: `docker compose -f docker-compose-sirenia.yml up`
|
194
|
+
|
195
|
+
This starts containers for:
|
196
|
+
|
197
|
+
- a `hyrax` test application (`.sirenia`);
|
198
|
+
- Fedora
|
199
|
+
- Solr
|
200
|
+
- Postgresql
|
201
|
+
- Redis
|
202
|
+
- Memcached
|
203
|
+
- SideKiq (for background jobs)
|
204
|
+
- Chrome (for feature tests)
|
205
|
+
|
206
|
+
It also runs database migrations. This will also bring up a development application on `http://localhost:3002`.
|
207
|
+
|
208
|
+
To stop the containers for the Hyrax-based application, type <kbd>Ctrl</kbd>+<kbd>c</kbd>. To restart the containers run `docker compose -f docker-compose-sirenia.yml up`.
|
209
|
+
|
210
|
+
_**Note:** Starting and stopping Docker in this way will preserve your data between restarts._
|
211
|
+
|
212
|
+
Sirenia runs as a different project than Dassie and Koppie, so it should be possible to run both concurrently (assuming your workstation has enough RAM).
|
213
|
+
|
214
|
+
#### Run rails console on Sirenia
|
215
|
+
|
216
|
+
Currently Sirenia should not be used for running specs. See [Code Changes and Testing](#code-changes-and-testing) under Dassie instead until the specs can be updated for a valkyrie only environment.
|
217
|
+
|
218
|
+
```sh
|
219
|
+
docker compose -f docker-compose-sirenia.yml up
|
220
|
+
docker compose -f docker-compose-sirenia.yml exec app bundle exec rails c
|
221
|
+
```
|
222
|
+
|
188
223
|
### Maintaining
|
189
224
|
|
190
225
|
We publish several Hyrax images to the [GitHub container registry][ghcr] under
|
191
226
|
the [Samvera organization][samvera-packages]. To build them:
|
192
227
|
|
193
228
|
```sh
|
194
|
-
export HYRAX_VERSION=v5.0.0.
|
229
|
+
export HYRAX_VERSION=v5.0.0.rc3 # or desired version
|
195
230
|
git checkout hyrax-$HYRAX_VERSION
|
196
231
|
|
197
232
|
docker build --target hyrax-base --tag ghcr.io/samvera/hyrax/hyrax-base:$(git rev-parse HEAD) .
|
data/Dockerfile
CHANGED
@@ -1,8 +1,5 @@
|
|
1
|
-
ARG ALPINE_VERSION=3.
|
2
|
-
ARG RUBY_VERSION=3.2.
|
3
|
-
|
4
|
-
FROM ruby:$RUBY_VERSION-alpine$ALPINE_VERSION as builder
|
5
|
-
RUN apk add build-base curl jemalloc
|
1
|
+
ARG ALPINE_VERSION=3.19
|
2
|
+
ARG RUBY_VERSION=3.2.3
|
6
3
|
|
7
4
|
FROM ruby:$RUBY_VERSION-alpine$ALPINE_VERSION as hyrax-base
|
8
5
|
|
@@ -16,6 +13,14 @@ RUN apk --no-cache upgrade && \
|
|
16
13
|
curl \
|
17
14
|
gcompat \
|
18
15
|
imagemagick \
|
16
|
+
imagemagick-heic \
|
17
|
+
imagemagick-jpeg \
|
18
|
+
imagemagick-jxl \
|
19
|
+
imagemagick-pdf \
|
20
|
+
imagemagick-svg \
|
21
|
+
imagemagick-tiff \
|
22
|
+
imagemagick-webp \
|
23
|
+
jemalloc \
|
19
24
|
tzdata \
|
20
25
|
nodejs \
|
21
26
|
yarn \
|
@@ -33,13 +38,11 @@ USER app
|
|
33
38
|
RUN mkdir -p /app/samvera/hyrax-webapp
|
34
39
|
WORKDIR /app/samvera/hyrax-webapp
|
35
40
|
|
36
|
-
COPY --chown=1001:101 ./bin /app/samvera
|
37
|
-
ENV PATH="/app/samvera:$PATH"
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
COPY --from=builder /usr/lib/libjemalloc.so.2 /usr/local/lib/
|
42
|
-
ENV LD_PRELOAD="/usr/local/lib/libjemalloc.so.2"
|
41
|
+
COPY --chown=1001:101 ./bin/*.sh /app/samvera/
|
42
|
+
ENV PATH="/app/samvera:$PATH" \
|
43
|
+
RAILS_ROOT="/app/samvera/hyrax-webapp" \
|
44
|
+
RAILS_SERVE_STATIC_FILES="1" \
|
45
|
+
LD_PRELOAD="/usr/local/lib/libjemalloc.so.2"
|
43
46
|
|
44
47
|
ENTRYPOINT ["hyrax-entrypoint.sh"]
|
45
48
|
CMD ["bundle", "exec", "puma", "-v", "-b", "tcp://0.0.0.0:3000"]
|
@@ -89,6 +92,13 @@ ONBUILD RUN RAILS_ENV=production SECRET_KEY_BASE=`bin/rake secret` DB_ADAPTER=nu
|
|
89
92
|
|
90
93
|
FROM hyrax-base as hyrax-engine-dev
|
91
94
|
|
95
|
+
USER root
|
96
|
+
RUN apk --no-cache add bash \
|
97
|
+
ffmpeg \
|
98
|
+
mediainfo \
|
99
|
+
perl
|
100
|
+
USER app
|
101
|
+
|
92
102
|
ARG APP_PATH=.dassie
|
93
103
|
ARG BUNDLE_WITHOUT=
|
94
104
|
|
@@ -100,7 +110,9 @@ COPY --chown=1001:101 . /app/samvera/hyrax-engine
|
|
100
110
|
RUN bundle -v && \
|
101
111
|
bundle install --jobs "$(nproc)" && \
|
102
112
|
cd $HYRAX_ENGINE_PATH && \
|
103
|
-
bundle install --jobs "$(nproc)"
|
113
|
+
bundle install --jobs "$(nproc)" && \
|
114
|
+
yarn
|
115
|
+
|
104
116
|
RUN RAILS_ENV=production SECRET_KEY_BASE='fakesecret1234' DB_ADAPTER=nulldb DATABASE_URL='postgresql://fake' bundle exec rake assets:precompile
|
105
117
|
|
106
118
|
|
data/Gemfile
CHANGED
@@ -1,7 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
source 'https://rubygems.org'
|
3
|
+
|
3
4
|
# Please see hyrax.gemspec for dependency information.
|
4
|
-
|
5
|
+
# Install gems from test app
|
6
|
+
if ENV['RAILS_ROOT']
|
7
|
+
test_app_gemfile_path = File.expand_path('Gemfile', ENV['RAILS_ROOT'])
|
8
|
+
eval_gemfile test_app_gemfile_path
|
9
|
+
else
|
10
|
+
gemspec
|
11
|
+
end
|
5
12
|
|
6
13
|
group :development, :test do
|
7
14
|
gem 'benchmark-ips'
|
@@ -13,26 +20,3 @@ group :development, :test do
|
|
13
20
|
gem 'ruby-prof', require: false
|
14
21
|
gem "simplecov", require: false
|
15
22
|
end
|
16
|
-
|
17
|
-
test_app_path = ENV['RAILS_ROOT'] ||
|
18
|
-
ENV.fetch('ENGINE_CART_DESTINATION', File.expand_path('.internal_test_app', File.dirname(__FILE__)))
|
19
|
-
test_app_gemfile = File.expand_path('Gemfile', test_app_path)
|
20
|
-
|
21
|
-
# rubocop:disable Bundler/DuplicatedGem
|
22
|
-
if File.exist?(test_app_gemfile)
|
23
|
-
begin
|
24
|
-
Bundler.ui.info "[Hyrax] Including test application dependencies from #{test_app_gemfile}"
|
25
|
-
eval_gemfile test_app_gemfile
|
26
|
-
rescue Bundler::GemfileError => e
|
27
|
-
Bundler.ui.warn '[Hyrax] Skipping Rails application dependencies:'
|
28
|
-
Bundler.ui.warn e.message
|
29
|
-
end
|
30
|
-
elsif ENV['RAILS_VERSION'] == 'edge'
|
31
|
-
gem 'rails', github: 'rails/rails', source: 'https://rubygems.org'
|
32
|
-
ENV['ENGINE_CART_RAILS_OPTIONS'] = '--edge --skip-turbolinks'
|
33
|
-
elsif ENV['RAILS_VERSION']
|
34
|
-
gem 'rails', ENV['RAILS_VERSION'], source: 'https://rubygems.org'
|
35
|
-
else
|
36
|
-
Bundler.ui.warn '[Hyrax] Skipping all Rails dependency injection'
|
37
|
-
end
|
38
|
-
# rubocop:enable Bundler/DuplicatedGem
|
data/Gemfile.dassie
ADDED
data/Gemfile.koppie
ADDED
data/README.md
CHANGED
@@ -50,7 +50,6 @@ More detailed documentation about Hyrax is available on the [Hyrax Github Wiki](
|
|
50
50
|
|
51
51
|
Hyrax can also work running prerequisite dependencies separately. The following describe ways to do this:
|
52
52
|
* [Developing Your Hyrax-based Application](./documentation/developing-your-hyrax-based-app.md)
|
53
|
-
* [Development setup using Engine Cart and Solr Fedora wrapper](https://github.com/samvera/hyrax/wiki/Development-setup-using-Engine-Cart-and-Solr---Fedora-wrapper)
|
54
53
|
|
55
54
|
## Contribute
|
56
55
|
|
@@ -77,6 +76,8 @@ This software has been developed by and is brought to you by the Samvera communi
|
|
77
76
|
|
78
77
|
![Samvera Logo](./samvera-fall-TM3.svg)
|
79
78
|
|
79
|
+
This project is tested with Browserstack.
|
80
|
+
|
80
81
|
## License
|
81
82
|
|
82
83
|
Hyrax is available under [the Apache 2.0 license](LICENSE).
|
data/Rakefile
CHANGED
@@ -9,17 +9,6 @@ end
|
|
9
9
|
|
10
10
|
Bundler::GemHelper.install_tasks
|
11
11
|
|
12
|
-
task :setup_test_server do
|
13
|
-
require 'engine_cart'
|
14
|
-
EngineCart.load_application!
|
15
|
-
end
|
16
|
-
|
17
12
|
Dir.glob('tasks/*.rake').each { |r| import r }
|
18
13
|
|
19
14
|
task default: :ci
|
20
|
-
|
21
|
-
# Load the test app's rake tasks so they can be run from the app namespace (e.g. app:db:migrate)
|
22
|
-
if File.exist?(File.expand_path(".internal_test_app/Rakefile", __dir__))
|
23
|
-
APP_RAKEFILE = File.expand_path(".internal_test_app/Rakefile", __dir__)
|
24
|
-
load 'rails/tasks/engine.rake'
|
25
|
-
end
|
@@ -69,10 +69,13 @@ module Hyrax
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def save(env, use_valkyrie: false)
|
72
|
-
|
72
|
+
# NOTE: You must call env.curation_concern.save before you attempt to coerce the curation
|
73
|
+
# concern into a valkyrie resource.
|
74
|
+
is_valid = env.curation_concern.save
|
75
|
+
return is_valid unless use_valkyrie
|
73
76
|
|
74
77
|
# don't run validations again on the converted object if they've already passed
|
75
|
-
resource = valkyrie_save(resource: env.curation_concern.valkyrie_resource, is_valid:
|
78
|
+
resource = valkyrie_save(resource: env.curation_concern.valkyrie_resource, is_valid: is_valid)
|
76
79
|
|
77
80
|
# we need to manually set the id and reload, because the actor stack requires
|
78
81
|
# `env.curation_concern` to be the exact same instance throughout.
|
@@ -83,7 +86,7 @@ module Hyrax
|
|
83
86
|
# for now, just hit the validation error again
|
84
87
|
# later we should capture the _err.obj and pass it back
|
85
88
|
# through the environment
|
86
|
-
|
89
|
+
is_valid
|
87
90
|
end
|
88
91
|
|
89
92
|
def apply_save_data_to_curation_concern(env)
|
@@ -14,12 +14,9 @@ module Hyrax
|
|
14
14
|
def destroy
|
15
15
|
case work
|
16
16
|
when Valkyrie::Resource
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
embargo_manager.deactivate!
|
21
|
-
work.embargo = Hyrax.persister.save(resource: embargo_manager.embargo)
|
22
|
-
Hyrax::AccessControlList(work).save
|
17
|
+
Hyrax::EmbargoManager.deactivate_embargo_for(resource: work) &&
|
18
|
+
Hyrax.persister.save(resource: work.embargo) &&
|
19
|
+
Hyrax::AccessControlList(work).save
|
23
20
|
else
|
24
21
|
work.embargo_visibility! # If the embargo has lapsed, update the current visibility.
|
25
22
|
work.deactivate_embargo!
|
@@ -14,12 +14,9 @@ module Hyrax
|
|
14
14
|
def destroy
|
15
15
|
case work
|
16
16
|
when Valkyrie::Resource
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
lease_manager.deactivate!
|
21
|
-
work.lease = Hyrax.persister.save(resource: lease_manager.lease)
|
22
|
-
Hyrax::AccessControlList(work).save
|
17
|
+
Hyrax::LeaseManager.deactivate_lease_for(resource: work) &&
|
18
|
+
Hyrax.persister.save(resource: work.lease) &&
|
19
|
+
Hyrax::AccessControlList(work).save
|
23
20
|
else
|
24
21
|
work.lease_visibility! # If the lease has lapsed, update the current visibility.
|
25
22
|
work.deactivate_lease!
|
@@ -41,7 +41,7 @@
|
|
41
41
|
var checked = $("#check_all")[0]['checked'];
|
42
42
|
|
43
43
|
// check each individual box
|
44
|
-
$("input[type='checkbox'].batch_document_selector").each(function(index, value) {
|
44
|
+
$("input[type='checkbox'].batch_document_selector:not(.disabled)").each(function(index, value) {
|
45
45
|
value['checked'] = checked;
|
46
46
|
});
|
47
47
|
toggleButtons();
|
@@ -10,7 +10,7 @@ export class InputTracker {
|
|
10
10
|
this.notifier = notifier
|
11
11
|
this.element.data("initial-value", this.element.val())
|
12
12
|
this.element.data("tracker", this)
|
13
|
-
this.element.
|
13
|
+
this.element.on("change", this.value_changed)
|
14
14
|
}
|
15
15
|
|
16
16
|
reset() {
|
@@ -3,7 +3,15 @@ export class UploadedFiles {
|
|
3
3
|
constructor(form, callback) {
|
4
4
|
this.form = form
|
5
5
|
this.element = $('#fileupload')
|
6
|
-
this.
|
6
|
+
this.uploadsInProgress = 0
|
7
|
+
this.element.on('fileuploadadded', (e, data) => {
|
8
|
+
this.uploadsInProgress += 1
|
9
|
+
callback(e, data)
|
10
|
+
})
|
11
|
+
this.element.on('fileuploadcompleted', (e, data) => {
|
12
|
+
this.uploadsInProgress -= 1
|
13
|
+
callback(e, data)
|
14
|
+
})
|
7
15
|
this.element.on('fileuploaddestroyed', callback)
|
8
16
|
}
|
9
17
|
|
@@ -13,7 +21,7 @@ export class UploadedFiles {
|
|
13
21
|
}
|
14
22
|
|
15
23
|
get inProgress() {
|
16
|
-
return this.
|
24
|
+
return this.uploadsInProgress > 0;
|
17
25
|
}
|
18
26
|
|
19
27
|
get hasFiles() {
|
@@ -116,6 +116,21 @@ ul.tabular {
|
|
116
116
|
background: #fff;
|
117
117
|
border-color: #e0e0e0;
|
118
118
|
|
119
|
+
& > .btn {
|
120
|
+
padding: 0;
|
121
|
+
border: 0;
|
122
|
+
}
|
123
|
+
|
124
|
+
.btn-primary {
|
125
|
+
margin-bottom: 1rem;
|
126
|
+
}
|
127
|
+
|
128
|
+
.workflow-comments {
|
129
|
+
label {
|
130
|
+
font-weight: bold;
|
131
|
+
}
|
132
|
+
}
|
133
|
+
|
119
134
|
.card-header {
|
120
135
|
background-color: #e6ab5f;
|
121
136
|
color: #ffffff;
|
@@ -128,8 +143,9 @@ ul.tabular {
|
|
128
143
|
.card-body {
|
129
144
|
background-color: #f2f1eb;
|
130
145
|
}
|
131
|
-
}
|
132
146
|
|
133
|
-
.workflow-actions {
|
134
|
-
|
147
|
+
.workflow-actions {
|
148
|
+
background-color: #f8f8f8;
|
149
|
+
padding: 1rem;
|
150
|
+
}
|
135
151
|
}
|
@@ -56,6 +56,29 @@ $gutter-width: $grid-gutter-width/2;
|
|
56
56
|
}
|
57
57
|
}
|
58
58
|
|
59
|
+
&:not(.maximized) {
|
60
|
+
.sidebar-action-text,
|
61
|
+
a span + span,
|
62
|
+
h5 {
|
63
|
+
display: none;
|
64
|
+
}
|
65
|
+
|
66
|
+
.nav li {
|
67
|
+
text-align: center;
|
68
|
+
a {
|
69
|
+
padding-left: 0;
|
70
|
+
padding-right: 0;
|
71
|
+
}
|
72
|
+
.fa {
|
73
|
+
margin-right: 0;
|
74
|
+
}
|
75
|
+
}
|
76
|
+
|
77
|
+
.nav-item {
|
78
|
+
width: $drawer-small;
|
79
|
+
}
|
80
|
+
}
|
81
|
+
|
59
82
|
.sidebar-toggle {
|
60
83
|
cursor: pointer;
|
61
84
|
background-color: $body-background-color;
|
@@ -114,9 +137,14 @@ $gutter-width: $grid-gutter-width/2;
|
|
114
137
|
li {
|
115
138
|
white-space: nowrap;
|
116
139
|
|
117
|
-
> a:
|
140
|
+
> a:focus {
|
141
|
+
color: $admin-sidebar-link-color;
|
142
|
+
}
|
143
|
+
|
144
|
+
> a:hover {
|
118
145
|
text-decoration: none;
|
119
146
|
background-color: $admin-sidebar-link-background-color;
|
147
|
+
color: $admin-sidebar-link-hover-color;
|
120
148
|
}
|
121
149
|
}
|
122
150
|
|
@@ -31,7 +31,13 @@ module Hyrax
|
|
31
31
|
filter_docs_with_edit_access!
|
32
32
|
copy_visibility = []
|
33
33
|
copy_visibility = params[:embargoes].values.map { |h| h[:copy_visibility] } if params[:embargoes]
|
34
|
-
|
34
|
+
|
35
|
+
resources = if Hyrax.config.use_valkyrie?
|
36
|
+
Hyrax.query_service.find_many_by_ids(ids: batch)
|
37
|
+
else
|
38
|
+
Hyrax.custom_queries.find_many_by_alternate_ids(alternate_ids: batch, use_valkyrie: false)
|
39
|
+
end
|
40
|
+
|
35
41
|
resources.each do |resource|
|
36
42
|
if Hyrax.config.use_valkyrie?
|
37
43
|
EmbargoManager.new(resource: resource).release!
|
@@ -29,7 +29,13 @@ module Hyrax
|
|
29
29
|
filter_docs_with_edit_access!
|
30
30
|
copy_visibility = []
|
31
31
|
copy_visibility = params[:leases].values.map { |h| h[:copy_visibility] } if params[:leases]
|
32
|
-
|
32
|
+
|
33
|
+
resources = if Hyrax.config.use_valkyrie?
|
34
|
+
Hyrax.query_service.find_many_by_ids(ids: batch)
|
35
|
+
else
|
36
|
+
Hyrax.custom_queries.find_many_by_alternate_ids(alternate_ids: batch, use_valkyrie: false)
|
37
|
+
end
|
38
|
+
|
33
39
|
resources.each do |resource|
|
34
40
|
if Hyrax.config.use_valkyrie?
|
35
41
|
LeaseManager.new(resource: resource).release!
|
@@ -6,9 +6,7 @@ module Hyrax
|
|
6
6
|
# Handle the HTTP show request
|
7
7
|
def send_local_content
|
8
8
|
response.headers['Accept-Ranges'] = 'bytes'
|
9
|
-
if request.
|
10
|
-
local_content_head
|
11
|
-
elsif request.headers['Range']
|
9
|
+
if request.headers['Range']
|
12
10
|
send_range_for_local_file
|
13
11
|
else
|
14
12
|
send_local_file_contents
|
@@ -26,7 +24,11 @@ module Hyrax
|
|
26
24
|
self.status = 206
|
27
25
|
prepare_local_file_headers
|
28
26
|
# For derivatives stored on the local file system
|
29
|
-
|
27
|
+
if request.head?
|
28
|
+
head status
|
29
|
+
else
|
30
|
+
send_data IO.binread(file, length, from), local_derivative_download_options.merge(status: status)
|
31
|
+
end
|
30
32
|
end
|
31
33
|
|
32
34
|
def send_local_file_contents
|
@@ -34,7 +36,11 @@ module Hyrax
|
|
34
36
|
self.status = 200
|
35
37
|
prepare_local_file_headers
|
36
38
|
# For derivatives stored on the local file system
|
37
|
-
|
39
|
+
if request.head?
|
40
|
+
head status
|
41
|
+
else
|
42
|
+
send_file file, local_derivative_download_options
|
43
|
+
end
|
38
44
|
end
|
39
45
|
|
40
46
|
def local_file_size
|
@@ -54,16 +60,9 @@ module Hyrax
|
|
54
60
|
File.mtime(file) if file.is_a? String
|
55
61
|
end
|
56
62
|
|
57
|
-
# Override
|
58
|
-
# render an HTTP HEAD response
|
59
|
-
def local_content_head
|
60
|
-
response.headers['Content-Length'] = local_file_size.to_s
|
61
|
-
head :ok, content_type: local_file_mime_type
|
62
|
-
end
|
63
|
-
|
64
63
|
# Override
|
65
64
|
def prepare_local_file_headers
|
66
|
-
send_file_headers!
|
65
|
+
send_file_headers! local_derivative_download_options
|
67
66
|
response.headers['Content-Type'] = local_file_mime_type
|
68
67
|
response.headers['Content-Length'] ||= local_file_size.to_s
|
69
68
|
# Prevent Rack::ETag from calculating a digest over body
|
@@ -73,12 +72,6 @@ module Hyrax
|
|
73
72
|
|
74
73
|
private
|
75
74
|
|
76
|
-
# Override the Hydra::Controller::DownloadBehavior#content_options so that
|
77
|
-
# we have an attachement rather than 'inline'
|
78
|
-
def local_content_options
|
79
|
-
{ type: local_file_mime_type, filename: local_file_name, disposition: 'attachment' }
|
80
|
-
end
|
81
|
-
|
82
75
|
# Override this method if you want to change the options sent when downloading
|
83
76
|
# a derivative file
|
84
77
|
def local_derivative_download_options
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Hyrax
|
3
|
+
# Overrides Hydra::Controller:DownloadBehavior handing of HEAD requests to
|
4
|
+
# respond with same headers as a GET request would receive.
|
5
|
+
module StreamFileDownloadsControllerBehavior
|
6
|
+
protected
|
7
|
+
|
8
|
+
# Handle the HTTP show request
|
9
|
+
def send_content
|
10
|
+
response.headers['Accept-Ranges'] = 'bytes'
|
11
|
+
if request.headers['HTTP_RANGE']
|
12
|
+
send_range
|
13
|
+
else
|
14
|
+
send_file_contents
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# rubocop:disable Metrics/AbcSize
|
19
|
+
def send_range
|
20
|
+
_, range = request.headers['HTTP_RANGE'].split('bytes=')
|
21
|
+
from, to = range.split('-').map(&:to_i)
|
22
|
+
to = file.size - 1 unless to
|
23
|
+
length = to - from + 1
|
24
|
+
response.headers['Content-Range'] = "bytes #{from}-#{to}/#{file.size}"
|
25
|
+
response.headers['Content-Length'] = length.to_s
|
26
|
+
self.status = 206
|
27
|
+
prepare_file_headers
|
28
|
+
|
29
|
+
if request.head?
|
30
|
+
head status
|
31
|
+
else
|
32
|
+
stream_body file.stream(request.headers['HTTP_RANGE'])
|
33
|
+
end
|
34
|
+
end
|
35
|
+
# rubocop:enable Metrics/AbcSize
|
36
|
+
|
37
|
+
def send_file_contents
|
38
|
+
return unless stale?(last_modified: file_last_modified, template: false)
|
39
|
+
|
40
|
+
self.status = 200
|
41
|
+
prepare_file_headers
|
42
|
+
|
43
|
+
if request.head?
|
44
|
+
head status
|
45
|
+
else
|
46
|
+
stream_body file.stream
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def file_last_modified
|
51
|
+
file.modified_date
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|