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.
Files changed (255) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +26 -17
  3. data/.dassie/.env +2 -1
  4. data/.dassie/Gemfile +1 -1
  5. data/.dassie/app/forms/collection_resource_form.rb +8 -0
  6. data/.dassie/app/indexers/collection_resource_indexer.rb +8 -0
  7. data/.dassie/app/models/collection_resource.rb +35 -0
  8. data/.dassie/config/initializers/file_services.rb +4 -0
  9. data/.dassie/config/initializers/hyrax.rb +12 -1
  10. data/.dassie/config/metadata/collection_resource.yaml +23 -0
  11. data/.dassie/db/seeds.rb +74 -17
  12. data/.dassie/spec/forms/collection_resource_form_spec.rb +13 -0
  13. data/.dassie/spec/indexers/collection_resource_indexer_spec.rb +14 -0
  14. data/.dassie/spec/models/collection_resource_spec.rb +13 -0
  15. data/.github/release.yml +26 -0
  16. data/.gitignore +3 -0
  17. data/.regen +1 -1
  18. data/.rubocop.yml +1 -1
  19. data/.rubocop_fixme.yml +22 -3
  20. data/CONTAINERS.md +18 -13
  21. data/Dockerfile +4 -3
  22. data/app/actors/hyrax/actors/file_actor.rb +6 -4
  23. data/app/actors/hyrax/actors/transfer_request_actor.rb +3 -7
  24. data/app/assets/javascripts/hyrax/analytics_events.js +8 -2
  25. data/app/assets/javascripts/hyrax/autocomplete/linked_data.es6 +1 -3
  26. data/app/assets/javascripts/hyrax/collections_v2.es6 +13 -0
  27. data/app/controllers/concerns/hyrax/collections_controller_behavior.rb +1 -3
  28. data/app/controllers/concerns/hyrax/controller.rb +21 -0
  29. data/app/controllers/concerns/hyrax/works_controller_behavior.rb +83 -59
  30. data/app/controllers/hyrax/admin/admin_sets_controller.rb +105 -19
  31. data/app/controllers/hyrax/admin/permission_template_accesses_controller.rb +12 -19
  32. data/app/controllers/hyrax/batch_edits_controller.rb +12 -3
  33. data/app/controllers/hyrax/batch_uploads_controller.rb +4 -0
  34. data/app/controllers/hyrax/citations_controller.rb +1 -1
  35. data/app/controllers/hyrax/dashboard/collections_controller.rb +176 -83
  36. data/app/controllers/hyrax/single_use_links_viewer_controller.rb +1 -1
  37. data/app/forms/hyrax/forms/administrative_set_form.rb +19 -1
  38. data/app/forms/hyrax/forms/batch_edit_form.rb +1 -1
  39. data/app/forms/hyrax/forms/collection_form.rb +1 -1
  40. data/app/forms/hyrax/forms/dashboard/nest_collection_form.rb +21 -6
  41. data/app/forms/hyrax/forms/pcdm_collection_form.rb +30 -2
  42. data/app/forms/hyrax/forms/permission_template_form.rb +17 -9
  43. data/app/forms/hyrax/forms/resource_form.rb +23 -5
  44. data/app/forms/hyrax/forms/widgets/admin_set_visibility.rb +1 -1
  45. data/app/helpers/hyrax/collections_helper.rb +14 -0
  46. data/app/helpers/hyrax/membership_helper.rb +1 -1
  47. data/app/helpers/hyrax/trophy_helper.rb +1 -1
  48. data/app/helpers/hyrax/url_helper.rb +1 -1
  49. data/app/indexers/hyrax/administrative_set_indexer.rb +8 -2
  50. data/app/indexers/hyrax/deep_indexing_service.rb +1 -1
  51. data/app/indexers/hyrax/file_set_indexer.rb +1 -0
  52. data/app/indexers/hyrax/pcdm_collection_indexer.rb +3 -2
  53. data/app/indexers/hyrax/thumbnail_indexer.rb +31 -0
  54. data/app/indexers/hyrax/valkyrie_file_set_indexer.rb +6 -6
  55. data/app/indexers/hyrax/valkyrie_indexer.rb +4 -2
  56. data/app/indexers/hyrax/valkyrie_work_indexer.rb +13 -0
  57. data/app/inputs/controlled_vocabulary_input.rb +2 -0
  58. data/app/jobs/change_depositor_event_job.rb +47 -0
  59. data/app/jobs/characterize_job.rb +43 -3
  60. data/app/jobs/concerns/hyrax/members_permission_job_behavior.rb +1 -1
  61. data/app/jobs/content_depositor_change_event_job.rb +2 -1
  62. data/app/jobs/hyrax/propagate_change_depositor_job.rb +32 -0
  63. data/app/jobs/import_url_job.rb +4 -6
  64. data/app/jobs/inherit_permissions_job.rb +1 -1
  65. data/app/jobs/valkyrie_create_derivatives_job.rb +25 -0
  66. data/app/jobs/valkyrie_ingest_job.rb +41 -35
  67. data/app/models/admin_set.rb +10 -2
  68. data/app/models/collection_branding_info.rb +8 -6
  69. data/app/models/concerns/hyrax/collection_behavior.rb +3 -3
  70. data/app/models/concerns/hyrax/file_set/characterization.rb +7 -1
  71. data/app/models/concerns/hyrax/solr_document/metadata.rb +1 -0
  72. data/app/models/concerns/hyrax/solr_document_behavior.rb +9 -3
  73. data/app/models/concerns/hyrax/user.rb +11 -0
  74. data/app/models/concerns/hyrax/work_behavior.rb +1 -1
  75. data/app/models/featured_work_list.rb +0 -1
  76. data/app/models/hyrax/administrative_set.rb +36 -1
  77. data/app/models/hyrax/collection_type.rb +2 -2
  78. data/app/models/hyrax/file_metadata.rb +37 -3
  79. data/app/models/hyrax/file_set.rb +43 -4
  80. data/app/models/hyrax/group.rb +19 -0
  81. data/app/models/hyrax/pcdm_collection.rb +56 -1
  82. data/app/models/hyrax/permission_template.rb +11 -5
  83. data/app/models/hyrax/work.rb +91 -0
  84. data/app/models/job_io_wrapper.rb +1 -1
  85. data/app/models/proxy_deposit_request.rb +1 -1
  86. data/app/presenters/hyrax/admin_set_presenter.rb +2 -2
  87. data/app/presenters/hyrax/member_presenter_factory.rb +2 -4
  88. data/app/presenters/hyrax/pcdm_member_presenter_factory.rb +2 -2
  89. data/app/presenters/hyrax/work_show_presenter.rb +10 -6
  90. data/app/search_builders/hyrax/dashboard/collections_search_builder.rb +2 -2
  91. data/app/search_builders/hyrax/dashboard/managed_search_filters.rb +44 -4
  92. data/app/search_builders/hyrax/dashboard/nested_collections_search_builder.rb +2 -2
  93. data/app/search_builders/hyrax/my/collections_search_builder.rb +11 -4
  94. data/app/services/hyrax/access_control_list.rb +20 -6
  95. data/app/services/hyrax/adapters/nesting_index_adapter.rb +3 -3
  96. data/app/services/hyrax/admin_set_create_service.rb +21 -37
  97. data/app/services/hyrax/change_content_depositor_service.rb +2 -2
  98. data/app/services/hyrax/change_depositor_service.rb +70 -0
  99. data/app/services/hyrax/characterization/valkyrie_characterization_service.rb +4 -6
  100. data/app/services/hyrax/collections/collection_member_service.rb +3 -5
  101. data/app/services/hyrax/collections/nested_collection_query_service.rb +24 -12
  102. data/app/services/hyrax/custom_queries/navigators/child_file_sets_navigator.rb +45 -0
  103. data/app/services/hyrax/custom_queries/navigators/child_filesets_navigator.rb +7 -2
  104. data/app/services/hyrax/custom_queries/navigators/parent_work_navigator.rb +54 -0
  105. data/app/services/hyrax/default_middleware_stack.rb +3 -0
  106. data/app/services/hyrax/file_set_derivatives_service.rb +21 -2
  107. data/app/services/hyrax/file_set_type_service.rb +2 -5
  108. data/app/services/hyrax/listeners/file_metadata_listener.rb +31 -1
  109. data/app/services/hyrax/listeners/member_cleanup_listener.rb +27 -11
  110. data/app/services/hyrax/listeners/metadata_index_listener.rb +39 -0
  111. data/app/services/hyrax/listeners/proxy_deposit_listener.rb +14 -8
  112. data/app/services/hyrax/location_service.rb +33 -0
  113. data/app/services/hyrax/multiple_membership_checker.rb +46 -1
  114. data/app/services/hyrax/resource_visibility_propagator.rb +1 -1
  115. data/app/services/hyrax/simple_schema_loader.rb +5 -1
  116. data/app/services/hyrax/solr_query_service.rb +12 -7
  117. data/app/services/hyrax/thumbnail_path_service.rb +1 -1
  118. data/app/services/hyrax/valkyrie_persist_derivatives.rb +50 -0
  119. data/app/services/hyrax/valkyrie_upload.rb +94 -0
  120. data/app/services/hyrax/work_uploads_handler.rb +0 -10
  121. data/app/services/hyrax/workflow/workflow_importer.rb +7 -9
  122. data/app/services/hyrax/workflow/workflow_schema.rb +3 -5
  123. data/app/strategies/hyrax/strategies/yaml_strategy.rb +4 -6
  124. data/app/uploaders/hyrax/uploaded_file_uploader.rb +4 -4
  125. data/app/utils/hyrax/data_destroyers/collection_branding_destroyer.rb +29 -0
  126. data/app/utils/hyrax/data_destroyers/collection_types_destroyer.rb +26 -0
  127. data/app/utils/hyrax/data_destroyers/default_admin_set_id_cache_destroyer.rb +26 -0
  128. data/app/utils/hyrax/data_destroyers/featured_works_destroyer.rb +27 -0
  129. data/app/utils/hyrax/data_destroyers/permission_templates_destroyer.rb +30 -0
  130. data/app/utils/hyrax/data_destroyers/repository_metadata_destroyer.rb +42 -0
  131. data/app/utils/hyrax/data_destroyers/stats_destroyer.rb +33 -0
  132. data/app/utils/hyrax/data_maintenance.rb +51 -0
  133. data/app/utils/hyrax/required_data_seeder.rb +21 -0
  134. data/app/utils/hyrax/required_data_seeders/collection_seeder.rb +26 -0
  135. data/app/utils/hyrax/required_data_seeders/collection_type_seeder.rb +36 -0
  136. data/app/utils/hyrax/test_data_seeder.rb +24 -0
  137. data/app/utils/hyrax/test_data_seeders/collection_seeder.rb +91 -0
  138. data/app/utils/hyrax/test_data_seeders/collection_type_seeder.rb +72 -0
  139. data/app/utils/hyrax/test_data_seeders/user_seeder.rb +52 -0
  140. data/app/validators/hyrax/collection_membership_validator.rb +39 -0
  141. data/app/views/catalog/_index_header_list_default.html.erb +8 -1
  142. data/app/views/catalog/_thumbnail_list_default.html.erb +8 -3
  143. data/app/views/collections/edit_fields/_based_near.html.erb +7 -7
  144. data/app/views/hyrax/admin/admin_sets/_form_participant_table.html.erb +2 -2
  145. data/app/views/hyrax/admin/admin_sets/_form_participants.html.erb +2 -2
  146. data/app/views/hyrax/admin/admin_sets/_form_visibility.html.erb +2 -2
  147. data/app/views/hyrax/admin/admin_sets/_form_workflow.erb +1 -1
  148. data/app/views/hyrax/admin/collection_types/index.html.erb +1 -1
  149. data/app/views/hyrax/base/_form.html.erb +1 -1
  150. data/app/views/hyrax/base/_form_child_work_relationships.html.erb +1 -1
  151. data/app/views/hyrax/dashboard/collections/_default_group.html.erb +2 -2
  152. data/app/views/hyrax/dashboard/collections/_form.html.erb +24 -17
  153. data/app/views/hyrax/dashboard/collections/_form_branding.html.erb +1 -0
  154. data/app/views/hyrax/dashboard/collections/_form_discovery.html.erb +6 -3
  155. data/app/views/hyrax/dashboard/collections/_form_share.html.erb +2 -2
  156. data/app/views/hyrax/dashboard/collections/_form_share_table.html.erb +3 -3
  157. data/app/views/hyrax/dashboard/collections/_list_collections.html.erb +2 -2
  158. data/app/views/hyrax/dashboard/sidebar/_activity.html.erb +1 -1
  159. data/app/views/hyrax/dashboard/works/_default_group.html.erb +1 -1
  160. data/app/views/hyrax/dashboard/works/_list_works.html.erb +1 -1
  161. data/app/views/hyrax/file_sets/_actions.html.erb +2 -2
  162. data/app/views/hyrax/my/_facet_pagination.html.erb +12 -9
  163. data/app/views/hyrax/my/_work_action_menu.html.erb +8 -9
  164. data/app/views/hyrax/my/collections/_default_group.html.erb +2 -2
  165. data/app/views/hyrax/my/collections/_list_collections.html.erb +2 -2
  166. data/app/views/hyrax/my/collections/index.html.erb +3 -2
  167. data/app/views/hyrax/my/works/_default_group.html.erb +1 -1
  168. data/app/views/hyrax/my/works/_list_works.html.erb +1 -2
  169. data/app/views/hyrax/my/works/_tabs.html.erb +6 -1
  170. data/app/views/hyrax/my/works/index.html.erb +4 -2
  171. data/chart/hyrax/Chart.yaml +11 -7
  172. data/chart/hyrax/README.md +22 -1
  173. data/chart/hyrax/templates/_helpers.tpl +4 -0
  174. data/chart/hyrax/templates/cron-embargo.yaml +5 -0
  175. data/chart/hyrax/templates/cron-lease.yaml +5 -0
  176. data/chart/hyrax/templates/deployment-worker.yaml +11 -0
  177. data/chart/hyrax/templates/ingress.yaml +7 -6
  178. data/chart/hyrax/values.yaml +152 -0
  179. data/config/features.rb +48 -50
  180. data/config/initializers/listeners.rb +0 -1
  181. data/config/initializers/{valkryrie_storage.rb → storage_adapter_initializer.rb} +5 -0
  182. data/config/locales/hyrax.de.yml +18 -17
  183. data/config/locales/hyrax.en.yml +30 -28
  184. data/config/locales/hyrax.es.yml +10 -9
  185. data/config/locales/hyrax.fr.yml +2 -1
  186. data/config/locales/hyrax.it.yml +3 -2
  187. data/config/locales/hyrax.pt-BR.yml +2 -1
  188. data/config/locales/hyrax.zh.yml +2 -1
  189. data/config/metadata/basic_metadata.yaml +2 -0
  190. data/config/metadata/core_metadata.yaml +1 -1
  191. data/docker-compose.yml +47 -42
  192. data/documentation/developing-your-hyrax-based-app.md +1 -1
  193. data/documentation/legacyREADME.md +1 -1
  194. data/hyrax.gemspec +5 -3
  195. data/lib/generators/hyrax/collection_resource/USAGE +20 -0
  196. data/lib/generators/hyrax/collection_resource/collection_resource_generator.rb +133 -0
  197. data/lib/generators/hyrax/collection_resource/templates/collection.rb.erb +34 -0
  198. data/lib/generators/hyrax/collection_resource/templates/collection_form.rb.erb +7 -0
  199. data/lib/generators/hyrax/collection_resource/templates/collection_form_spec.rb.erb +13 -0
  200. data/lib/generators/hyrax/collection_resource/templates/collection_indexer.rb.erb +7 -0
  201. data/lib/generators/hyrax/collection_resource/templates/collection_indexer_spec.rb.erb +13 -0
  202. data/lib/generators/hyrax/collection_resource/templates/collection_metadata.yaml +22 -0
  203. data/lib/generators/hyrax/collection_resource/templates/collection_spec.rb.erb +12 -0
  204. data/lib/generators/hyrax/install_generator.rb +9 -0
  205. data/lib/hyrax/administrative_set_name.rb +18 -0
  206. data/lib/hyrax/collection_name.rb +2 -0
  207. data/lib/hyrax/configuration.rb +22 -0
  208. data/lib/hyrax/controlled_vocabularies/location.rb +9 -2
  209. data/lib/hyrax/controlled_vocabularies/resource_label_caching.rb +42 -0
  210. data/lib/hyrax/controlled_vocabularies.rb +1 -0
  211. data/lib/hyrax/publisher.rb +49 -0
  212. data/lib/hyrax/schema.rb +16 -13
  213. data/lib/hyrax/specs/capybara.rb +1 -1
  214. data/lib/hyrax/specs/shared_specs/hydra_works.rb +11 -5
  215. data/lib/hyrax/specs/shared_specs/indexers.rb +117 -3
  216. data/lib/hyrax/transactions/admin_set_create.rb +2 -1
  217. data/lib/hyrax/transactions/admin_set_destroy.rb +22 -0
  218. data/lib/hyrax/transactions/admin_set_update.rb +21 -0
  219. data/lib/hyrax/transactions/collection_destroy.rb +22 -0
  220. data/lib/hyrax/transactions/collection_update.rb +5 -2
  221. data/lib/hyrax/transactions/container.rb +97 -23
  222. data/lib/hyrax/transactions/create_work.rb +3 -0
  223. data/lib/hyrax/transactions/destroy_work.rb +3 -0
  224. data/lib/hyrax/transactions/steps/apply_collection_permission_template.rb +2 -0
  225. data/lib/hyrax/transactions/steps/apply_permission_template.rb +2 -0
  226. data/lib/hyrax/transactions/steps/apply_visibility.rb +2 -0
  227. data/lib/hyrax/transactions/steps/change_depositor.rb +46 -0
  228. data/lib/hyrax/transactions/steps/check_for_empty_admin_set.rb +36 -0
  229. data/lib/hyrax/transactions/steps/delete_access_control.rb +32 -0
  230. data/lib/hyrax/transactions/steps/delete_resource.rb +19 -3
  231. data/lib/hyrax/transactions/steps/destroy_work.rb +3 -1
  232. data/lib/hyrax/transactions/steps/ensure_permission_template.rb +2 -0
  233. data/lib/hyrax/transactions/steps/save.rb +24 -6
  234. data/lib/hyrax/transactions/steps/save_access_control.rb +2 -2
  235. data/lib/hyrax/transactions/steps/save_collection_banner.rb +59 -0
  236. data/lib/hyrax/transactions/steps/save_collection_logo.rb +109 -0
  237. data/lib/hyrax/transactions/steps/save_work.rb +3 -0
  238. data/lib/hyrax/transactions/steps/set_user_as_creator.rb +41 -0
  239. data/lib/hyrax/transactions/steps/update_work_members.rb +51 -0
  240. data/lib/hyrax/transactions/update_work.rb +4 -3
  241. data/lib/hyrax/transactions/work_create.rb +1 -1
  242. data/lib/hyrax/transactions/work_destroy.rb +2 -1
  243. data/lib/hyrax/transactions/work_update.rb +19 -0
  244. data/lib/hyrax/version.rb +1 -1
  245. data/lib/wings/active_fedora_converter/file_metadata_node.rb +48 -0
  246. data/lib/wings/active_fedora_converter/instance_builder.rb +68 -0
  247. data/lib/wings/active_fedora_converter.rb +3 -3
  248. data/lib/wings/attribute_transformer.rb +5 -1
  249. data/lib/wings/services/custom_queries/find_file_metadata.rb +19 -8
  250. data/lib/wings/setup.rb +3 -1
  251. data/lib/wings/valkyrie/persister.rb +2 -0
  252. data/lib/wings/valkyrie/query_service.rb +6 -7
  253. data/lib/wings/valkyrie/storage.rb +7 -1
  254. data/template.rb +1 -1
  255. 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 = :original_file
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 == ::AdminSet
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: ActiveFedora.model_mapper)
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 #:nodoc:
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)
@@ -18,7 +18,6 @@ class FeaturedWorkList
18
18
  @works = FeaturedWork.all
19
19
  add_solr_document_to_works
20
20
  @works = @works.reject do |work|
21
- work.destroy if work.presenter.blank?
22
21
  work.presenter.blank?
23
22
  end
24
23
  end
@@ -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::Set.of(Valkyrie::Types::String)
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: false)
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 Hydra::PCDM::File which holds metadata and the file in ActiveFedora
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].freeze)
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
- Hyrax.storage_adapter.find_by(id: file_identifier)
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 ||= begin
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?
@@ -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 {#source_model}.
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 #source_model instead
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('Use #source_model instead')
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 #source_model instead
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('Use #source_model instead')
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
@@ -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? # note: uploader.filename is `nil` with uncached remote files (e.g. AWSFile)
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
- ContentDepositorChangeEventJob.perform_later(work, receiving_user, reset)
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=isPartOf_ssim}#{id}")
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 = { "isPartOf_ssim" => id.to_s }
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 ||= begin
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
- .flat_map { |x| x.fetch(Hyrax.config.id_field, []) }
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