hyrax 5.2.0 → 5.3.0

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 (527) hide show
  1. checksums.yaml +4 -4
  2. data/.dassie/.env +5 -1
  3. data/.dassie/Gemfile +4 -2
  4. data/.dassie/app/assets/images/bulkrax/removed.png +0 -0
  5. data/.dassie/app/assets/javascripts/application.js +2 -0
  6. data/.dassie/app/assets/stylesheets/application.css +1 -0
  7. data/.dassie/app/controllers/catalog_controller.rb +1 -0
  8. data/.dassie/app/forms/admin_set_resource_form.rb +6 -0
  9. data/.dassie/app/forms/collection_resource_form.rb +5 -2
  10. data/.dassie/app/forms/generic_work_resource_form.rb +5 -2
  11. data/.dassie/app/forms/monograph_form.rb +5 -3
  12. data/.dassie/app/indexers/admin_set_resource_indexer.rb +5 -0
  13. data/.dassie/app/indexers/collection_resource_indexer.rb +3 -3
  14. data/.dassie/app/indexers/generic_work_resource_indexer.rb +6 -3
  15. data/.dassie/app/indexers/monograph_indexer.rb +6 -2
  16. data/.dassie/app/models/ability.rb +8 -0
  17. data/.dassie/app/models/collection_resource.rb +4 -2
  18. data/.dassie/app/models/concerns/bulkrax/has_local_processing.rb +8 -0
  19. data/.dassie/app/models/generic_work_resource.rb +5 -2
  20. data/.dassie/app/models/monograph.rb +5 -2
  21. data/.dassie/app/views/blacklight_dynamic_sitemap/sitemap/show.xml.builder +22 -0
  22. data/.dassie/bin/importer +142 -0
  23. data/.dassie/bin/web +4 -0
  24. data/.dassie/config/browse_everything_providers.yml +1 -1
  25. data/.dassie/config/bulkrax_api.yml +86 -0
  26. data/.dassie/config/initializers/bulkrax.rb +92 -0
  27. data/.dassie/config/initializers/clamav.rb +2 -0
  28. data/.dassie/config/initializers/hyrax.rb +7 -1
  29. data/.dassie/config/initializers/riiif.rb +4 -80
  30. data/.dassie/config/initializers/wings.rb +1 -1
  31. data/.dassie/config/metadata_profiles/m3_profile.yaml +929 -0
  32. data/.dassie/config/puma.rb +4 -2
  33. data/.dassie/config/routes.rb +7 -0
  34. data/.dassie/config/sidekiq.yml +17 -0
  35. data/.dassie/config/uv/uv.html +63 -81
  36. data/.dassie/db/migrate/20240606205215_create_hyrax_flexible_schemas.rb +9 -0
  37. data/.dassie/db/migrate/20240606205216_add_contexts_to_hyrax_flexible_schemas.rb +5 -0
  38. data/.dassie/db/migrate/20250826142438_create_bulkrax_importers.bulkrax.rb +19 -0
  39. data/.dassie/db/migrate/20250826142439_create_bulkrax_importer_runs.bulkrax.rb +17 -0
  40. data/.dassie/db/migrate/20250826142440_create_bulkrax_entries.bulkrax.rb +17 -0
  41. data/.dassie/db/migrate/20250826142441_add_status_to_entry.bulkrax.rb +10 -0
  42. data/.dassie/db/migrate/20250826142442_add_collections_to_importer_runs.bulkrax.rb +7 -0
  43. data/.dassie/db/migrate/20250826142443_change_collection_ids_on_entries.bulkrax.rb +6 -0
  44. data/.dassie/db/migrate/20250826142444_create_bulkrax_exporters.bulkrax.rb +20 -0
  45. data/.dassie/db/migrate/20250826142445_create_bulkrax_exporter_runs.bulkrax.rb +15 -0
  46. data/.dassie/db/migrate/20250826142446_change_importer_and_exporter_to_polymorphic.bulkrax.rb +19 -0
  47. data/.dassie/db/migrate/20250826142447_add_total_collection_records_to_importer_runs.bulkrax.rb +6 -0
  48. data/.dassie/db/migrate/20250826142448_add_children_to_importer_runs.bulkrax.rb +7 -0
  49. data/.dassie/db/migrate/20250826142449_change_total_records_to_total_work_entries.bulkrax.rb +7 -0
  50. data/.dassie/db/migrate/20250826142450_change_entry_last_error.bulkrax.rb +20 -0
  51. data/.dassie/db/migrate/20250826142451_add_validate_only_to_bulkrax_importers.bulkrax.rb +6 -0
  52. data/.dassie/db/migrate/20250826142452_add_status_to_importers.bulkrax.rb +10 -0
  53. data/.dassie/db/migrate/20250826142453_remove_foreign_key_from_bulkrax_entries.bulkrax.rb +6 -0
  54. data/.dassie/db/migrate/20250826142454_add_status_to_exporters.bulkrax.rb +8 -0
  55. data/.dassie/db/migrate/20250826142455_add_invalid_record_to_importer_run.bulkrax.rb +6 -0
  56. data/.dassie/db/migrate/20250826142456_create_bulkrax_statuses.bulkrax.rb +19 -0
  57. data/.dassie/db/migrate/20250826142457_move_to_statuses.bulkrax.rb +31 -0
  58. data/.dassie/db/migrate/20250826142458_add_date_filter_and_status_to_bulkrax_exporters.bulkrax.rb +8 -0
  59. data/.dassie/db/migrate/20250826142459_add_workflow_status_to_bulkrax_exporter.bulkrax.rb +6 -0
  60. data/.dassie/db/migrate/20250826142460_remove_unused_last_error.bulkrax.rb +8 -0
  61. data/.dassie/db/migrate/20250826142461_increase_text_sizes.bulkrax.rb +13 -0
  62. data/.dassie/db/migrate/20250826142462_change_bulkrax_statuses_error_message_column_type_to_text.bulkrax.rb +6 -0
  63. data/.dassie/db/migrate/20250826142463_rename_children_counters_to_relationships.bulkrax.rb +7 -0
  64. data/.dassie/db/migrate/20250826142464_add_file_set_counters_to_importer_runs.bulkrax.rb +8 -0
  65. data/.dassie/db/migrate/20250826142465_add_import_attempts_to_entries.bulkrax.rb +6 -0
  66. data/.dassie/db/migrate/20250826142466_add_work_counters_to_importer_runs.bulkrax.rb +7 -0
  67. data/.dassie/db/migrate/20250826142467_create_bulkrax_pending_relationships.bulkrax.rb +14 -0
  68. data/.dassie/db/migrate/20250826142468_add_order_to_bulkrax_pending_relationships.bulkrax.rb +6 -0
  69. data/.dassie/db/migrate/20250826142469_add_include_thumbnails_to_bulkrax_exporters.bulkrax.rb +6 -0
  70. data/.dassie/db/migrate/20250826142470_add_generated_metadata_to_bulkrax_exporters.bulkrax.rb +6 -0
  71. data/.dassie/db/migrate/20250826142471_rename_bulkrax_importer_run_to_importer_run.bulkrax.rb +18 -0
  72. data/.dassie/db/migrate/20250826142472_add_indices_to_bulkrax.bulkrax.rb +26 -0
  73. data/.dassie/db/migrate/20250826142473_denormalize_status_message.bulkrax.rb +8 -0
  74. data/.dassie/db/migrate/20250826142474_update_identifier_index.bulkrax.rb +7 -0
  75. data/.dassie/db/migrate/20250826142475_add_index_to_metadata_bulkrax_identifier.bulkrax.rb +19 -0
  76. data/.dassie/db/migrate/20250826142476_add_file_name_to_uploaded_files.bulkrax.rb +6 -0
  77. data/.dassie/db/migrate/20250826142477_add_error_tracking_to_pending_relationships.bulkrax.rb +6 -0
  78. data/.dassie/db/migrate/20250826142478_add_last_imported_at_to_bulkrax_importers.bulkrax.rb +6 -0
  79. data/.dassie/db/migrate/20250826142479_add_next_import_at_to_bulkrax_importers.bulkrax.rb +6 -0
  80. data/.dassie/db/migrate/20250826142480_entry_error_denormalization.bulkrax.rb +8 -0
  81. data/.dassie/db/migrate/20250826142481_faster_first_entry.bulkrax.rb +8 -0
  82. data/.dassie/db/migrate/20260430000001_create_hyrax_redirect_paths.hyrax.rb +13 -0
  83. data/.dassie/db/migrate/20260521003627_add_additional_redirect_info.hyrax.rb +32 -0
  84. data/.dassie/db/schema.rb +154 -1
  85. data/.dassie/package.json +1 -1
  86. data/.dassie/rspec_split_configuration.json +835 -0
  87. data/.dassie/solr/conf/solrconfig.xml +21 -5
  88. data/.github/{ISSUE_TEMPLATE.md → ISSUE_TEMPLATE/issue_template.md} +5 -0
  89. data/.github/workflows/lint-build-test.yml +5 -1
  90. data/.github/workflows/release-charts.yml +48 -0
  91. data/.gitignore +6 -0
  92. data/.koppie/.env +5 -1
  93. data/.koppie/Gemfile +3 -1
  94. data/.koppie/app/assets/images/bulkrax/removed.png +0 -0
  95. data/.koppie/app/assets/javascripts/application.js +2 -0
  96. data/.koppie/app/assets/stylesheets/application.css +1 -0
  97. data/.koppie/app/controllers/catalog_controller.rb +1 -1
  98. data/.koppie/app/forms/collection_resource_form.rb +5 -2
  99. data/.koppie/app/forms/file_set_form.rb +5 -0
  100. data/.koppie/app/forms/generic_work_form.rb +5 -3
  101. data/.koppie/app/forms/monograph_form.rb +5 -3
  102. data/.koppie/app/indexers/collection_resource_indexer.rb +5 -2
  103. data/.koppie/app/indexers/file_set_indexer.rb +7 -0
  104. data/.koppie/app/indexers/generic_work_indexer.rb +6 -3
  105. data/.koppie/app/indexers/monograph_indexer.rb +6 -2
  106. data/.koppie/app/models/ability.rb +8 -0
  107. data/.koppie/app/models/collection_resource.rb +4 -2
  108. data/.koppie/app/models/concerns/bulkrax/has_local_processing.rb +8 -0
  109. data/.koppie/app/models/generic_work.rb +5 -2
  110. data/.koppie/app/models/monograph.rb +5 -2
  111. data/.koppie/app/views/blacklight_dynamic_sitemap/sitemap/show.xml.builder +22 -0
  112. data/.koppie/bin/importer +142 -0
  113. data/.koppie/bin/web +4 -0
  114. data/.koppie/config/browse_everything_providers.yml +2 -0
  115. data/.koppie/config/bulkrax_api.yml +86 -0
  116. data/.koppie/config/initializers/bulkrax.rb +92 -0
  117. data/.koppie/config/initializers/clamav.rb +2 -0
  118. data/.koppie/config/initializers/hyrax.rb +11 -3
  119. data/.koppie/config/initializers/riiif.rb +4 -82
  120. data/.koppie/config/metadata_profiles/m3_profile.yaml +930 -0
  121. data/.koppie/config/routes.rb +7 -0
  122. data/.koppie/config/sidekiq.yml +2 -0
  123. data/.koppie/config/uv/uv.html +63 -81
  124. data/.koppie/db/migrate/20240606205215_create_hyrax_flexible_schemas.rb +9 -0
  125. data/.koppie/db/migrate/20240606205216_add_contexts_to_hyrax_flexible_schemas.rb +5 -0
  126. data/.koppie/db/migrate/20250826142438_create_bulkrax_importers.bulkrax.rb +19 -0
  127. data/.koppie/db/migrate/20250826142439_create_bulkrax_importer_runs.bulkrax.rb +17 -0
  128. data/.koppie/db/migrate/20250826142440_create_bulkrax_entries.bulkrax.rb +17 -0
  129. data/.koppie/db/migrate/20250826142441_add_status_to_entry.bulkrax.rb +10 -0
  130. data/.koppie/db/migrate/20250826142442_add_collections_to_importer_runs.bulkrax.rb +7 -0
  131. data/.koppie/db/migrate/20250826142443_change_collection_ids_on_entries.bulkrax.rb +6 -0
  132. data/.koppie/db/migrate/20250826142444_create_bulkrax_exporters.bulkrax.rb +20 -0
  133. data/.koppie/db/migrate/20250826142445_create_bulkrax_exporter_runs.bulkrax.rb +15 -0
  134. data/.koppie/db/migrate/20250826142446_change_importer_and_exporter_to_polymorphic.bulkrax.rb +19 -0
  135. data/.koppie/db/migrate/20250826142447_add_total_collection_records_to_importer_runs.bulkrax.rb +6 -0
  136. data/.koppie/db/migrate/20250826142448_add_children_to_importer_runs.bulkrax.rb +7 -0
  137. data/.koppie/db/migrate/20250826142449_change_total_records_to_total_work_entries.bulkrax.rb +7 -0
  138. data/.koppie/db/migrate/20250826142450_change_entry_last_error.bulkrax.rb +20 -0
  139. data/.koppie/db/migrate/20250826142451_add_validate_only_to_bulkrax_importers.bulkrax.rb +6 -0
  140. data/.koppie/db/migrate/20250826142452_add_status_to_importers.bulkrax.rb +10 -0
  141. data/.koppie/db/migrate/20250826142453_remove_foreign_key_from_bulkrax_entries.bulkrax.rb +6 -0
  142. data/.koppie/db/migrate/20250826142454_add_status_to_exporters.bulkrax.rb +8 -0
  143. data/.koppie/db/migrate/20250826142455_add_invalid_record_to_importer_run.bulkrax.rb +6 -0
  144. data/.koppie/db/migrate/20250826142456_create_bulkrax_statuses.bulkrax.rb +19 -0
  145. data/.koppie/db/migrate/20250826142457_move_to_statuses.bulkrax.rb +31 -0
  146. data/.koppie/db/migrate/20250826142458_add_date_filter_and_status_to_bulkrax_exporters.bulkrax.rb +8 -0
  147. data/.koppie/db/migrate/20250826142459_add_workflow_status_to_bulkrax_exporter.bulkrax.rb +6 -0
  148. data/.koppie/db/migrate/20250826142460_remove_unused_last_error.bulkrax.rb +8 -0
  149. data/.koppie/db/migrate/20250826142461_increase_text_sizes.bulkrax.rb +13 -0
  150. data/.koppie/db/migrate/20250826142462_change_bulkrax_statuses_error_message_column_type_to_text.bulkrax.rb +6 -0
  151. data/.koppie/db/migrate/20250826142463_rename_children_counters_to_relationships.bulkrax.rb +7 -0
  152. data/.koppie/db/migrate/20250826142464_add_file_set_counters_to_importer_runs.bulkrax.rb +8 -0
  153. data/.koppie/db/migrate/20250826142465_add_import_attempts_to_entries.bulkrax.rb +6 -0
  154. data/.koppie/db/migrate/20250826142466_add_work_counters_to_importer_runs.bulkrax.rb +7 -0
  155. data/.koppie/db/migrate/20250826142467_create_bulkrax_pending_relationships.bulkrax.rb +14 -0
  156. data/.koppie/db/migrate/20250826142468_add_order_to_bulkrax_pending_relationships.bulkrax.rb +6 -0
  157. data/.koppie/db/migrate/20250826142469_add_include_thumbnails_to_bulkrax_exporters.bulkrax.rb +6 -0
  158. data/.koppie/db/migrate/20250826142470_add_generated_metadata_to_bulkrax_exporters.bulkrax.rb +6 -0
  159. data/.koppie/db/migrate/20250826142471_rename_bulkrax_importer_run_to_importer_run.bulkrax.rb +18 -0
  160. data/.koppie/db/migrate/20250826142472_add_indices_to_bulkrax.bulkrax.rb +26 -0
  161. data/.koppie/db/migrate/20250826142473_denormalize_status_message.bulkrax.rb +8 -0
  162. data/.koppie/db/migrate/20250826142474_update_identifier_index.bulkrax.rb +7 -0
  163. data/.koppie/db/migrate/20250826142475_add_index_to_metadata_bulkrax_identifier.bulkrax.rb +19 -0
  164. data/.koppie/db/migrate/20250826142476_add_file_name_to_uploaded_files.bulkrax.rb +6 -0
  165. data/.koppie/db/migrate/20250826142477_add_error_tracking_to_pending_relationships.bulkrax.rb +6 -0
  166. data/.koppie/db/migrate/20250826142478_add_last_imported_at_to_bulkrax_importers.bulkrax.rb +6 -0
  167. data/.koppie/db/migrate/20250826142479_add_next_import_at_to_bulkrax_importers.bulkrax.rb +6 -0
  168. data/.koppie/db/migrate/20250826142480_entry_error_denormalization.bulkrax.rb +8 -0
  169. data/.koppie/db/migrate/20250826142481_faster_first_entry.bulkrax.rb +8 -0
  170. data/.koppie/db/migrate/20260430000001_create_hyrax_redirect_paths.hyrax.rb +13 -0
  171. data/.koppie/db/migrate/20260521003627_add_additional_redirect_info.hyrax.rb +32 -0
  172. data/.koppie/db/schema.rb +154 -1
  173. data/.koppie/package.json +1 -1
  174. data/.koppie/rspec_split_configuration.json +835 -0
  175. data/.koppie/solr/conf/solrconfig.xml +0 -5
  176. data/.koppie/yarn.lock +5587 -752
  177. data/.rubocop.yml +1 -0
  178. data/CONTAINERS.md +2 -0
  179. data/Dockerfile +9 -22
  180. data/Gemfile +0 -1
  181. data/Gemfile.allinson +2 -0
  182. data/README.md +1 -2
  183. data/app/actors/hyrax/actors/file_actor.rb +2 -0
  184. data/app/actors/hyrax/actors/file_set_actor.rb +1 -1
  185. data/app/assets/javascripts/hyrax/app.js.erb +143 -10
  186. data/app/assets/javascripts/hyrax/collection_select.js +68 -0
  187. data/app/assets/javascripts/hyrax/copy_permalink_button.js +28 -0
  188. data/app/assets/javascripts/hyrax/redirects.js +45 -0
  189. data/app/assets/javascripts/hyrax/relationships/control.es6 +21 -1
  190. data/app/assets/javascripts/hyrax/select_work_type.es6 +7 -2
  191. data/app/assets/javascripts/hyrax.js +3 -1
  192. data/app/assets/stylesheets/hyrax/_file-show.scss +1 -0
  193. data/app/assets/stylesheets/hyrax/_viewer.scss +8 -0
  194. data/app/assets/stylesheets/hyrax/dashboard.scss +22 -1
  195. data/app/assets/stylesheets/hyrax/sidebar.scss +98 -3
  196. data/app/authorities/qa/authorities/collections.rb +9 -9
  197. data/app/controllers/concerns/hyrax/analytics_error_handling.rb +97 -0
  198. data/app/controllers/concerns/hyrax/collections_controller_behavior.rb +3 -1
  199. data/app/controllers/concerns/hyrax/ensure_migrated_behavior.rb +50 -0
  200. data/app/controllers/concerns/hyrax/flexible_catalog_behavior.rb +206 -0
  201. data/app/controllers/concerns/hyrax/flexible_schema_behavior.rb +17 -0
  202. data/app/controllers/concerns/hyrax/redirect_to_display_url.rb +54 -0
  203. data/app/controllers/concerns/hyrax/works_controller_behavior.rb +52 -10
  204. data/app/controllers/hyrax/admin/admin_sets_controller.rb +21 -13
  205. data/app/controllers/hyrax/admin/analytics/collection_reports_controller.rb +2 -0
  206. data/app/controllers/hyrax/admin/analytics/work_reports_controller.rb +1 -0
  207. data/app/controllers/hyrax/admin/metadata_profiles_controller.rb +66 -0
  208. data/app/controllers/hyrax/batch_uploads_controller.rb +2 -0
  209. data/app/controllers/hyrax/dashboard/collections_controller.rb +27 -6
  210. data/app/controllers/hyrax/dashboard/nest_collections_controller.rb +2 -1
  211. data/app/controllers/hyrax/dashboard_controller.rb +2 -1
  212. data/app/controllers/hyrax/file_sets_controller.rb +19 -1
  213. data/app/controllers/hyrax/homepage_controller.rb +7 -0
  214. data/app/controllers/hyrax/my/works_controller.rb +2 -21
  215. data/app/controllers/hyrax/permissions_controller.rb +4 -2
  216. data/app/controllers/hyrax/redirects_controller.rb +56 -0
  217. data/app/controllers/hyrax/single_use_links_viewer_controller.rb +2 -1
  218. data/app/controllers/hyrax/transcripts_controller.rb +31 -0
  219. data/app/controllers/hyrax/uploads_controller.rb +18 -9
  220. data/app/forms/concerns/hyrax/based_near_field_behavior.rb +77 -0
  221. data/app/forms/concerns/hyrax/flexible_form_behavior.rb +37 -0
  222. data/app/forms/concerns/hyrax/redirects_field_behavior.rb +95 -0
  223. data/app/forms/concerns/hyrax/transcripts_behavior.rb +40 -0
  224. data/app/forms/hyrax/forms/admin_set_form.rb +1 -1
  225. data/app/forms/hyrax/forms/administrative_set_form.rb +3 -0
  226. data/app/forms/hyrax/forms/batch_edit_form.rb +1 -3
  227. data/app/forms/hyrax/forms/batch_upload_form.rb +14 -0
  228. data/app/forms/hyrax/forms/file_set_edit_form.rb +1 -1
  229. data/app/forms/hyrax/forms/file_set_form.rb +6 -7
  230. data/app/forms/hyrax/forms/pcdm_collection_form.rb +17 -5
  231. data/app/forms/hyrax/forms/pcdm_object_form.rb +11 -3
  232. data/app/forms/hyrax/forms/resource_batch_edit_form.rb +8 -22
  233. data/app/forms/hyrax/forms/resource_form.rb +110 -10
  234. data/app/forms/hyrax/forms.rb +1 -0
  235. data/app/helpers/hyrax/attributes_helper.rb +109 -0
  236. data/app/helpers/hyrax/blacklight_override.rb +26 -0
  237. data/app/helpers/hyrax/collections_helper.rb +2 -0
  238. data/app/helpers/hyrax/file_set_form_helper.rb +24 -0
  239. data/app/helpers/hyrax/hyrax_helper_behavior.rb +51 -2
  240. data/app/helpers/hyrax/iiif_helper.rb +11 -1
  241. data/app/helpers/hyrax/permalink_helper.rb +37 -0
  242. data/app/helpers/hyrax/redirects_tab_helper.rb +29 -0
  243. data/app/helpers/hyrax/work_form_helper.rb +9 -5
  244. data/app/helpers/hyrax/works_helper.rb +14 -0
  245. data/app/indexers/concerns/hyrax/workflow_indexer.rb +30 -0
  246. data/app/indexers/hyrax/file_set_indexer.rb +1 -0
  247. data/app/indexers/hyrax/indexers/administrative_set_indexer.rb +2 -1
  248. data/app/indexers/hyrax/indexers/file_set_indexer.rb +6 -2
  249. data/app/indexers/hyrax/indexers/pcdm_collection_indexer.rb +11 -1
  250. data/app/indexers/hyrax/indexers/pcdm_object_indexer.rb +25 -4
  251. data/app/indexers/hyrax/indexers/redirects_indexer.rb +29 -0
  252. data/app/indexers/hyrax/indexers/resource_indexer.rb +4 -0
  253. data/app/indexers/hyrax/indexers.rb +2 -0
  254. data/app/inputs/controlled_vocabulary_input.rb +7 -1
  255. data/app/jobs/content_deposit_error_event_job.rb +14 -0
  256. data/app/jobs/create_work_job.rb +2 -0
  257. data/app/jobs/migrate_files_to_valkyrie_job.rb +7 -1
  258. data/app/models/batch_upload_item.rb +4 -0
  259. data/app/models/concerns/hyrax/ability/flexible_metadata_ability.rb +10 -0
  260. data/app/models/concerns/hyrax/ability.rb +3 -1
  261. data/app/models/concerns/hyrax/collection_behavior.rb +4 -0
  262. data/app/models/concerns/hyrax/file_set/transcripts.rb +16 -0
  263. data/app/models/concerns/hyrax/file_set_behavior.rb +9 -0
  264. data/app/models/concerns/hyrax/flexibility.rb +107 -0
  265. data/app/models/concerns/hyrax/redirects_normalization.rb +38 -0
  266. data/app/models/concerns/hyrax/solr_document/characterization.rb +1 -1
  267. data/app/models/concerns/hyrax/solr_document/metadata.rb +9 -0
  268. data/app/models/concerns/hyrax/solr_document/ordered_members.rb +4 -0
  269. data/app/models/concerns/hyrax/solr_document_behavior.rb +28 -6
  270. data/app/models/concerns/hyrax/suppressible.rb +1 -1
  271. data/app/models/concerns/hyrax/valkyrie_lazy_migration.rb +1 -1
  272. data/app/models/concerns/hyrax/with_embargoes_and_leases.rb +30 -0
  273. data/app/models/concerns/hyrax/work_behavior.rb +8 -0
  274. data/app/models/hyrax/administrative_set.rb +1 -1
  275. data/app/models/hyrax/change_set.rb +3 -1
  276. data/app/models/hyrax/embargo.rb +3 -1
  277. data/app/models/hyrax/file_set.rb +4 -2
  278. data/app/models/hyrax/flexible_schema.rb +219 -0
  279. data/app/models/hyrax/lease.rb +3 -1
  280. data/app/models/hyrax/pcdm_collection.rb +4 -1
  281. data/app/models/hyrax/redirect.rb +64 -0
  282. data/app/models/hyrax/redirect_path.rb +14 -0
  283. data/app/models/hyrax/resource.rb +22 -25
  284. data/app/models/hyrax/riiif/file.rb +43 -0
  285. data/app/models/hyrax/riiif/file_resolver.rb +65 -0
  286. data/app/models/hyrax/uploaded_file.rb +9 -0
  287. data/app/models/hyrax/virus_scanner.rb +16 -3
  288. data/app/models/hyrax/work.rb +4 -1
  289. data/app/models/job_io_wrapper.rb +12 -3
  290. data/app/models/user_mailbox.rb +3 -1
  291. data/app/presenters/hyrax/admin_set_presenter.rb +11 -0
  292. data/app/presenters/hyrax/annotates_content.rb +35 -0
  293. data/app/presenters/hyrax/collection_presenter.rb +5 -1
  294. data/app/presenters/hyrax/displays_content.rb +133 -0
  295. data/app/presenters/hyrax/displays_image.rb +11 -4
  296. data/app/presenters/hyrax/displays_transcripts.rb +59 -0
  297. data/app/presenters/hyrax/file_set_presenter.rb +8 -18
  298. data/app/presenters/hyrax/google_scholar_presenter.rb +39 -0
  299. data/app/presenters/hyrax/iiif_manifest_presenter.rb +22 -4
  300. data/app/presenters/hyrax/missing_method_behavior.rb +15 -0
  301. data/app/presenters/hyrax/pcdm_member_presenter_factory.rb +2 -4
  302. data/app/presenters/hyrax/work_show_presenter.rb +56 -14
  303. data/app/renderers/hyrax/renderers/attribute_renderer.rb +6 -2
  304. data/app/renderers/hyrax/renderers/license_attribute_renderer.rb +10 -10
  305. data/app/renderers/hyrax/renderers/redirects_label_attribute_renderer.rb +25 -0
  306. data/app/renderers/hyrax/renderers/rights_statement_attribute_renderer.rb +10 -11
  307. data/app/search_builders/hyrax/dashboard/nested_collections_search_builder.rb +1 -5
  308. data/app/search_builders/hyrax/filter_by_type.rb +1 -1
  309. data/app/services/hyrax/action/create_valkyrie_work.rb +3 -2
  310. data/app/services/hyrax/authority_rendering_helper.rb +28 -0
  311. data/app/services/hyrax/authority_service.rb +107 -0
  312. data/app/services/hyrax/callbacks.rb +2 -2
  313. data/app/services/hyrax/collections/nested_collection_query_service.rb +9 -3
  314. data/app/services/hyrax/collections_service.rb +17 -0
  315. data/app/services/hyrax/custom_queries/find_by_property_value.rb +89 -0
  316. data/app/services/hyrax/edit_permissions_service.rb +4 -4
  317. data/app/services/hyrax/file_set_type_service.rb +12 -4
  318. data/app/services/hyrax/flexible_schema_validator_service.rb +153 -0
  319. data/app/services/hyrax/flexible_schema_validators/class_validator.rb +123 -0
  320. data/app/services/hyrax/flexible_schema_validators/core_metadata_validator.rb +211 -0
  321. data/app/services/hyrax/flexible_schema_validators/existing_records_validator.rb +83 -0
  322. data/app/services/hyrax/flexible_schema_validators/redirects_validator.rb +116 -0
  323. data/app/services/hyrax/flexible_schema_validators/schema_validator.rb +34 -0
  324. data/app/services/hyrax/flexible_schema_validators/sort_properties_validator.rb +54 -0
  325. data/app/services/hyrax/license_service.rb +1 -1
  326. data/app/services/hyrax/listeners/metadata_index_listener.rb +11 -0
  327. data/app/services/hyrax/m3_profile_editor.rb +32 -0
  328. data/app/services/hyrax/m3_schema_loader.rb +119 -0
  329. data/app/services/hyrax/manifest_builder_service.rb +18 -24
  330. data/app/services/hyrax/permalink_path.rb +25 -0
  331. data/app/services/hyrax/qa_select_service.rb +9 -5
  332. data/app/services/hyrax/redirect_path_normalizer.rb +58 -0
  333. data/app/services/hyrax/redirects_lookup.rb +59 -0
  334. data/app/services/hyrax/resource_permissions_visibility_propagator.rb +54 -0
  335. data/app/services/hyrax/resource_types_service.rb +3 -20
  336. data/app/services/hyrax/rights_statement_service.rb +1 -1
  337. data/app/services/hyrax/schema_loader.rb +205 -0
  338. data/app/services/hyrax/search_service.rb +1 -1
  339. data/app/services/hyrax/simple_schema_loader.rb +28 -127
  340. data/app/services/hyrax/solr_service.rb +39 -2
  341. data/app/services/hyrax/tolerant_select_service.rb +5 -3
  342. data/app/services/hyrax/valkyrie_upload.rb +2 -2
  343. data/app/services/hyrax/visibility_propagator.rb +4 -1
  344. data/app/services/hyrax/work_uploads_handler.rb +17 -9
  345. data/app/services/hyrax/workflow/workflow_factory.rb +5 -4
  346. data/app/services/migrate_resource_service.rb +7 -1
  347. data/app/uploaders/hyrax/uploaded_file_uploader.rb +2 -2
  348. data/app/utils/hyrax/data_destroyers/collection_branding_destroyer.rb +1 -1
  349. data/app/utils/hyrax/required_data_seeder.rb +1 -0
  350. data/app/utils/hyrax/required_data_seeders/collection_type_seeder.rb +1 -1
  351. data/app/utils/hyrax/required_data_seeders/flexible_profile_seeder.rb +28 -0
  352. data/app/validators/hyrax/controlled_vocabulary_validator.rb +64 -0
  353. data/app/validators/hyrax/redirect_validator.rb +128 -0
  354. data/app/views/catalog/_thumbnail_list_default.html.erb +2 -2
  355. data/app/views/collections/edit_fields/_schema_version.html.erb +1 -0
  356. data/app/views/hyrax/admin/admin_sets/_form_metadata.html.erb +24 -2
  357. data/app/views/hyrax/admin/admin_sets/_show_document_list_row.html.erb +1 -1
  358. data/app/views/hyrax/admin/admin_sets/show.html.erb +1 -1
  359. data/app/views/hyrax/admin/analytics/_analytics_error.html.erb +42 -0
  360. data/app/views/hyrax/admin/analytics/collection_reports/index.html.erb +11 -9
  361. data/app/views/hyrax/admin/analytics/work_reports/index.html.erb +60 -57
  362. data/app/views/hyrax/admin/features/index.html.erb +1 -1
  363. data/app/views/hyrax/admin/metadata_profiles/_import_modal.html.erb +20 -0
  364. data/app/views/hyrax/admin/metadata_profiles/index.html.erb +54 -0
  365. data/app/views/hyrax/base/_attribute_rows.html.erb +4 -21
  366. data/app/views/hyrax/base/_citations.html.erb +1 -0
  367. data/app/views/hyrax/base/_currently_shared.html.erb +2 -1
  368. data/app/views/hyrax/base/_file_manager_thumbnail.html.erb +1 -1
  369. data/app/views/hyrax/base/_form_member_of_collections.html.erb +6 -6
  370. data/app/views/hyrax/base/_form_redirects.html.erb +125 -0
  371. data/app/views/hyrax/base/_form_share.html.erb +7 -2
  372. data/app/views/hyrax/base/_member.html.erb +1 -1
  373. data/app/views/hyrax/base/_social_media.html.erb +1 -1
  374. data/app/views/hyrax/base/iiif_viewers/_universal_viewer.html.erb +1 -1
  375. data/app/views/hyrax/base/show.html.erb +3 -0
  376. data/app/views/hyrax/collections/_default_group.html.erb +3 -0
  377. data/app/views/hyrax/collections/_list_collections.html.erb +3 -0
  378. data/app/views/hyrax/collections/_list_works.html.erb +1 -1
  379. data/app/views/hyrax/collections/_show_document_list_row.html.erb +1 -1
  380. data/app/views/hyrax/collections/show.html.erb +4 -0
  381. data/app/views/hyrax/dashboard/_sidebar.html.erb +4 -2
  382. data/app/views/hyrax/dashboard/collections/_button_for_update_collection.html.erb +2 -1
  383. data/app/views/hyrax/dashboard/collections/_default_group.html.erb +3 -0
  384. data/app/views/hyrax/dashboard/collections/_form.html.erb +17 -0
  385. data/app/views/hyrax/dashboard/collections/_form_for_select_collection.html.erb +7 -10
  386. data/app/views/hyrax/dashboard/collections/_list_collections.html.erb +3 -0
  387. data/app/views/hyrax/dashboard/collections/_list_works.html.erb +1 -1
  388. data/app/views/hyrax/dashboard/collections/_show_document_list_row.html.erb +1 -1
  389. data/app/views/hyrax/dashboard/profiles/_edit_primary.html.erb +1 -8
  390. data/app/views/hyrax/dashboard/profiles/_trophy_edit.html.erb +1 -1
  391. data/app/views/hyrax/dashboard/profiles/show.html.erb +5 -5
  392. data/app/views/hyrax/dashboard/sidebar/_metadata.html.erb +11 -0
  393. data/app/views/hyrax/dashboard/sidebar/_repository_content.html.erb +1 -0
  394. data/app/views/hyrax/dashboard/works/_default_group.html.erb +3 -0
  395. data/app/views/hyrax/dashboard/works/_list_works.html.erb +4 -2
  396. data/app/views/hyrax/file_sets/_form.html.erb +16 -3
  397. data/app/views/hyrax/file_sets/_metadata.html.erb +35 -0
  398. data/app/views/hyrax/file_sets/_valkyrie_form.html.erb +37 -0
  399. data/app/views/hyrax/file_sets/edit.html.erb +14 -8
  400. data/app/views/hyrax/file_sets/media_display/_audio.html.erb +4 -0
  401. data/app/views/hyrax/file_sets/media_display/_image.html.erb +2 -2
  402. data/app/views/hyrax/file_sets/media_display/_video.html.erb +4 -0
  403. data/app/views/hyrax/homepage/_explore_collections.html.erb +1 -1
  404. data/app/views/hyrax/homepage/_featured_fields.html.erb +1 -1
  405. data/app/views/hyrax/homepage/_recent_document.html.erb +1 -1
  406. data/app/views/hyrax/homepage/robots.text.erb +17 -0
  407. data/app/views/hyrax/my/collections/_default_group.html.erb +3 -0
  408. data/app/views/hyrax/my/collections/_list_collections.html.erb +3 -0
  409. data/app/views/hyrax/my/collections/_modal_add_subcollection.html.erb +2 -2
  410. data/app/views/hyrax/my/collections/_modal_add_to_collection.html.erb +2 -2
  411. data/app/views/hyrax/my/works/_default_group.html.erb +3 -0
  412. data/app/views/hyrax/my/works/_list_works.html.erb +5 -2
  413. data/app/views/hyrax/shared/_copy_permalink.html.erb +10 -0
  414. data/app/views/hyrax/users/_user_info.html.erb +1 -6
  415. data/app/views/layouts/_head_tag_content.html.erb +2 -0
  416. data/app/views/layouts/hyrax/dashboard.html.erb +2 -1
  417. data/app/views/records/edit_fields/_contexts.html.erb +1 -0
  418. data/app/views/records/edit_fields/_license.html.erb +17 -5
  419. data/app/views/records/edit_fields/_resource_type.html.erb +16 -2
  420. data/app/views/records/edit_fields/_rights_statement.html.erb +17 -5
  421. data/app/views/records/edit_fields/_schema_version.html.erb +1 -0
  422. data/app/views/records/edit_fields/_transcript_ids.html.erb +18 -0
  423. data/app/views/records/show_fields/_rights.html.erb +1 -1
  424. data/app/views/shared/_citations.html.erb +46 -31
  425. data/app/views/shared/_schema_version.html.erb +38 -0
  426. data/bin/dev-entrypoint.sh +14 -4
  427. data/chart/hyrax/Chart.yaml +4 -4
  428. data/chart/hyrax/templates/ingress.yaml +3 -0
  429. data/chart/hyrax/values.yaml +10 -8
  430. data/config/features.rb +27 -0
  431. data/config/initializers/blacklight_dynamic_sitemap.rb +43 -0
  432. data/config/initializers/deprecation_patch.rb +27 -0
  433. data/config/initializers/hydra_works.rb +3 -0
  434. data/config/initializers/i18n_extensions.rb +197 -0
  435. data/config/initializers/storage_adapter_initializer.rb +15 -9
  436. data/config/locales/hyrax.de.yml +172 -54
  437. data/config/locales/hyrax.en.yml +183 -66
  438. data/config/locales/hyrax.es.yml +174 -49
  439. data/config/locales/hyrax.fr.yml +169 -45
  440. data/config/locales/hyrax.it.yml +172 -48
  441. data/config/locales/hyrax.pt-BR.yml +172 -54
  442. data/config/locales/hyrax.zh.yml +145 -21
  443. data/config/metadata/basic_metadata.yaml +66 -0
  444. data/config/metadata/batch_edit_metadata.yaml +119 -0
  445. data/config/metadata/file_set_metadata.yaml +19 -0
  446. data/config/metadata/redirects.yaml +15 -0
  447. data/config/metadata_profiles/m3_json_schema.json +487 -0
  448. data/config/metadata_profiles/m3_profile.yaml +954 -0
  449. data/config/routes.rb +9 -0
  450. data/docker-compose-allinson.yml +176 -0
  451. data/docker-compose-dassie.yml +14 -6
  452. data/docker-compose-koppie.yml +18 -10
  453. data/docker-compose-sirenia.yml +20 -10
  454. data/documentation/copy_permalink.md +29 -0
  455. data/documentation/developing-your-hyrax-based-app.md +2 -2
  456. data/documentation/file-ingest-characterization.md +763 -0
  457. data/documentation/flexible_metadata.md +113 -0
  458. data/documentation/forms/field_behaviors.md +297 -0
  459. data/documentation/redirects.md +428 -0
  460. data/hyrax.gemspec +7 -2
  461. data/lib/freyja/metadata_adapter.rb +1 -1
  462. data/lib/freyja/persister.rb +25 -1
  463. data/lib/generators/hyrax/collection_resource/collection_resource_generator.rb +2 -2
  464. data/lib/generators/hyrax/collection_resource/templates/collection.rb.erb +5 -1
  465. data/lib/generators/hyrax/collection_resource/templates/collection_form.rb.erb +5 -1
  466. data/lib/generators/hyrax/collection_resource/templates/collection_indexer.rb.erb +6 -1
  467. data/lib/generators/hyrax/iiif_viewer/USAGE +22 -0
  468. data/lib/generators/hyrax/iiif_viewer/iiif_viewer_generator.rb +49 -0
  469. data/lib/generators/hyrax/iiif_viewer/templates/_clover.html.erb +7 -0
  470. data/lib/generators/hyrax/iiif_viewer/templates/clover/clover.css +3328 -0
  471. data/lib/generators/hyrax/iiif_viewer/templates/clover/clover.html +16 -0
  472. data/lib/generators/hyrax/iiif_viewer/templates/clover/clover.js +237 -0
  473. data/lib/generators/hyrax/install_generator.rb +25 -1
  474. data/lib/generators/hyrax/riiif_generator.rb +1 -1
  475. data/lib/generators/hyrax/templates/app/views/blacklight_dynamic_sitemap/sitemap/show.xml.builder +22 -0
  476. data/lib/generators/hyrax/templates/config/clamav.rb +2 -0
  477. data/lib/generators/hyrax/templates/config/initializers/riiif.rb +4 -80
  478. data/lib/generators/hyrax/templates/db/migrate/20240606205215_create_hyrax_flexible_schemas.rb.erb +9 -0
  479. data/lib/generators/hyrax/templates/db/migrate/20240606205216_add_contexts_to_hyrax_flexible_schemas.rb.erb +5 -0
  480. data/lib/generators/hyrax/templates/db/migrate/20260430000001_create_hyrax_redirect_paths.rb.erb +22 -0
  481. data/lib/generators/hyrax/templates/db/migrate/20260521003627_add_additional_redirect_info.rb.erb +39 -0
  482. data/lib/generators/hyrax/templates/package.json +1 -1
  483. data/lib/generators/hyrax/templates/uv.html +60 -82
  484. data/lib/generators/hyrax/work/templates/indexer.rb.erb +1 -1
  485. data/lib/generators/hyrax/work/templates/model.rb.erb +5 -1
  486. data/lib/generators/hyrax/work_resource/templates/form.rb.erb +5 -2
  487. data/lib/generators/hyrax/work_resource/templates/indexer.rb.erb +6 -2
  488. data/lib/generators/hyrax/work_resource/templates/work.rb.erb +5 -2
  489. data/lib/generators/hyrax/work_resource/work_resource_generator.rb +1 -0
  490. data/lib/hyrax/active_fedora_dummy_model.rb +6 -0
  491. data/lib/hyrax/configuration.rb +197 -3
  492. data/lib/hyrax/deprecation.rb +31 -0
  493. data/lib/hyrax/engine.rb +2 -0
  494. data/lib/hyrax/form_fields.rb +17 -5
  495. data/lib/hyrax/indexer.rb +31 -2
  496. data/lib/hyrax/resource_sync/resource_list_writer.rb +3 -0
  497. data/lib/hyrax/schema.rb +15 -4
  498. data/lib/hyrax/specs/shared_specs/factories/administrative_sets.rb +12 -0
  499. data/lib/hyrax/specs/shared_specs/factories/hyrax_embargo.rb +1 -1
  500. data/lib/hyrax/specs/shared_specs/factories/hyrax_file_set.rb +13 -0
  501. data/lib/hyrax/specs/shared_specs/factories/hyrax_lease.rb +5 -1
  502. data/lib/hyrax/specs/shared_specs/factories/hyrax_work.rb +14 -0
  503. data/lib/hyrax/specs/shared_specs/simple_work.rb +41 -0
  504. data/lib/hyrax/specs/shared_specs.rb +1 -0
  505. data/lib/hyrax/transactions/collection_create.rb +2 -1
  506. data/lib/hyrax/transactions/collection_destroy.rb +1 -0
  507. data/lib/hyrax/transactions/collection_update.rb +2 -1
  508. data/lib/hyrax/transactions/container.rb +28 -0
  509. data/lib/hyrax/transactions/steps/apply_permission_template_on_update.rb +65 -0
  510. data/lib/hyrax/transactions/steps/apply_workflow_on_admin_set_change.rb +97 -0
  511. data/lib/hyrax/transactions/steps/ensure_admin_set.rb +1 -1
  512. data/lib/hyrax/transactions/steps/remove_redirect_paths.rb +35 -0
  513. data/lib/hyrax/transactions/steps/save.rb +10 -0
  514. data/lib/hyrax/transactions/steps/set_default_admin_set.rb +1 -1
  515. data/lib/hyrax/transactions/steps/sync_redirect_paths.rb +141 -0
  516. data/lib/hyrax/transactions/work_create.rb +2 -1
  517. data/lib/hyrax/transactions/work_destroy.rb +1 -0
  518. data/lib/hyrax/transactions/work_update.rb +4 -1
  519. data/lib/hyrax/version.rb +1 -1
  520. data/lib/hyrax.rb +61 -0
  521. data/lib/tasks/m3_profile_cleanup.rake +35 -0
  522. data/template.rb +4 -1
  523. metadata +313 -19
  524. data/.dassie/public/robots.txt +0 -1
  525. data/.koppie/public/robots.txt +0 -1
  526. data/app/forms/concerns/hyrax/basic_metadata_form_fields_behavior.rb +0 -39
  527. data/app/views/catalog/_thumbnail_list_collection.html.erb +0 -4
