hyrax 3.3.0 → 3.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.circleci/config.yml +26 -17
- data/.dassie/.env +2 -1
- data/.dassie/Gemfile +1 -1
- data/.dassie/app/forms/collection_resource_form.rb +8 -0
- data/.dassie/app/indexers/collection_resource_indexer.rb +8 -0
- data/.dassie/app/models/collection_resource.rb +35 -0
- data/.dassie/config/initializers/file_services.rb +4 -0
- data/.dassie/config/initializers/hyrax.rb +12 -1
- data/.dassie/config/metadata/collection_resource.yaml +23 -0
- data/.dassie/db/seeds.rb +74 -17
- data/.dassie/spec/forms/collection_resource_form_spec.rb +13 -0
- data/.dassie/spec/indexers/collection_resource_indexer_spec.rb +14 -0
- data/.dassie/spec/models/collection_resource_spec.rb +13 -0
- data/.github/release.yml +26 -0
- data/.gitignore +3 -0
- data/.regen +1 -1
- data/.rubocop.yml +1 -1
- data/.rubocop_fixme.yml +22 -3
- data/CONTAINERS.md +18 -13
- data/Dockerfile +4 -3
- data/app/actors/hyrax/actors/file_actor.rb +6 -4
- data/app/actors/hyrax/actors/transfer_request_actor.rb +3 -7
- data/app/assets/javascripts/hyrax/analytics_events.js +8 -2
- data/app/assets/javascripts/hyrax/autocomplete/linked_data.es6 +1 -3
- data/app/assets/javascripts/hyrax/collections_v2.es6 +13 -0
- data/app/controllers/concerns/hyrax/collections_controller_behavior.rb +1 -3
- data/app/controllers/concerns/hyrax/controller.rb +21 -0
- data/app/controllers/concerns/hyrax/works_controller_behavior.rb +83 -59
- data/app/controllers/hyrax/admin/admin_sets_controller.rb +105 -19
- data/app/controllers/hyrax/admin/permission_template_accesses_controller.rb +12 -19
- data/app/controllers/hyrax/batch_edits_controller.rb +12 -3
- data/app/controllers/hyrax/batch_uploads_controller.rb +4 -0
- data/app/controllers/hyrax/citations_controller.rb +1 -1
- data/app/controllers/hyrax/dashboard/collections_controller.rb +176 -83
- data/app/controllers/hyrax/single_use_links_viewer_controller.rb +1 -1
- data/app/forms/hyrax/forms/administrative_set_form.rb +19 -1
- data/app/forms/hyrax/forms/batch_edit_form.rb +1 -1
- data/app/forms/hyrax/forms/collection_form.rb +1 -1
- data/app/forms/hyrax/forms/dashboard/nest_collection_form.rb +21 -6
- data/app/forms/hyrax/forms/pcdm_collection_form.rb +30 -2
- data/app/forms/hyrax/forms/permission_template_form.rb +17 -9
- data/app/forms/hyrax/forms/resource_form.rb +23 -5
- data/app/forms/hyrax/forms/widgets/admin_set_visibility.rb +1 -1
- data/app/helpers/hyrax/collections_helper.rb +14 -0
- data/app/helpers/hyrax/membership_helper.rb +1 -1
- data/app/helpers/hyrax/trophy_helper.rb +1 -1
- data/app/helpers/hyrax/url_helper.rb +1 -1
- data/app/indexers/hyrax/administrative_set_indexer.rb +8 -2
- data/app/indexers/hyrax/deep_indexing_service.rb +1 -1
- data/app/indexers/hyrax/file_set_indexer.rb +1 -0
- data/app/indexers/hyrax/pcdm_collection_indexer.rb +3 -2
- data/app/indexers/hyrax/thumbnail_indexer.rb +31 -0
- data/app/indexers/hyrax/valkyrie_file_set_indexer.rb +6 -6
- data/app/indexers/hyrax/valkyrie_indexer.rb +4 -2
- data/app/indexers/hyrax/valkyrie_work_indexer.rb +13 -0
- data/app/inputs/controlled_vocabulary_input.rb +2 -0
- data/app/jobs/change_depositor_event_job.rb +47 -0
- data/app/jobs/characterize_job.rb +43 -3
- data/app/jobs/concerns/hyrax/members_permission_job_behavior.rb +1 -1
- data/app/jobs/content_depositor_change_event_job.rb +2 -1
- data/app/jobs/hyrax/propagate_change_depositor_job.rb +32 -0
- data/app/jobs/import_url_job.rb +4 -6
- data/app/jobs/inherit_permissions_job.rb +1 -1
- data/app/jobs/valkyrie_create_derivatives_job.rb +25 -0
- data/app/jobs/valkyrie_ingest_job.rb +41 -35
- data/app/models/admin_set.rb +10 -2
- data/app/models/collection_branding_info.rb +8 -6
- data/app/models/concerns/hyrax/collection_behavior.rb +3 -3
- data/app/models/concerns/hyrax/file_set/characterization.rb +7 -1
- data/app/models/concerns/hyrax/solr_document/metadata.rb +1 -0
- data/app/models/concerns/hyrax/solr_document_behavior.rb +9 -3
- data/app/models/concerns/hyrax/user.rb +11 -0
- data/app/models/concerns/hyrax/work_behavior.rb +1 -1
- data/app/models/featured_work_list.rb +0 -1
- data/app/models/hyrax/administrative_set.rb +36 -1
- data/app/models/hyrax/collection_type.rb +2 -2
- data/app/models/hyrax/file_metadata.rb +37 -3
- data/app/models/hyrax/file_set.rb +43 -4
- data/app/models/hyrax/group.rb +19 -0
- data/app/models/hyrax/pcdm_collection.rb +56 -1
- data/app/models/hyrax/permission_template.rb +11 -5
- data/app/models/hyrax/work.rb +91 -0
- data/app/models/job_io_wrapper.rb +1 -1
- data/app/models/proxy_deposit_request.rb +1 -1
- data/app/presenters/hyrax/admin_set_presenter.rb +2 -2
- data/app/presenters/hyrax/member_presenter_factory.rb +2 -4
- data/app/presenters/hyrax/pcdm_member_presenter_factory.rb +2 -2
- data/app/presenters/hyrax/work_show_presenter.rb +10 -6
- data/app/search_builders/hyrax/dashboard/collections_search_builder.rb +2 -2
- data/app/search_builders/hyrax/dashboard/managed_search_filters.rb +44 -4
- data/app/search_builders/hyrax/dashboard/nested_collections_search_builder.rb +2 -2
- data/app/search_builders/hyrax/my/collections_search_builder.rb +11 -4
- data/app/services/hyrax/access_control_list.rb +20 -6
- data/app/services/hyrax/adapters/nesting_index_adapter.rb +3 -3
- data/app/services/hyrax/admin_set_create_service.rb +21 -37
- data/app/services/hyrax/change_content_depositor_service.rb +2 -2
- data/app/services/hyrax/change_depositor_service.rb +70 -0
- data/app/services/hyrax/characterization/valkyrie_characterization_service.rb +4 -6
- data/app/services/hyrax/collections/collection_member_service.rb +3 -5
- data/app/services/hyrax/collections/nested_collection_query_service.rb +24 -12
- data/app/services/hyrax/custom_queries/navigators/child_file_sets_navigator.rb +45 -0
- data/app/services/hyrax/custom_queries/navigators/child_filesets_navigator.rb +7 -2
- data/app/services/hyrax/custom_queries/navigators/parent_work_navigator.rb +54 -0
- data/app/services/hyrax/default_middleware_stack.rb +3 -0
- data/app/services/hyrax/file_set_derivatives_service.rb +21 -2
- data/app/services/hyrax/file_set_type_service.rb +2 -5
- data/app/services/hyrax/listeners/file_metadata_listener.rb +31 -1
- data/app/services/hyrax/listeners/member_cleanup_listener.rb +27 -11
- data/app/services/hyrax/listeners/metadata_index_listener.rb +39 -0
- data/app/services/hyrax/listeners/proxy_deposit_listener.rb +14 -8
- data/app/services/hyrax/location_service.rb +33 -0
- data/app/services/hyrax/multiple_membership_checker.rb +46 -1
- data/app/services/hyrax/resource_visibility_propagator.rb +1 -1
- data/app/services/hyrax/simple_schema_loader.rb +5 -1
- data/app/services/hyrax/solr_query_service.rb +12 -7
- data/app/services/hyrax/thumbnail_path_service.rb +1 -1
- data/app/services/hyrax/valkyrie_persist_derivatives.rb +50 -0
- data/app/services/hyrax/valkyrie_upload.rb +94 -0
- data/app/services/hyrax/work_uploads_handler.rb +0 -10
- data/app/services/hyrax/workflow/workflow_importer.rb +7 -9
- data/app/services/hyrax/workflow/workflow_schema.rb +3 -5
- data/app/strategies/hyrax/strategies/yaml_strategy.rb +4 -6
- data/app/uploaders/hyrax/uploaded_file_uploader.rb +4 -4
- data/app/utils/hyrax/data_destroyers/collection_branding_destroyer.rb +29 -0
- data/app/utils/hyrax/data_destroyers/collection_types_destroyer.rb +26 -0
- data/app/utils/hyrax/data_destroyers/default_admin_set_id_cache_destroyer.rb +26 -0
- data/app/utils/hyrax/data_destroyers/featured_works_destroyer.rb +27 -0
- data/app/utils/hyrax/data_destroyers/permission_templates_destroyer.rb +30 -0
- data/app/utils/hyrax/data_destroyers/repository_metadata_destroyer.rb +42 -0
- data/app/utils/hyrax/data_destroyers/stats_destroyer.rb +33 -0
- data/app/utils/hyrax/data_maintenance.rb +51 -0
- data/app/utils/hyrax/required_data_seeder.rb +21 -0
- data/app/utils/hyrax/required_data_seeders/collection_seeder.rb +26 -0
- data/app/utils/hyrax/required_data_seeders/collection_type_seeder.rb +36 -0
- data/app/utils/hyrax/test_data_seeder.rb +24 -0
- data/app/utils/hyrax/test_data_seeders/collection_seeder.rb +91 -0
- data/app/utils/hyrax/test_data_seeders/collection_type_seeder.rb +72 -0
- data/app/utils/hyrax/test_data_seeders/user_seeder.rb +52 -0
- data/app/validators/hyrax/collection_membership_validator.rb +39 -0
- data/app/views/catalog/_index_header_list_default.html.erb +8 -1
- data/app/views/catalog/_thumbnail_list_default.html.erb +8 -3
- data/app/views/collections/edit_fields/_based_near.html.erb +7 -7
- data/app/views/hyrax/admin/admin_sets/_form_participant_table.html.erb +2 -2
- data/app/views/hyrax/admin/admin_sets/_form_participants.html.erb +2 -2
- data/app/views/hyrax/admin/admin_sets/_form_visibility.html.erb +2 -2
- data/app/views/hyrax/admin/admin_sets/_form_workflow.erb +1 -1
- data/app/views/hyrax/admin/collection_types/index.html.erb +1 -1
- data/app/views/hyrax/base/_form.html.erb +1 -1
- data/app/views/hyrax/base/_form_child_work_relationships.html.erb +1 -1
- data/app/views/hyrax/dashboard/collections/_default_group.html.erb +2 -2
- data/app/views/hyrax/dashboard/collections/_form.html.erb +24 -17
- data/app/views/hyrax/dashboard/collections/_form_branding.html.erb +1 -0
- data/app/views/hyrax/dashboard/collections/_form_discovery.html.erb +6 -3
- data/app/views/hyrax/dashboard/collections/_form_share.html.erb +2 -2
- data/app/views/hyrax/dashboard/collections/_form_share_table.html.erb +3 -3
- data/app/views/hyrax/dashboard/collections/_list_collections.html.erb +2 -2
- data/app/views/hyrax/dashboard/sidebar/_activity.html.erb +1 -1
- data/app/views/hyrax/dashboard/works/_default_group.html.erb +1 -1
- data/app/views/hyrax/dashboard/works/_list_works.html.erb +1 -1
- data/app/views/hyrax/file_sets/_actions.html.erb +2 -2
- data/app/views/hyrax/my/_facet_pagination.html.erb +12 -9
- data/app/views/hyrax/my/_work_action_menu.html.erb +8 -9
- data/app/views/hyrax/my/collections/_default_group.html.erb +2 -2
- data/app/views/hyrax/my/collections/_list_collections.html.erb +2 -2
- data/app/views/hyrax/my/collections/index.html.erb +3 -2
- data/app/views/hyrax/my/works/_default_group.html.erb +1 -1
- data/app/views/hyrax/my/works/_list_works.html.erb +1 -2
- data/app/views/hyrax/my/works/_tabs.html.erb +6 -1
- data/app/views/hyrax/my/works/index.html.erb +4 -2
- data/chart/hyrax/Chart.yaml +11 -7
- data/chart/hyrax/README.md +22 -1
- data/chart/hyrax/templates/_helpers.tpl +4 -0
- data/chart/hyrax/templates/cron-embargo.yaml +5 -0
- data/chart/hyrax/templates/cron-lease.yaml +5 -0
- data/chart/hyrax/templates/deployment-worker.yaml +11 -0
- data/chart/hyrax/templates/ingress.yaml +7 -6
- data/chart/hyrax/values.yaml +152 -0
- data/config/features.rb +48 -50
- data/config/initializers/listeners.rb +0 -1
- data/config/initializers/{valkryrie_storage.rb → storage_adapter_initializer.rb} +5 -0
- data/config/locales/hyrax.de.yml +18 -17
- data/config/locales/hyrax.en.yml +30 -28
- data/config/locales/hyrax.es.yml +10 -9
- data/config/locales/hyrax.fr.yml +2 -1
- data/config/locales/hyrax.it.yml +3 -2
- data/config/locales/hyrax.pt-BR.yml +2 -1
- data/config/locales/hyrax.zh.yml +2 -1
- data/config/metadata/basic_metadata.yaml +2 -0
- data/config/metadata/core_metadata.yaml +1 -1
- data/docker-compose.yml +47 -42
- data/documentation/developing-your-hyrax-based-app.md +1 -1
- data/documentation/legacyREADME.md +1 -1
- data/hyrax.gemspec +5 -3
- data/lib/generators/hyrax/collection_resource/USAGE +20 -0
- data/lib/generators/hyrax/collection_resource/collection_resource_generator.rb +133 -0
- data/lib/generators/hyrax/collection_resource/templates/collection.rb.erb +34 -0
- data/lib/generators/hyrax/collection_resource/templates/collection_form.rb.erb +7 -0
- data/lib/generators/hyrax/collection_resource/templates/collection_form_spec.rb.erb +13 -0
- data/lib/generators/hyrax/collection_resource/templates/collection_indexer.rb.erb +7 -0
- data/lib/generators/hyrax/collection_resource/templates/collection_indexer_spec.rb.erb +13 -0
- data/lib/generators/hyrax/collection_resource/templates/collection_metadata.yaml +22 -0
- data/lib/generators/hyrax/collection_resource/templates/collection_spec.rb.erb +12 -0
- data/lib/generators/hyrax/install_generator.rb +9 -0
- data/lib/hyrax/administrative_set_name.rb +18 -0
- data/lib/hyrax/collection_name.rb +2 -0
- data/lib/hyrax/configuration.rb +22 -0
- data/lib/hyrax/controlled_vocabularies/location.rb +9 -2
- data/lib/hyrax/controlled_vocabularies/resource_label_caching.rb +42 -0
- data/lib/hyrax/controlled_vocabularies.rb +1 -0
- data/lib/hyrax/publisher.rb +49 -0
- data/lib/hyrax/schema.rb +16 -13
- data/lib/hyrax/specs/capybara.rb +1 -1
- data/lib/hyrax/specs/shared_specs/hydra_works.rb +11 -5
- data/lib/hyrax/specs/shared_specs/indexers.rb +117 -3
- data/lib/hyrax/transactions/admin_set_create.rb +2 -1
- data/lib/hyrax/transactions/admin_set_destroy.rb +22 -0
- data/lib/hyrax/transactions/admin_set_update.rb +21 -0
- data/lib/hyrax/transactions/collection_destroy.rb +22 -0
- data/lib/hyrax/transactions/collection_update.rb +5 -2
- data/lib/hyrax/transactions/container.rb +97 -23
- data/lib/hyrax/transactions/create_work.rb +3 -0
- data/lib/hyrax/transactions/destroy_work.rb +3 -0
- data/lib/hyrax/transactions/steps/apply_collection_permission_template.rb +2 -0
- data/lib/hyrax/transactions/steps/apply_permission_template.rb +2 -0
- data/lib/hyrax/transactions/steps/apply_visibility.rb +2 -0
- data/lib/hyrax/transactions/steps/change_depositor.rb +46 -0
- data/lib/hyrax/transactions/steps/check_for_empty_admin_set.rb +36 -0
- data/lib/hyrax/transactions/steps/delete_access_control.rb +32 -0
- data/lib/hyrax/transactions/steps/delete_resource.rb +19 -3
- data/lib/hyrax/transactions/steps/destroy_work.rb +3 -1
- data/lib/hyrax/transactions/steps/ensure_permission_template.rb +2 -0
- data/lib/hyrax/transactions/steps/save.rb +24 -6
- data/lib/hyrax/transactions/steps/save_access_control.rb +2 -2
- data/lib/hyrax/transactions/steps/save_collection_banner.rb +59 -0
- data/lib/hyrax/transactions/steps/save_collection_logo.rb +109 -0
- data/lib/hyrax/transactions/steps/save_work.rb +3 -0
- data/lib/hyrax/transactions/steps/set_user_as_creator.rb +41 -0
- data/lib/hyrax/transactions/steps/update_work_members.rb +51 -0
- data/lib/hyrax/transactions/update_work.rb +4 -3
- data/lib/hyrax/transactions/work_create.rb +1 -1
- data/lib/hyrax/transactions/work_destroy.rb +2 -1
- data/lib/hyrax/transactions/work_update.rb +19 -0
- data/lib/hyrax/version.rb +1 -1
- data/lib/wings/active_fedora_converter/file_metadata_node.rb +48 -0
- data/lib/wings/active_fedora_converter/instance_builder.rb +68 -0
- data/lib/wings/active_fedora_converter.rb +3 -3
- data/lib/wings/attribute_transformer.rb +5 -1
- data/lib/wings/services/custom_queries/find_file_metadata.rb +19 -8
- data/lib/wings/setup.rb +3 -1
- data/lib/wings/valkyrie/persister.rb +2 -0
- data/lib/wings/valkyrie/query_service.rb +6 -7
- data/lib/wings/valkyrie/storage.rb +7 -1
- data/template.rb +1 -1
- metadata +99 -12
|
@@ -29,7 +29,7 @@ module Hyrax
|
|
|
29
29
|
:page_count, :file_title, :last_modified, :original_checksum,
|
|
30
30
|
:duration, :sample_rate, :alpha_channels
|
|
31
31
|
]
|
|
32
|
-
self.characterization_proxy =
|
|
32
|
+
self.characterization_proxy = Hyrax.config.characterization_proxy
|
|
33
33
|
|
|
34
34
|
delegate(*characterization_terms, to: :characterization_proxy)
|
|
35
35
|
|
|
@@ -64,6 +64,12 @@ module Hyrax
|
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
ActiveFedora::WithMetadata::DefaultMetadataClassFactory.file_metadata_schemas << AlphaChannelsSchema
|
|
67
|
+
|
|
68
|
+
# Add file_set_id for Valkyrie support.
|
|
69
|
+
class FileSetIdSchema < ActiveTriples::Schema
|
|
70
|
+
property :file_set_id, predicate: ::RDF::URI.new('http://vocabulary.samvera.org/ns#fileSetId')
|
|
71
|
+
end
|
|
72
|
+
ActiveFedora::WithMetadata::DefaultMetadataClassFactory.file_metadata_schemas << FileSetIdSchema
|
|
67
73
|
end
|
|
68
74
|
end
|
|
69
75
|
end
|
|
@@ -52,6 +52,7 @@ module Hyrax
|
|
|
52
52
|
attribute :read_groups, Solr::Array, ::Ability.read_group_field
|
|
53
53
|
attribute :collection_ids, Solr::Array, 'collection_ids_tesim'
|
|
54
54
|
attribute :admin_set, Solr::Array, "admin_set_tesim"
|
|
55
|
+
attribute :admin_set_id, Solr::Array, "admin_set_id_ssim"
|
|
55
56
|
attribute :member_ids, Solr::Array, "member_ids_ssim"
|
|
56
57
|
attribute :member_of_collection_ids, Solr::Array, "member_of_collection_ids_ssim"
|
|
57
58
|
attribute :member_of_collections, Solr::Array, "member_of_collections_ssim"
|
|
@@ -65,7 +65,7 @@ module Hyrax
|
|
|
65
65
|
##
|
|
66
66
|
# @return [Boolean]
|
|
67
67
|
def admin_set?
|
|
68
|
-
hydra_model ==
|
|
68
|
+
hydra_model == Hyrax.config.admin_set_class
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
##
|
|
@@ -75,9 +75,9 @@ module Hyrax
|
|
|
75
75
|
end
|
|
76
76
|
|
|
77
77
|
# Method to return the model
|
|
78
|
-
def hydra_model(classifier:
|
|
78
|
+
def hydra_model(classifier: nil)
|
|
79
79
|
first('has_model_ssim')&.safe_constantize ||
|
|
80
|
-
classifier.classifier(self).best_model
|
|
80
|
+
model_classifier(classifier).classifier(self).best_model
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
def depositor(default = '')
|
|
@@ -107,5 +107,11 @@ module Hyrax
|
|
|
107
107
|
def collection_type_gid
|
|
108
108
|
first(Hyrax.config.collection_type_index_field)
|
|
109
109
|
end
|
|
110
|
+
|
|
111
|
+
private
|
|
112
|
+
|
|
113
|
+
def model_classifier(classifier)
|
|
114
|
+
classifier || ActiveFedora.model_mapper
|
|
115
|
+
end
|
|
110
116
|
end
|
|
111
117
|
end
|
|
@@ -53,6 +53,13 @@ module Hyrax::User
|
|
|
53
53
|
public_send(self.class.user_key_field)
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
+
##
|
|
57
|
+
# @return [String] a local identifier for this user; for use (e.g.) in ACL
|
|
58
|
+
# data
|
|
59
|
+
def agent_key
|
|
60
|
+
user_key
|
|
61
|
+
end
|
|
62
|
+
|
|
56
63
|
# Look for, in order:
|
|
57
64
|
# A cached version of the agent
|
|
58
65
|
# A non-cached version (direct read of the database)
|
|
@@ -177,6 +184,10 @@ module Hyrax::User
|
|
|
177
184
|
User.find_by_user_key(user_key) || User.create!(user_key_field => user_key, password: Devise.friendly_token[0, 20])
|
|
178
185
|
end
|
|
179
186
|
|
|
187
|
+
def from_agent_key(key)
|
|
188
|
+
User.find_by_user_key(key)
|
|
189
|
+
end
|
|
190
|
+
|
|
180
191
|
def from_url_component(component)
|
|
181
192
|
User.find_by_user_key(component.gsub(/-dot-/, '.'))
|
|
182
193
|
end
|
|
@@ -34,7 +34,7 @@ module Hyrax
|
|
|
34
34
|
|
|
35
35
|
module ClassMethods
|
|
36
36
|
# This governs which partial to draw when you render this type of object
|
|
37
|
-
def _to_partial_path
|
|
37
|
+
def _to_partial_path # :nodoc:
|
|
38
38
|
@_to_partial_path ||= begin
|
|
39
39
|
element = ActiveSupport::Inflector.underscore(ActiveSupport::Inflector.demodulize(name))
|
|
40
40
|
collection = ActiveSupport::Inflector.tableize(name)
|
|
@@ -1,18 +1,53 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_dependency 'hyrax/administrative_set_name'
|
|
4
|
+
|
|
3
5
|
module Hyrax
|
|
4
6
|
##
|
|
5
7
|
# Valkyrie model for Admin Set domain objects.
|
|
8
|
+
#
|
|
9
|
+
# ## Relationships
|
|
10
|
+
#
|
|
11
|
+
# ### Administrative Set and Work
|
|
12
|
+
#
|
|
13
|
+
# * Defined: The relationship is defined by the inverse relationship stored in the
|
|
14
|
+
# work's `:admin_set_id` attribute.
|
|
15
|
+
# * Tested: The work tests the relationship.
|
|
16
|
+
# * Administrative Set to Work: (1..m) An admin set can have many works.
|
|
17
|
+
#
|
|
18
|
+
# @example Get works in an admin set:
|
|
19
|
+
# works = Hyrax.query_service.find_inverse_references_by(id: admin_set.id, property: :admin_set_id)
|
|
20
|
+
#
|
|
21
|
+
# * Work to Administrative Set: (1..1) A work must be in one and only one admin set.
|
|
22
|
+
# * See Hyrax::Work for code to get and set the admin set for the work.
|
|
23
|
+
#
|
|
24
|
+
# @see Hyrax::Work
|
|
25
|
+
# @see Valkyrie query adapter's #find_inverse_references_by
|
|
26
|
+
#
|
|
6
27
|
class AdministrativeSet < Hyrax::Resource
|
|
7
28
|
include Hyrax::Schema(:core_metadata)
|
|
8
29
|
|
|
9
30
|
attribute :alternative_title, Valkyrie::Types::Set.of(Valkyrie::Types::String)
|
|
10
31
|
attribute :creator, Valkyrie::Types::Set.of(Valkyrie::Types::String)
|
|
11
|
-
attribute :description, Valkyrie::Types::
|
|
32
|
+
attribute :description, Valkyrie::Types::String
|
|
33
|
+
|
|
34
|
+
##
|
|
35
|
+
# @return [Boolean] true
|
|
36
|
+
def collection?
|
|
37
|
+
true
|
|
38
|
+
end
|
|
12
39
|
|
|
13
40
|
def collection_type_gid
|
|
14
41
|
# allow AdministrativeSet to behave more like a regular PcdmCollection
|
|
15
42
|
Hyrax::CollectionType.find_or_create_admin_set_type.to_global_id
|
|
16
43
|
end
|
|
44
|
+
|
|
45
|
+
##
|
|
46
|
+
# @api private
|
|
47
|
+
#
|
|
48
|
+
# @return [Class] an ActiveModel::Name compatible class
|
|
49
|
+
def self._hyrax_default_name_class
|
|
50
|
+
Hyrax::AdministrativeSetName
|
|
51
|
+
end
|
|
17
52
|
end
|
|
18
53
|
end
|
|
@@ -109,9 +109,9 @@ module Hyrax
|
|
|
109
109
|
|
|
110
110
|
##
|
|
111
111
|
# @return [Enumerable<Collection, PcdmCollection>]
|
|
112
|
-
def collections(use_valkyrie:
|
|
112
|
+
def collections(use_valkyrie: Hyrax.config.use_valkyrie?)
|
|
113
113
|
return [] unless id
|
|
114
|
-
return Hyrax.custom_queries.find_collections_by_type(global_id: to_global_id) if use_valkyrie
|
|
114
|
+
return Hyrax.custom_queries.find_collections_by_type(global_id: to_global_id.to_s) if use_valkyrie
|
|
115
115
|
ActiveFedora::Base.where(Hyrax.config.collection_type_index_field.to_sym => to_global_id.to_s)
|
|
116
116
|
end
|
|
117
117
|
|
|
@@ -1,7 +1,30 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Hyrax
|
|
4
|
+
##
|
|
5
|
+
# Casts a resource to an associated FileMetadata
|
|
6
|
+
#
|
|
7
|
+
# @param [Valkyrie::StorageAdapter::File] file
|
|
8
|
+
#
|
|
9
|
+
# @return [Hyrax::FileMetadata]
|
|
10
|
+
# @raise [ArgumentError]
|
|
11
|
+
def self.FileMetadata(file)
|
|
12
|
+
raise(ArgumentError, "Expected a Valkyrie::StorageAdapter::File; got #{file.class}: #{file}") if
|
|
13
|
+
file.is_a?(Valkyrie::Resource)
|
|
14
|
+
|
|
15
|
+
Hyrax.custom_queries.find_file_metadata_by(id: file.id)
|
|
16
|
+
rescue Hyrax::ObjectNotFoundError, Ldp::BadRequest
|
|
17
|
+
Hyrax.logger.debug('Could not find an existing metadata node for file ' \
|
|
18
|
+
"with id #{file.id}. Initializing a new one")
|
|
19
|
+
|
|
20
|
+
FileMetadata.new(file_identifier: file.id, alternative_ids: [file.id])
|
|
21
|
+
end
|
|
22
|
+
|
|
4
23
|
class FileMetadata < Valkyrie::Resource
|
|
24
|
+
# Include mime-types for Hydra Derivatives mime-type checking. We may want
|
|
25
|
+
# to move this logic someday.
|
|
26
|
+
include Hydra::Works::MimeTypes
|
|
27
|
+
|
|
5
28
|
GENERIC_MIME_TYPE = 'application/octet-stream'
|
|
6
29
|
|
|
7
30
|
##
|
|
@@ -35,14 +58,14 @@ module Hyrax
|
|
|
35
58
|
end
|
|
36
59
|
|
|
37
60
|
attribute :file_identifier, Valkyrie::Types::ID # id of the file stored by the storage adapter
|
|
38
|
-
attribute :alternate_ids, Valkyrie::Types::Set.of(Valkyrie::Types::ID) # id of the
|
|
61
|
+
attribute :alternate_ids, Valkyrie::Types::Set.of(Valkyrie::Types::ID) # id of the file, populated for queryability
|
|
39
62
|
attribute :file_set_id, ::Valkyrie::Types::ID # id of parent file set resource
|
|
40
63
|
|
|
41
64
|
# all remaining attributes are on AF::File metadata_node unless otherwise noted
|
|
42
65
|
attribute :label, ::Valkyrie::Types::Set
|
|
43
66
|
attribute :original_filename, ::Valkyrie::Types::String
|
|
44
67
|
attribute :mime_type, ::Valkyrie::Types::String.default(GENERIC_MIME_TYPE)
|
|
45
|
-
attribute :type, ::Valkyrie::Types::Set.default([Use::ORIGINAL_FILE]
|
|
68
|
+
attribute :type, ::Valkyrie::Types::Set.default([Use::ORIGINAL_FILE])
|
|
46
69
|
|
|
47
70
|
# attributes set by fits
|
|
48
71
|
attribute :format_label, ::Valkyrie::Types::Set
|
|
@@ -103,7 +126,9 @@ module Hyrax
|
|
|
103
126
|
attribute :aspect_ratio, ::Valkyrie::Types::Set
|
|
104
127
|
|
|
105
128
|
# @param [ActionDispatch::Http::UploadedFile] file
|
|
129
|
+
# @deprecated Use #new instead; for removal in 4.0.0
|
|
106
130
|
def self.for(file:)
|
|
131
|
+
Deprecation.warn "#{self.class}##{__method__} is deprecated; use #new instead."
|
|
107
132
|
new(label: file.original_filename,
|
|
108
133
|
original_filename: file.original_filename,
|
|
109
134
|
mime_type: file.content_type)
|
|
@@ -151,8 +176,17 @@ module Hyrax
|
|
|
151
176
|
''
|
|
152
177
|
end
|
|
153
178
|
|
|
179
|
+
##
|
|
180
|
+
# @return [Valkyrie::StorageAdapter::File]
|
|
181
|
+
#
|
|
182
|
+
# @raise [Valkyrie::StorageAdapter::AdapterNotFoundError] if no adapter
|
|
183
|
+
# could be found matching the file_identifier's scheme
|
|
184
|
+
# @raise [Valkyrie::StorageAdapter::FileNotFound] when the file can't
|
|
185
|
+
# be found in the registered adapter
|
|
154
186
|
def file
|
|
155
|
-
|
|
187
|
+
Valkyrie::StorageAdapter
|
|
188
|
+
.adapter_for(id: file_identifier)
|
|
189
|
+
.find_by(id: file_identifier)
|
|
156
190
|
end
|
|
157
191
|
end
|
|
158
192
|
end
|
|
@@ -4,22 +4,61 @@ module Hyrax
|
|
|
4
4
|
##
|
|
5
5
|
# Valkyrie model for `FileSet` domain objects in the Hydra Works model.
|
|
6
6
|
#
|
|
7
|
+
# ## Relationships
|
|
8
|
+
#
|
|
9
|
+
# ### File Set and Work
|
|
10
|
+
#
|
|
11
|
+
# * Defined: The relationship is defined by the inverse relationship stored in the
|
|
12
|
+
# work's `:member_ids` attribute.
|
|
13
|
+
# * Tested: The work tests the relationship.
|
|
14
|
+
# * File Set to Work: (1..1) A file set must be in one and only one work.
|
|
15
|
+
#
|
|
16
|
+
# @example Get work for a file set:
|
|
17
|
+
# work = Hyrax.custom_queries.find_parent_work(resource: file_set)
|
|
18
|
+
#
|
|
19
|
+
# * Work to File Set: (0..m) A work can have many file sets.
|
|
20
|
+
# * See Hyrax::Work for code to get and set file sets for the work.
|
|
21
|
+
#
|
|
22
|
+
# ### File Set and File (TBD)
|
|
23
|
+
#
|
|
24
|
+
# @see Hyrax::Work
|
|
25
|
+
# @see Hyrax::CustomQueries::Navigators::ParentWorkNavigator#find_parent_work
|
|
26
|
+
#
|
|
27
|
+
# @todo The description in Hydra::Works Shared Modeling is out of date and uses
|
|
28
|
+
# terminology to describe the relationships that is no longer used in code.
|
|
29
|
+
# Update the model and link to it. This can be a simple relationship diagram
|
|
30
|
+
# with a link to the original Works Shared Modeling for historical perspective.
|
|
7
31
|
# @see https://wiki.duraspace.org/display/samvera/Hydra%3A%3AWorks+Shared+Modeling
|
|
8
32
|
class FileSet < Hyrax::Resource
|
|
9
33
|
include Hyrax::Schema(:core_metadata)
|
|
10
34
|
include Hyrax::Schema(:basic_metadata)
|
|
11
35
|
|
|
12
36
|
def self.model_name(name_class: Hyrax::Name)
|
|
13
|
-
@_model_name ||=
|
|
14
|
-
name_class.new(self, nil, 'FileSet')
|
|
15
|
-
end
|
|
37
|
+
@_model_name ||= name_class.new(self, nil, 'FileSet')
|
|
16
38
|
end
|
|
17
39
|
|
|
40
|
+
class_attribute :characterization_proxy
|
|
41
|
+
self.characterization_proxy = Hyrax.config.characterization_proxy
|
|
42
|
+
|
|
18
43
|
attribute :file_ids, Valkyrie::Types::Array.of(Valkyrie::Types::ID) # id for FileMetadata resources
|
|
44
|
+
attribute :thumbnail_id, Valkyrie::Types::ID.optional # id for FileMetadata resource
|
|
19
45
|
attribute :original_file_id, Valkyrie::Types::ID # id for FileMetadata resource
|
|
20
|
-
attribute :thumbnail_id, Valkyrie::Types::ID # id for FileMetadata resource
|
|
21
46
|
attribute :extracted_text_id, Valkyrie::Types::ID # id for FileMetadata resource
|
|
22
47
|
|
|
48
|
+
##
|
|
49
|
+
# @return [Valkyrie::ID]
|
|
50
|
+
def representative_id
|
|
51
|
+
id
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
##
|
|
55
|
+
# @return [Valkyrie::ID]
|
|
56
|
+
# If one is set then return it, otherwise use self as the ID to allow for
|
|
57
|
+
# derivative generators to find the on-disk path for the thumbnail.
|
|
58
|
+
def thumbnail_id
|
|
59
|
+
self.[](:thumbnail_id) || id
|
|
60
|
+
end
|
|
61
|
+
|
|
23
62
|
##
|
|
24
63
|
# @return [Boolean] true
|
|
25
64
|
def pcdm_object?
|
data/app/models/hyrax/group.rb
CHANGED
|
@@ -7,12 +7,31 @@ module Hyrax
|
|
|
7
7
|
DEFAULT_NAME_PREFIX
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
+
##
|
|
11
|
+
# @return [Hyrax::Group]
|
|
12
|
+
def self.from_agent_key(key)
|
|
13
|
+
new(key.delete_prefix(name_prefix))
|
|
14
|
+
end
|
|
15
|
+
|
|
10
16
|
def initialize(name)
|
|
11
17
|
@name = name
|
|
12
18
|
end
|
|
13
19
|
|
|
14
20
|
attr_reader :name
|
|
15
21
|
|
|
22
|
+
##
|
|
23
|
+
# @return [Boolean]
|
|
24
|
+
def ==(other)
|
|
25
|
+
other.class == self.class && other.name == name
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
##
|
|
29
|
+
# @return [String] a local identifier for this group; for use (e.g.) in ACL
|
|
30
|
+
# data
|
|
31
|
+
def agent_key
|
|
32
|
+
self.class.name_prefix + name
|
|
33
|
+
end
|
|
34
|
+
|
|
16
35
|
def to_sipity_agent
|
|
17
36
|
sipity_agent || create_sipity_agent!
|
|
18
37
|
end
|
|
@@ -5,9 +5,42 @@ require_dependency 'hyrax/collection_name'
|
|
|
5
5
|
module Hyrax
|
|
6
6
|
##
|
|
7
7
|
# Valkyrie model for Collection domain objects in the Hydra Works model.
|
|
8
|
+
#
|
|
9
|
+
# ## Relationships
|
|
10
|
+
#
|
|
11
|
+
# ### Collection and Collection (TBA)
|
|
12
|
+
#
|
|
13
|
+
# ### Collection and Work
|
|
14
|
+
#
|
|
15
|
+
# * Defined: The relationship is defined by the inverse relationship stored in the
|
|
16
|
+
# work's `:member_of_collection_ids` attribute.
|
|
17
|
+
# * Tested: The work tests the relationship.
|
|
18
|
+
# * Collection to Work: (0..m) A collection can have many works.
|
|
19
|
+
#
|
|
20
|
+
# @example Get works in a collection:
|
|
21
|
+
# works = Hyrax.custom_queries.find_child_works(resource: collection)
|
|
22
|
+
#
|
|
23
|
+
# * Work to Collection: (0..m) A work can be in many collections.
|
|
24
|
+
# * See Hyrax::Work for code to get and set collections for the work.
|
|
25
|
+
#
|
|
26
|
+
# @note Some collection types limit a work to belong to one and only one collection of that type.
|
|
27
|
+
#
|
|
28
|
+
# ### All children
|
|
29
|
+
#
|
|
30
|
+
# * There are additional methods for finding all children without respect to
|
|
31
|
+
# the child's type.
|
|
32
|
+
#
|
|
33
|
+
# @example Get works and child collections in a collection using:
|
|
34
|
+
# members = Hyrax.custom_queries.find_members_of(resource: collection)
|
|
35
|
+
#
|
|
36
|
+
# @see Hyrax::Work
|
|
37
|
+
#
|
|
38
|
+
# @see Hyrax::CustomQueries::Navigators::ChildCollectionsNavigator#find_child_collections
|
|
39
|
+
# @see Hyrax::CustomQueries::Navigators::ChildWorksNavigator#find_child_works
|
|
40
|
+
# @see Hyrax::CustomQueries::Navigators::CollectionMembers#find_members_of
|
|
41
|
+
#
|
|
8
42
|
class PcdmCollection < Hyrax::Resource
|
|
9
43
|
include Hyrax::Schema(:core_metadata)
|
|
10
|
-
include Hyrax::Schema(:basic_metadata)
|
|
11
44
|
|
|
12
45
|
attribute :collection_type_gid, Valkyrie::Types::String
|
|
13
46
|
attribute :member_ids, Valkyrie::Types::Array.of(Valkyrie::Types::ID).meta(ordered: true)
|
|
@@ -32,5 +65,27 @@ module Hyrax
|
|
|
32
65
|
def pcdm_object?
|
|
33
66
|
true
|
|
34
67
|
end
|
|
68
|
+
|
|
69
|
+
def permission_manager
|
|
70
|
+
@permission_manager ||= Hyrax::PermissionManager.new(resource: self)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def visibility=(value)
|
|
74
|
+
visibility_writer.assign_access_for(visibility: value)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def visibility
|
|
78
|
+
visibility_reader.read
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
protected
|
|
82
|
+
|
|
83
|
+
def visibility_writer
|
|
84
|
+
Hyrax::VisibilityWriter.new(resource: self)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def visibility_reader
|
|
88
|
+
Hyrax::VisibilityReader.new(resource: self)
|
|
89
|
+
end
|
|
35
90
|
end
|
|
36
91
|
end
|
|
@@ -4,7 +4,7 @@ module Hyrax
|
|
|
4
4
|
# Holds policy data about the workflow and permissions applied objects when
|
|
5
5
|
# they are deposited through an Administrative Set or a Collection. Each
|
|
6
6
|
# template record has a {#source} (through {#source_id}); the template's
|
|
7
|
-
# rules inform the behavior of objects deposited through that {#
|
|
7
|
+
# rules inform the behavior of objects deposited through that {#source}.
|
|
8
8
|
#
|
|
9
9
|
# The {PermissionTemplate} specifies:
|
|
10
10
|
#
|
|
@@ -81,6 +81,10 @@ module Hyrax
|
|
|
81
81
|
# A bit of an analogue for a `belongs_to :source_model` as it crosses from Fedora to the DB
|
|
82
82
|
# @return [AdminSet, ::Collection]
|
|
83
83
|
# @raise [Hyrax::ObjectNotFoundError] when neither an AdminSet or Collection is found
|
|
84
|
+
# @note This method will eventually be replaced by #source which returns a Hyrax::Resource
|
|
85
|
+
# object. Many methods are equally able to process both Hyrax::Resource and
|
|
86
|
+
# ActiveFedora::Base. Only call this method if you need the ActiveFedora::Base object.
|
|
87
|
+
# @see #source
|
|
84
88
|
def source_model
|
|
85
89
|
ActiveFedora::Base.find(source_id)
|
|
86
90
|
rescue ActiveFedora::ObjectNotFoundError
|
|
@@ -88,11 +92,11 @@ module Hyrax
|
|
|
88
92
|
end
|
|
89
93
|
|
|
90
94
|
# A bit of an analogue for a `belongs_to :admin_set` as it crosses from Fedora to the DB
|
|
91
|
-
# @deprecated Use #
|
|
95
|
+
# @deprecated Use #source instead
|
|
92
96
|
# @return [AdminSet]
|
|
93
97
|
# @raise [Hyrax::ObjectNotFoundError] when the we cannot find the AdminSet
|
|
94
98
|
def admin_set
|
|
95
|
-
Deprecation.warn(
|
|
99
|
+
Deprecation.warn("#admin_set is deprecated; use #source instead.")
|
|
96
100
|
return AdminSet.find(source_id) if AdminSet.exists?(source_id)
|
|
97
101
|
raise Hyrax::ObjectNotFoundError
|
|
98
102
|
rescue ActiveFedora::ActiveFedoraError # TODO: remove the rescue when active_fedora issue #1276 is fixed
|
|
@@ -100,11 +104,11 @@ module Hyrax
|
|
|
100
104
|
end
|
|
101
105
|
|
|
102
106
|
# A bit of an analogue for a `belongs_to :collection` as it crosses from Fedora to the DB
|
|
103
|
-
# @deprecated Use #
|
|
107
|
+
# @deprecated Use #source instead
|
|
104
108
|
# @return [Collection]
|
|
105
109
|
# @raise [Hyrax::ObjectNotFoundError] when the we cannot find the Collection
|
|
106
110
|
def collection
|
|
107
|
-
Deprecation.warn(
|
|
111
|
+
Deprecation.warn("#collection is deprecated; use #source instead.")
|
|
108
112
|
return ::Collection.find(source_id) if ::Collection.exists?(source_id)
|
|
109
113
|
raise Hyrax::ObjectNotFoundError
|
|
110
114
|
rescue ActiveFedora::ActiveFedoraError # TODO: remove the rescue when active_fedora issue #1276 is fixed
|
|
@@ -216,10 +220,12 @@ module Hyrax
|
|
|
216
220
|
end
|
|
217
221
|
|
|
218
222
|
##
|
|
223
|
+
# @deprecated Use #reset_access_controls_for instead
|
|
219
224
|
# @param interpret_visibility [Boolean] whether to retain the existing
|
|
220
225
|
# visibility when applying permission template ACLs
|
|
221
226
|
# @return [Boolean]
|
|
222
227
|
def reset_access_controls(interpret_visibility: false)
|
|
228
|
+
Deprecation.warn("#reset_access_controls is deprecated; use #reset_access_controls_for instead.")
|
|
223
229
|
reset_access_controls_for(collection: source_model,
|
|
224
230
|
interpret_visibility: interpret_visibility)
|
|
225
231
|
end
|
data/app/models/hyrax/work.rb
CHANGED
|
@@ -4,6 +4,97 @@ module Hyrax
|
|
|
4
4
|
##
|
|
5
5
|
# Valkyrie model for `Work` domain objects in the Hydra Works model.
|
|
6
6
|
#
|
|
7
|
+
# ## Relationships
|
|
8
|
+
#
|
|
9
|
+
# ### Administrative Set and Work
|
|
10
|
+
#
|
|
11
|
+
# * Defined: The relationship is defined by the work's `:admin_set_id` attribute.
|
|
12
|
+
# * Tested: The relationship is tested in shared spec `'a Hyrax::Work'` by testing
|
|
13
|
+
# `#admin_set_id`. Shared specs are defined in /lib/hyrax/specs/shared_specs/hydra_works.rb.
|
|
14
|
+
# * Administrative Set to Work: (1..m) An admin set can have many works.
|
|
15
|
+
# * See Hyrax::AdministrativeSet for code to get works in an admin set.
|
|
16
|
+
# * Work to Administrative Set: (1..1) A work must be in one and only one admin set.
|
|
17
|
+
#
|
|
18
|
+
# @example Set admin set for a work:
|
|
19
|
+
# work.admin_set_id = admin_set.id
|
|
20
|
+
# @example Get admin set a work is in:
|
|
21
|
+
# admin_set = Hyrax.query_service.find_by(id: work.admin_set_id)
|
|
22
|
+
#
|
|
23
|
+
# ### Collection and Work
|
|
24
|
+
#
|
|
25
|
+
# * Defined: The relationship is defined by the work's `:member_of_collection_ids` attribute.
|
|
26
|
+
# * Tested: The relationship is tested in shared spec `'a Hyrax::Work'` by testing
|
|
27
|
+
# `it_behaves_like 'belongs to collections'`. Shared specs are defined in /lib/hyrax/specs/shared_specs/hydra_works.rb.
|
|
28
|
+
# * Collection to Work: (0..m) A collection can have many works.
|
|
29
|
+
# * See Hyrax::PcdmCollection for code to get works in a collection.
|
|
30
|
+
# * Work to Collection: (0..m) A work can be in many collections.
|
|
31
|
+
#
|
|
32
|
+
# @example Add a work to a collection using Hyrax::CollectionMemberService (multiple method options)
|
|
33
|
+
# Hyrax::CollectionMemberService.add_members(collection_id: col.id, members: works, user: current_user)
|
|
34
|
+
# @example Get collections a work is in:
|
|
35
|
+
# collections = Hyrax.custom_queries.find_collections_for(resource: work)
|
|
36
|
+
#
|
|
37
|
+
# @note Some collection types limit a work to belong to one and only one collection of that type.
|
|
38
|
+
#
|
|
39
|
+
# ### Work and Work
|
|
40
|
+
#
|
|
41
|
+
# * Defined: The relationship is defined in the parent work's `:member_ids` attribute.
|
|
42
|
+
# * Tested: The relationship is tested in shared spec `'a Hyrax::Work'` by testing
|
|
43
|
+
# `it_behaves_like 'has_members'`. Shared specs are defined in /lib/hyrax/specs/shared_specs/hydra_works.rb.
|
|
44
|
+
# * Work to child Work: (0..m) A work can have many child works.
|
|
45
|
+
#
|
|
46
|
+
# @example Add a child work to a work:
|
|
47
|
+
# Hyrax::Transactions::Container['work_resource.add_to_parent']
|
|
48
|
+
# .call(child_work, parent_id: parent_work.id, user: current_user)
|
|
49
|
+
# @example Get child works:
|
|
50
|
+
# works = Hyrax.custom_queries.find_child_works(resource: parent_work)
|
|
51
|
+
#
|
|
52
|
+
# * Work to parent Work: (0..1) A work can be in at most one parent work.
|
|
53
|
+
#
|
|
54
|
+
# @example Get parent work:
|
|
55
|
+
# parent_work = Hyrax.custom_queries.find_parent_work(resource: child_work)
|
|
56
|
+
#
|
|
57
|
+
# @note `:member_ids` holds ids of child works and file sets.
|
|
58
|
+
#
|
|
59
|
+
# ### Work and File Set
|
|
60
|
+
#
|
|
61
|
+
# * Defined: The relationship is defined in the parent work's `:member_ids` attribute.
|
|
62
|
+
# * Tested: The relationship is tested in shared spec `'a Hyrax::Work'` by testing
|
|
63
|
+
# `it_behaves_like 'has_members'`. Shared specs are defined in /lib/hyrax/specs/shared_specs/hydra_works.rb.
|
|
64
|
+
# * Work to File Set: (0..m) A work can have many file sets.
|
|
65
|
+
# @example Add a file set to a work (code from Hyrax::WorkUploadsHandler#append_to_work)
|
|
66
|
+
# work.member_ids << file_set.id
|
|
67
|
+
# work.representative_id = file_set.id if work.respond_to?(:representative_id) && work.representative_id.blank?
|
|
68
|
+
# work.thumbnail_id = file_set.id if work.respond_to?(:thumbnail_id) && work.thumbnail_id.blank?
|
|
69
|
+
# Hyrax.persister.save(resource: work)
|
|
70
|
+
# Hyrax.publisher.publish('object.metadata.updated', object: work, user: files.first.user)
|
|
71
|
+
# @example Get file sets:
|
|
72
|
+
# file_sets = Hyrax.custom_queries.find_child_file_sets(resource: work)
|
|
73
|
+
#
|
|
74
|
+
# * File Set to Work: (1..1) A file set must be in one and only one work.
|
|
75
|
+
# * See Hyrax::FileSet for code to get the work a file set is in.
|
|
76
|
+
#
|
|
77
|
+
# @see Hyrax::AdministrativeSet
|
|
78
|
+
# @see Hyrax::PcdmCollection
|
|
79
|
+
# @see Hyrax::FileSet
|
|
80
|
+
#
|
|
81
|
+
# @see Hyrax::CollectionMemberService
|
|
82
|
+
# @see Hyrax::Transactions::Steps::AddToParent
|
|
83
|
+
# @see Hyrax::Transactions::Steps::AddFileSets
|
|
84
|
+
# @see Hyrax::WorksControllerBehavior
|
|
85
|
+
# @see Hyrax::WorkUploadsHandler#append_to_work
|
|
86
|
+
#
|
|
87
|
+
# @see Valkyrie query adapter's #find_by
|
|
88
|
+
# @see Hyrax::CustomQueries::Navigators::CollectionMembers#find_collections_for
|
|
89
|
+
# @see Hyrax::CustomQueries::Navigators::ParentWorkNavigator#find_parent_work
|
|
90
|
+
# @see Hyrax::CustomQueries::Navigators::ChildFileSetsNavigator#find_child_file_sets
|
|
91
|
+
#
|
|
92
|
+
# @see /lib/hyrax/specs/shared_specs/hydra_works.rb
|
|
93
|
+
#
|
|
94
|
+
# @todo The description in Hydra::Works Shared Modeling is out of date and uses
|
|
95
|
+
# terminology to describe the relationships that is no longer used in code.
|
|
96
|
+
# Update the model and link to it. This can be a simple relationship diagram
|
|
97
|
+
# with a link to the original Works Shared Modeling for historical perspective.
|
|
7
98
|
# @see https://wiki.lyrasis.org/display/samvera/Hydra::Works+Shared+Modeling
|
|
8
99
|
class Work < Hyrax::Resource
|
|
9
100
|
include Hyrax::Schema(:core_metadata)
|
|
@@ -94,7 +94,7 @@ class JobIoWrapper < ApplicationRecord
|
|
|
94
94
|
|
|
95
95
|
def extracted_original_name
|
|
96
96
|
eon = uploaded_file.uploader.filename if uploaded_file
|
|
97
|
-
eon ||= File.basename(path) if path.present? #
|
|
97
|
+
eon ||= File.basename(path) if path.present? # NOTE: uploader.filename is `nil` with uncached remote files (e.g. AWSFile)
|
|
98
98
|
eon
|
|
99
99
|
end
|
|
100
100
|
|
|
@@ -129,7 +129,7 @@ class ProxyDepositRequest < ActiveRecord::Base
|
|
|
129
129
|
|
|
130
130
|
# @param [TrueClass,FalseClass] reset (false) if true, reset the access controls. This revokes edit access from the depositor
|
|
131
131
|
def transfer!(reset = false)
|
|
132
|
-
|
|
132
|
+
Hyrax::ChangeDepositorService.call(work, receiving_user, reset)
|
|
133
133
|
fulfill!(status: ACCEPTED)
|
|
134
134
|
end
|
|
135
135
|
|
|
@@ -8,11 +8,11 @@ module Hyrax
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def total_items
|
|
11
|
-
Hyrax::SolrService.count("{!field f
|
|
11
|
+
Hyrax::SolrService.count("{!field f=#{Hyrax.config.admin_set_predicate.qname.last}_ssim}#{id}")
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def total_viewable_items
|
|
15
|
-
field_pairs = { "
|
|
15
|
+
field_pairs = { "#{Hyrax.config.admin_set_predicate.qname.last}_ssim" => id.to_s }
|
|
16
16
|
SolrQueryService.new
|
|
17
17
|
.with_field_pairs(field_pairs: field_pairs)
|
|
18
18
|
.accessible_by(ability: current_ability)
|
|
@@ -47,13 +47,11 @@ module Hyrax
|
|
|
47
47
|
# in order.
|
|
48
48
|
# Arbitrarily maxed at 10 thousand; had to specify rows due to solr's default of 10
|
|
49
49
|
def file_set_ids
|
|
50
|
-
@file_set_ids ||=
|
|
51
|
-
Hyrax::SolrService.query("{!field f=has_model_ssim}FileSet",
|
|
50
|
+
@file_set_ids ||= Hyrax::SolrService.query("{!field f=has_model_ssim}FileSet",
|
|
52
51
|
rows: 10_000,
|
|
53
52
|
fl: Hyrax.config.id_field,
|
|
54
53
|
fq: "{!join from=ordered_targets_ssim to=id}id:\"#{id}/list_source\"")
|
|
55
|
-
|
|
56
|
-
end
|
|
54
|
+
.flat_map { |x| x.fetch(Hyrax.config.id_field, []) }
|
|
57
55
|
end
|
|
58
56
|
|
|
59
57
|
def presenter_factory_arguments
|
|
@@ -97,7 +97,7 @@ module Hyrax
|
|
|
97
97
|
# @return
|
|
98
98
|
def presenter_for(document:, ability:)
|
|
99
99
|
case document['has_model_ssim'].first
|
|
100
|
-
when Hyrax::FileSet.name
|
|
100
|
+
when Hyrax::FileSet.name, ::FileSet.name # ActiveFedora FileSet within a Valkyrie Resource
|
|
101
101
|
Hyrax::FileSetPresenter.new(document, ability)
|
|
102
102
|
else
|
|
103
103
|
Hyrax::WorkShowPresenter.new(document, ability)
|
|
@@ -111,7 +111,7 @@ module Hyrax
|
|
|
111
111
|
query += "{!term f=generic_type_si}#{generic_type}" if generic_type
|
|
112
112
|
|
|
113
113
|
Hyrax::SolrService
|
|
114
|
-
.post(query, rows: 10_000)
|
|
114
|
+
.post(q: query, rows: 10_000)
|
|
115
115
|
.fetch('response')
|
|
116
116
|
.fetch('docs')
|
|
117
117
|
end
|