data/config/routes.rb CHANGED
@@ -6,12 +6,16 @@ Hyrax::Engine.routes.draw do
6
6
  # Route the home page as the root
7
7
  root to: 'homepage#index'
8
8
 
9
+ get '/robots', to: 'homepage#robots'
10
+
9
11
  # Handle routes that existed in Hyrax < 7
10
12
  # e.g. https://scholarsphere.psu.edu/files/gm80hv36p
11
13
  get '/files/:id', to: redirect('/concern/generic_works/%{id}')
12
14
 
13
15
  resources :downloads, only: :show
14
16
 
17
+ get 'transcripts/:id.:file_ext', to: 'transcripts#show', as: :transcript
18
+
15
19
  # ResourceSync routes
16
20
  get '/.well-known/resourcesync' => 'resource_sync#source_description', as: :source_description
17
21
  get '/capabilitylist' => 'resource_sync#capability_list', as: :capability_list
@@ -245,6 +249,11 @@ Hyrax::Engine.routes.draw do
245
249
  resource :appearance
246
250
  resources :collection_types, except: :show
247
251
  resources :collection_type_participants, only: [:create, :destroy]
252
+ # Metadata profiles routes
253
+ resources :metadata_profiles, except: [:update, :show, :destroy] do
254
+ collection { post :import }
255
+ get 'export'
256
+ end
248
257
  end
249
258
 
250
259
  resources :content_blocks, only: [] do
@@ -0,0 +1,176 @@
1
+ # Requires Docker Compose v2
2
+ name: allinson
3
+ services:
4
+ web:
5
+ build:
6
+ context: .
7
+ target: hyrax-engine-dev
8
+ args:
9
+ - EXTRA_APK_PACKAGES=git less
10
+ - BUNDLE_GEMFILE=Gemfile.allinson
11
+ image: ghcr.io/samvera/hyrax-dev:${GITHUB_SHA:-latest}
12
+ command: sh -c 'bundle exec puma -v -b tcp://0.0.0.0:3000'
13
+ stdin_open: true
14
+ tty: true
15
+ user: root
16
+ env_file:
17
+ - .koppie/.env
18
+ environment:
19
+ - APP_NAME=allinson
20
+ - RAILS_ROOT=/app/samvera/hyrax-webapp
21
+ - HYRAX_FLEXIBLE=true
22
+ - HYRAX_FLEXIBLE_CLASSES=Hyrax::AdministrativeSet,CollectionResource,FileSet,GenericWork,Monograph
23
+ - HYRAX_DISABLE_INCLUDE_METADATA=true
24
+ depends_on:
25
+ - worker
26
+ - chrome
27
+ - fits
28
+ - memcached
29
+ - postgres
30
+ - redis
31
+ - solr
32
+ ports:
33
+ - 3003:3000
34
+ - 9879:9876
35
+ - 1051:1048
36
+ volumes:
37
+ - ./bin:/app/samvera
38
+ - .koppie:/app/samvera/hyrax-webapp
39
+ - .:/app/samvera/hyrax-engine
40
+ - bundle:/app/bundle
41
+ - clamav:/var/lib/clamav
42
+ - hyrax-storage:/app/samvera/hyrax-webapp/storage
43
+ - hyrax-derivatives:/app/samvera/hyrax-webapp/derivatives
44
+ - hyrax-uploads:/app/samvera/hyrax-webapp/uploads
45
+ - rails-public:/app/samvera/hyrax-webapp/public
46
+ - rails-tmp:/app/samvera/hyrax-webapp/tmp
47
+ networks:
48
+ - allinson
49
+
50
+ worker:
51
+ image: ghcr.io/samvera/hyrax-dev:${GITHUB_SHA:-latest}
52
+ entrypoint: worker-entrypoint.sh
53
+ command: sh -c 'bundle exec sidekiq'
54
+ user: root
55
+ env_file:
56
+ - .koppie/.env
57
+ environment:
58
+ - APP_NAME=allinson
59
+ - RAILS_ROOT=/app/samvera/hyrax-webapp
60
+ - HYRAX_FLEXIBLE=true
61
+ - HYRAX_FLEXIBLE_CLASSES=Hyrax::AdministrativeSet,CollectionResource,FileSet,GenericWork,Monograph
62
+ - HYRAX_DISABLE_INCLUDE_METADATA=true
63
+ depends_on:
64
+ - fits
65
+ - memcached
66
+ - postgres
67
+ - redis
68
+ - solr
69
+ volumes:
70
+ - ./bin:/app/samvera
71
+ - .koppie:/app/samvera/hyrax-webapp
72
+ - .:/app/samvera/hyrax-engine
73
+ - bundle:/app/bundle
74
+ - clamav:/var/lib/clamav
75
+ - hyrax-storage:/app/samvera/hyrax-webapp/storage
76
+ - hyrax-derivatives:/app/samvera/hyrax-webapp/derivatives
77
+ - hyrax-uploads:/app/samvera/hyrax-webapp/uploads
78
+ - rails-public:/app/samvera/hyrax-webapp/public
79
+ - rails-tmp:/app/samvera/hyrax-webapp/tmp
80
+ networks:
81
+ - allinson
82
+
83
+ chrome:
84
+ image: selenium/standalone-chromium:4
85
+ environment:
86
+ # - START_XVFB=false
87
+ - SE_NODE_SESSION_TIMEOUT=800
88
+ - SE_ENABLE_TRACING=false
89
+ - SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP=true
90
+ - SE_BROWSER_ARGS_DISABLE_DSHM=--disable-dev-shm-usage
91
+ - SE_BROWSER_ARGS_HEADLESS=--headless=new
92
+ # logging:
93
+ # driver: none
94
+ volumes:
95
+ - /dev/shm:/dev/shm
96
+ shm_size: 2g
97
+ ports:
98
+ - "4448:4444"
99
+ - "5963:5900"
100
+ - "7963:7900"
101
+ networks:
102
+ - allinson
103
+
104
+ postgres:
105
+ image: postgres:15-alpine
106
+ env_file:
107
+ - .koppie/.env
108
+ ports:
109
+ - "5435:5432"
110
+ volumes:
111
+ - db:/var/lib/postgresql/data
112
+ networks:
113
+ - allinson
114
+
115
+ fits:
116
+ image: ghcr.io/samvera/fitsservlet:1.6.0
117
+ ports:
118
+ - 8080
119
+ networks:
120
+ - allinson
121
+
122
+ memcached:
123
+ image: bitnamilegacy/memcached
124
+ ports:
125
+ - "11214:11211"
126
+ networks:
127
+ - allinson
128
+
129
+ redis:
130
+ image: bitnamilegacy/redis:6.2
131
+ env_file:
132
+ - .koppie/.env
133
+ volumes:
134
+ - redis:/bitnamilegacy/redis/data
135
+ networks:
136
+ - allinson
137
+
138
+ solr:
139
+ image: solr:9.9
140
+ env_file:
141
+ - .koppie/.env
142
+ ports:
143
+ - 8986:8983
144
+ command:
145
+ - sh
146
+ - "-c"
147
+ - "precreate-core koppie-test /opt/solr/server/configsets/hyraxconf; solr-precreate koppie /opt/solr/server/configsets/hyraxconf"
148
+ volumes:
149
+ - solr_home:/var/solr:cached
150
+ - .koppie/solr:/opt/solr/server/configsets/hyraxconf
151
+ ulimits:
152
+ nofile:
153
+ soft: 65536
154
+ hard: 524288
155
+ networks:
156
+ - allinson
157
+
158
+ volumes:
159
+ bundle:
160
+ clamav:
161
+ db:
162
+ hyrax-storage:
163
+ hyrax-derivatives:
164
+ hyrax-uploads:
165
+ rails-public:
166
+ rails-tmp:
167
+ redis:
168
+ sidekiq-public:
169
+ sidekiq-tmp:
170
+ solr_home:
171
+
172
+ networks:
173
+ allinson:
174
+ driver: bridge
175
+ driver_opts:
176
+ com.docker.network.bridge.name: br-allinson
@@ -15,6 +15,9 @@ services:
15
15
  - .dassie/.env
16
16
  environment:
17
17
  - RAILS_ROOT=/app/samvera/hyrax-webapp
18
+ - HYRAX_FLEXIBLE=false
19
+ - HYRAX_FLEXIBLE_CLASSES=
20
+ - HYRAX_DISABLE_INCLUDE_METADATA=false
18
21
  depends_on:
19
22
  - worker
20
23
  - chrome
@@ -32,6 +35,7 @@ services:
32
35
  - .dassie:/app/samvera/hyrax-webapp
33
36
  - .:/app/samvera/hyrax-engine
34
37
  - bundle:/app/bundle
38
+ - clamav:/var/lib/clamav
35
39
  - hyrax-derivatives:/app/samvera/hyrax-webapp/derivatives
36
40
  - hyrax-uploads:/app/samvera/hyrax-webapp/uploads
37
41
  - rails-public:/app/samvera/hyrax-webapp/public
@@ -58,6 +62,7 @@ services:
58
62
  - .dassie:/app/samvera/hyrax-webapp
59
63
  - .:/app/samvera/hyrax-engine
60
64
  - bundle:/app/bundle
65
+ - clamav:/var/lib/clamav
61
66
  - hyrax-derivatives:/app/samvera/hyrax-webapp/derivatives
62
67
  - hyrax-uploads:/app/samvera/hyrax-webapp/uploads
63
68
  - rails-public:/app/samvera/hyrax-webapp/public
@@ -116,23 +121,25 @@ services:
116
121
  - hyrax
117
122
 
118
123
  memcached:
119
- image: bitnami/memcached
124
+ image: bitnamilegacy/memcached
120
125
  ports:
121
126
  - "11211:11211"
122
127
  networks:
123
128
  - hyrax
124
129
 
125
130
  redis:
126
- image: bitnami/redis:6.2
131
+ image: bitnamilegacy/redis:6.2
127
132
  env_file:
128
133
  - .dassie/.env
129
134
  volumes:
130
- - redis:/bitnami/redis/data
135
+ - redis:/bitnamilegacy/redis/data
131
136
  networks:
132
137
  - hyrax
133
138
 
134
139
  solr:
135
- image: solr:8.11
140
+ image: solr:9.9
141
+ env_file:
142
+ - .dassie/.env
136
143
  ports:
137
144
  - 8983:8983
138
145
  command:
@@ -140,8 +147,8 @@ services:
140
147
  - "-c"
141
148
  - "precreate-core hyrax_test /opt/solr/server/configsets/hyraxconf; precreate-core hyrax-valkyrie-test /opt/solr/server/configsets/hyraxconf; precreate-core hyrax-valkyrie-dev /opt/solr/server/configsets/hyraxconf; solr-precreate hyrax /opt/solr/server/configsets/hyraxconf"
142
149
  volumes:
143
- - solr_home:/var/solr/data:cached
144
- - .dassie/solr/conf:/opt/solr/server/configsets/hyraxconf
150
+ - solr_home:/var/solr:cached
151
+ - .dassie/solr:/opt/solr/server/configsets/hyraxconf
145
152
  ulimits:
146
153
  nofile:
147
154
  soft: 65536
@@ -151,6 +158,7 @@ services:
151
158
 
152
159
  volumes:
153
160
  bundle:
161
+ clamav:
154
162
  db:
155
163
  fcrepo:
156
164
  hyrax-derivatives:
@@ -17,6 +17,9 @@ services:
17
17
  - .koppie/.env
18
18
  environment:
19
19
  - RAILS_ROOT=/app/samvera/hyrax-webapp
20
+ - HYRAX_FLEXIBLE=false
21
+ - HYRAX_FLEXIBLE_CLASSES=
22
+ - HYRAX_DISABLE_INCLUDE_METADATA=false
20
23
  depends_on:
21
24
  - worker
22
25
  - chrome
@@ -34,6 +37,7 @@ services:
34
37
  - .koppie:/app/samvera/hyrax-webapp
35
38
  - .:/app/samvera/hyrax-engine
36
39
  - bundle:/app/bundle
40
+ - clamav:/var/lib/clamav
37
41
  - hyrax-storage:/app/samvera/hyrax-webapp/storage
38
42
  - hyrax-derivatives:/app/samvera/hyrax-webapp/derivatives
39
43
  - hyrax-uploads:/app/samvera/hyrax-webapp/uploads
@@ -60,6 +64,7 @@ services:
60
64
  - .koppie:/app/samvera/hyrax-webapp
61
65
  - .:/app/samvera/hyrax-engine
62
66
  - bundle:/app/bundle
67
+ - clamav:/var/lib/clamav
63
68
  - hyrax-storage:/app/samvera/hyrax-webapp/storage
64
69
  - hyrax-derivatives:/app/samvera/hyrax-webapp/derivatives
65
70
  - hyrax-uploads:/app/samvera/hyrax-webapp/uploads
@@ -71,14 +76,14 @@ services:
71
76
  chrome:
72
77
  image: selenium/standalone-chromium:4
73
78
  environment:
74
- # - START_XVFB=false
79
+ # - START_XVFB=false
75
80
  - SE_NODE_SESSION_TIMEOUT=800
76
81
  - SE_ENABLE_TRACING=false
77
82
  - SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP=true
78
83
  - SE_BROWSER_ARGS_DISABLE_DSHM=--disable-dev-shm-usage
79
84
  - SE_BROWSER_ARGS_HEADLESS=--headless=new
80
- # logging:
81
- # driver: none
85
+ # logging:
86
+ # driver: none
82
87
  volumes:
83
88
  - /dev/shm:/dev/shm
84
89
  shm_size: 2g
@@ -108,23 +113,25 @@ services:
108
113
  - koppie
109
114
 
110
115
  memcached:
111
- image: bitnami/memcached
116
+ image: bitnamilegacy/memcached
112
117
  ports:
113
- - '11212:11211'
118
+ - "11212:11211"
114
119
  networks:
115
120
  - koppie
116
121
 
117
122
  redis:
118
- image: bitnami/redis:6.2
123
+ image: bitnamilegacy/redis:6.2
119
124
  env_file:
120
125
  - .koppie/.env
121
126
  volumes:
122
- - redis:/bitnami/redis/data
127
+ - redis:/bitnamilegacy/redis/data
123
128
  networks:
124
129
  - koppie
125
130
 
126
131
  solr:
127
- image: solr:8.11
132
+ image: solr:9.9
133
+ env_file:
134
+ - .koppie/.env
128
135
  ports:
129
136
  - 8984:8983
130
137
  command:
@@ -132,8 +139,8 @@ services:
132
139
  - "-c"
133
140
  - "precreate-core koppie-test /opt/solr/server/configsets/hyraxconf; solr-precreate koppie /opt/solr/server/configsets/hyraxconf"
134
141
  volumes:
135
- - solr_home:/var/solr/data:cached
136
- - .koppie/solr/conf:/opt/solr/server/configsets/hyraxconf
142
+ - solr_home:/var/solr:cached
143
+ - .koppie/solr:/opt/solr/server/configsets/hyraxconf
137
144
  ulimits:
138
145
  nofile:
139
146
  soft: 65536
@@ -143,6 +150,7 @@ services:
143
150
 
144
151
  volumes:
145
152
  bundle:
153
+ clamav:
146
154
  db:
147
155
  hyrax-storage:
148
156
  hyrax-derivatives:
@@ -23,6 +23,7 @@ services:
23
23
  depends_on:
24
24
  - worker
25
25
  - chrome
26
+ - fcrepo
26
27
  - fits
27
28
  - memcached
28
29
  - postgres
@@ -37,6 +38,7 @@ services:
37
38
  - .koppie:/app/samvera/hyrax-webapp
38
39
  - .:/app/samvera/hyrax-engine
39
40
  - bundle:/app/bundle
41
+ - clamav:/var/lib/clamav
40
42
  - hyrax-storage:/app/samvera/hyrax-webapp/storage
41
43
  - hyrax-derivatives:/app/samvera/hyrax-webapp/derivatives
42
44
  - hyrax-uploads:/app/samvera/hyrax-webapp/uploads
@@ -57,7 +59,11 @@ services:
57
59
  - RAILS_ROOT=/app/samvera/hyrax-webapp
58
60
  - VALKYRIE_METADATA_ADAPTER=fedora_metadata
59
61
  - VALKYRIE_STORAGE_ADAPTER=fedora_storage
62
+ - HYRAX_FLEXIBLE=false
63
+ - HYRAX_FLEXIBLE_CLASSES=
64
+ - HYRAX_DISABLE_INCLUDE_METADATA=false
60
65
  depends_on:
66
+ - fcrepo
61
67
  - fits
62
68
  - memcached
63
69
  - postgres
@@ -68,6 +74,7 @@ services:
68
74
  - .koppie:/app/samvera/hyrax-webapp
69
75
  - .:/app/samvera/hyrax-engine
70
76
  - bundle:/app/bundle
77
+ - clamav:/var/lib/clamav
71
78
  - hyrax-storage:/app/samvera/hyrax-webapp/storage
72
79
  - hyrax-derivatives:/app/samvera/hyrax-webapp/derivatives
73
80
  - hyrax-uploads:/app/samvera/hyrax-webapp/uploads
@@ -79,14 +86,14 @@ services:
79
86
  chrome:
80
87
  image: selenium/standalone-chromium:4
81
88
  environment:
82
- # - START_XVFB=false
89
+ # - START_XVFB=false
83
90
  - SE_NODE_SESSION_TIMEOUT=800
84
91
  - SE_ENABLE_TRACING=false
85
92
  - SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP=true
86
93
  - SE_BROWSER_ARGS_DISABLE_DSHM=--disable-dev-shm-usage
87
94
  - SE_BROWSER_ARGS_HEADLESS=--headless=new
88
- # logging:
89
- # driver: none
95
+ # logging:
96
+ # driver: none
90
97
  volumes:
91
98
  - /dev/shm:/dev/shm
92
99
  shm_size: 2g
@@ -134,23 +141,25 @@ services:
134
141
  - sirenia
135
142
 
136
143
  memcached:
137
- image: bitnami/memcached
144
+ image: bitnamilegacy/memcached
138
145
  ports:
139
- - '11213:11211'
146
+ - "11213:11211"
140
147
  networks:
141
148
  - sirenia
142
149
 
143
150
  redis:
144
- image: bitnami/redis:6.2
151
+ image: bitnamilegacy/redis:6.2
145
152
  env_file:
146
153
  - .koppie/.env
147
154
  volumes:
148
- - redis:/bitnami/redis/data
155
+ - redis:/bitnamilegacy/redis/data
149
156
  networks:
150
157
  - sirenia
151
158
 
152
159
  solr:
153
- image: solr:8.11
160
+ image: solr:9.9
161
+ env_file:
162
+ - .koppie/.env
154
163
  ports:
155
164
  - 8985:8983
156
165
  command:
@@ -158,8 +167,8 @@ services:
158
167
  - "-c"
159
168
  - "precreate-core koppie-test /opt/solr/server/configsets/hyraxconf; solr-precreate koppie /opt/solr/server/configsets/hyraxconf"
160
169
  volumes:
161
- - solr_home:/var/solr/data:cached
162
- - .koppie/solr/conf:/opt/solr/server/configsets/hyraxconf
170
+ - solr_home:/var/solr:cached
171
+ - .koppie/solr:/opt/solr/server/configsets/hyraxconf
163
172
  ulimits:
164
173
  nofile:
165
174
  soft: 65536
@@ -189,6 +198,7 @@ services:
189
198
 
190
199
  volumes:
191
200
  bundle:
201
+ clamav:
192
202
  db:
193
203
  fcrepo:
194
204
  hyrax-storage:
@@ -0,0 +1,29 @@
1
+ # Copy permalink button
2
+
3
+ A "Copy permalink" button on the show pages for works and collections lets a viewer copy the record's canonical, UUID-based URL to their clipboard. The canonical URL is the form `…/concern/<work_type>/<uuid>` (for works) or `…/collections/<uuid>` (for collections) — the stable URL that always identifies the record, regardless of any aliases registered for it.
4
+
5
+ ## Why
6
+
7
+ When the redirects feature is in use, the show page commonly renders at a registered alias (e.g. `/handle/12345/678`) rather than at the canonical UUID URL. The browser address bar shows the alias. A user who copies that URL is copying the alias, which could later be edited or removed. The permalink button gives one-click access to the canonical URL so the copied link will keep working as long as the record itself exists.
8
+
9
+ The button has value even without redirects enabled, because the canonical URL is the long-term stable form of the address.
10
+
11
+ ## Feature flag
12
+
13
+ The button is gated by a Flipflop feature, `copy_permalink_button`, defaulting to **off**. Enable it per environment (via the YAML strategy) or per tenant (via the database strategy) like any other Flipflop feature. When the feature is off, no button is rendered.
14
+
15
+ The feature is independent of the `redirects` feature flag — the permalink button can be enabled standalone.
16
+
17
+ ## What appears
18
+
19
+ On a work show page, the button appears in the citations block in the left-hand column. On a collection show page, it appears in the title header next to the collection-type and permission badges. In both cases the button is visible to all users, including anonymous visitors.
20
+
21
+ The button uses ClipboardJS (already a Hyrax dependency) and shows a brief Bootstrap tooltip on successful copy.
22
+
23
+ ## Canonical URL in the page head
24
+
25
+ The work and collection show pages also include a `<link rel="canonical" href="...">` tag in the `<head>` regardless of the feature flag. This helps search engines treat the UUID-based URL as authoritative when the same record is reachable via multiple alias paths, avoiding duplicate-content penalties.
26
+
27
+ ## Related
28
+
29
+ - [`documentation/redirects.md`](redirects.md) — the redirect aliases feature that motivates the canonical/alias distinction.
@@ -32,7 +32,7 @@ You can also try [Running Hyrax-based application in local VM](https://github.co
32
32
  During development, running only the dependent services in a container environment may be beneficial. This avoids potential headaches concerning file permissions and eases the use of debugging tools. The application generation instructions below use [Lando](https://lando.dev) to achieve this setup.
33
33
 
34
34
  This document contains instructions specific to setting up an app with __Hyrax
35
- v5.2.0__. If you are looking for instructions on installing a different
35
+ v5.3.0__. If you are looking for instructions on installing a different
36
36
  version, be sure to select the appropriate branch or tag from the drop-down
37
37
  menu above.
38
38
 
@@ -148,7 +148,7 @@ Generate a new Rails application using the template.
148
148
  **NOTE:** `HYRAX_SKIP_WINGS` is needed here to avoid loading the Wings compatibility layer during the application generation process.
149
149
 
150
150
  ```shell
151
- HYRAX_SKIP_WINGS=true rails _7.2.2.1_ new my_app --database=postgresql -m https://raw.githubusercontent.com/samvera/hyrax/hyrax-v5.2.0/template.rb
151
+ HYRAX_SKIP_WINGS=true rails _7.2.2.1_ new my_app --database=postgresql -m https://raw.githubusercontent.com/samvera/hyrax/hyrax-v5.3.0/template.rb
152
152
  ```
153
153
 
154
154
  Generating a new Rails application using Hyrax's template above takes cares of a number of steps for you, including: