curation_concerns 0.1.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 (424) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +18 -0
  5. data/Gemfile +31 -0
  6. data/LICENSE.txt +15 -0
  7. data/README.md +46 -0
  8. data/RELEASING.md +2 -0
  9. data/Rakefile +26 -0
  10. data/VERSION +1 -0
  11. data/app/assets/images/default.png +0 -0
  12. data/app/assets/images/nope.png +0 -0
  13. data/app/assets/javascripts/.gitkeep +0 -0
  14. data/app/assets/javascripts/curation_concerns/.gitkeep +0 -0
  15. data/app/assets/javascripts/curation_concerns/application.js +18 -0
  16. data/app/assets/javascripts/curation_concerns/browse_everything_implement.js +7 -0
  17. data/app/assets/javascripts/curation_concerns/curation_concerns.js +28 -0
  18. data/app/assets/javascripts/curation_concerns/embargoes.js +17 -0
  19. data/app/assets/javascripts/curation_concerns/facet_mine.js +22 -0
  20. data/app/assets/javascripts/curation_concerns/help_modal.js +36 -0
  21. data/app/assets/javascripts/curation_concerns/link_groups.js.coffee +123 -0
  22. data/app/assets/javascripts/curation_concerns/link_users.js.coffee +126 -0
  23. data/app/assets/javascripts/curation_concerns/proxy_rights.js.coffee +95 -0
  24. data/app/assets/javascripts/curation_concerns/proxy_submission.js +23 -0
  25. data/app/assets/javascripts/curation_concerns/select_works.js.coffee +20 -0
  26. data/app/assets/javascripts/modernizr.js +3 -0
  27. data/app/assets/stylesheets/curation_concerns/_curation_concerns.scss +9 -0
  28. data/app/assets/stylesheets/curation_concerns/_global-variables.scss +5 -0
  29. data/app/assets/stylesheets/curation_concerns/_modules.scss +13 -0
  30. data/app/assets/stylesheets/curation_concerns/_positioning.scss +138 -0
  31. data/app/assets/stylesheets/curation_concerns/_theme.scss +46 -0
  32. data/app/assets/stylesheets/curation_concerns/_typography.scss +137 -0
  33. data/app/assets/stylesheets/curation_concerns/_variables_bootstrap.scss +7 -0
  34. data/app/assets/stylesheets/curation_concerns/downloads.scss +3 -0
  35. data/app/assets/stylesheets/curation_concerns/help_requests.scss +3 -0
  36. data/app/assets/stylesheets/curation_concerns/modules/accessibility.scss +50 -0
  37. data/app/assets/stylesheets/curation_concerns/modules/accordion.scss +33 -0
  38. data/app/assets/stylesheets/curation_concerns/modules/attributes.scss +31 -0
  39. data/app/assets/stylesheets/curation_concerns/modules/classify_work.scss +100 -0
  40. data/app/assets/stylesheets/curation_concerns/modules/embargoes.scss +15 -0
  41. data/app/assets/stylesheets/curation_concerns/modules/emphatic_action_area.scss +14 -0
  42. data/app/assets/stylesheets/curation_concerns/modules/forms.scss +116 -0
  43. data/app/assets/stylesheets/curation_concerns/modules/multi_value_fields.scss +52 -0
  44. data/app/assets/stylesheets/curation_concerns/modules/pagination.scss +4 -0
  45. data/app/assets/stylesheets/curation_concerns/modules/search_results.scss +55 -0
  46. data/app/assets/stylesheets/curation_concerns/modules/site_actions.scss +53 -0
  47. data/app/assets/stylesheets/curation_concerns/modules/site_search.scss +46 -0
  48. data/app/controllers/catalog_controller.rb +3 -0
  49. data/app/controllers/collections_controller.rb +3 -0
  50. data/app/controllers/concerns/curation_concerns/application_controller_behavior.rb +28 -0
  51. data/app/controllers/concerns/curation_concerns/catalog_controller.rb +321 -0
  52. data/app/controllers/concerns/curation_concerns/collections_controller_behavior.rb +76 -0
  53. data/app/controllers/concerns/curation_concerns/curation_concern_controller.rb +125 -0
  54. data/app/controllers/concerns/curation_concerns/download_behavior.rb +60 -0
  55. data/app/controllers/concerns/curation_concerns/embargoes_controller_behavior.rb +44 -0
  56. data/app/controllers/concerns/curation_concerns/generic_files_controller_behavior.rb +149 -0
  57. data/app/controllers/concerns/curation_concerns/leases_controller_behavior.rb +36 -0
  58. data/app/controllers/concerns/curation_concerns/manages_embargoes.rb +26 -0
  59. data/app/controllers/concerns/curation_concerns/parent_container.rb +33 -0
  60. data/app/controllers/concerns/curation_concerns/themed_layout_controller.rb +31 -0
  61. data/app/controllers/concerns/curation_concerns/without_namespace.rb +15 -0
  62. data/app/controllers/curation_concerns/application_controller.rb +7 -0
  63. data/app/controllers/curation_concerns/classify_concerns_controller.rb +35 -0
  64. data/app/controllers/curation_concerns/generic_files_controller.rb +13 -0
  65. data/app/controllers/curation_concerns/permissions_controller.rb +19 -0
  66. data/app/controllers/downloads_controller.rb +4 -0
  67. data/app/controllers/embargoes_controller.rb +5 -0
  68. data/app/controllers/leases_controller.rb +5 -0
  69. data/app/controllers/registrations_controller.rb +20 -0
  70. data/app/controllers/sessions_controller.rb +4 -0
  71. data/app/datastreams/curation_concerns/generic_work_rdf_properties.rb +57 -0
  72. data/app/datastreams/generic_work_metadata.rb +3 -0
  73. data/app/forms/curation_concerns/forms/collection_edit_form.rb +17 -0
  74. data/app/forms/curation_concerns/forms/generic_file_edit_form.rb +15 -0
  75. data/app/forms/curation_concerns/forms/generic_work_edit_form.rb +9 -0
  76. data/app/helpers/curation_concerns/ability_helper.rb +46 -0
  77. data/app/helpers/curation_concerns/attribute_helper.rb +67 -0
  78. data/app/helpers/curation_concerns/catalog_helper.rb +38 -0
  79. data/app/helpers/curation_concerns/collections_helper.rb +63 -0
  80. data/app/helpers/curation_concerns/embargo_helper.rb +17 -0
  81. data/app/helpers/curation_concerns/generic_file_helper.rb +19 -0
  82. data/app/helpers/curation_concerns/lease_helper.rb +18 -0
  83. data/app/helpers/curation_concerns/main_app_helpers.rb +13 -0
  84. data/app/helpers/curation_concerns/render_constraints_helper.rb +42 -0
  85. data/app/helpers/curation_concerns/search_paths_helper.rb +13 -0
  86. data/app/helpers/curation_concerns/thumbnail_helper.rb +11 -0
  87. data/app/helpers/curation_concerns/title_helper.rb +23 -0
  88. data/app/helpers/curation_concerns/url_helper.rb +29 -0
  89. data/app/presenters/curation_concerns/collection_presenter.rb +40 -0
  90. data/app/presenters/curation_concerns/generic_file_presenter.rb +14 -0
  91. data/app/presenters/curation_concerns/generic_work_presenter.rb +13 -0
  92. data/app/search_builders/curation_concerns/search_builder.rb +49 -0
  93. data/app/services/curation_concerns/curation_concern.rb +14 -0
  94. data/app/services/curation_concerns/embargo_service.rb +26 -0
  95. data/app/services/curation_concerns/lease_service.rb +23 -0
  96. data/app/views/catalog/_action_menu_partials/_collection.html.erb +27 -0
  97. data/app/views/catalog/_action_menu_partials/_default.html.erb +27 -0
  98. data/app/views/catalog/_document.html.erb +3 -0
  99. data/app/views/catalog/_document_list.html.erb +5 -0
  100. data/app/views/catalog/_home_text.html.erb +8 -0
  101. data/app/views/catalog/_index_default.html.erb +17 -0
  102. data/app/views/catalog/_index_header_list_default.html.erb +8 -0
  103. data/app/views/catalog/_navbar.html.erb +12 -0
  104. data/app/views/catalog/_show_partials/_default.html.erb +22 -0
  105. data/app/views/catalog/_show_partials/_default_details.html.erb +15 -0
  106. data/app/views/catalog/_show_partials/_facets.html.erb +52 -0
  107. data/app/views/catalog/index.html.erb +47 -0
  108. data/app/views/collections/_add_to_collection_modal.html.erb +15 -0
  109. data/app/views/collections/_batch_edits_actions.html.erb +3 -0
  110. data/app/views/collections/_button_for_creating_empty_collection.html.erb +3 -0
  111. data/app/views/collections/_collection.html.erb +1 -0
  112. data/app/views/collections/_dashboard_document_list.html.erb +6 -0
  113. data/app/views/collections/_document_list.html.erb +7 -0
  114. data/app/views/collections/_edit_actions.html.erb +5 -0
  115. data/app/views/collections/_edit_descriptions.html.erb +20 -0
  116. data/app/views/collections/_form.html.erb +26 -0
  117. data/app/views/collections/_form_additional_information.html.erb +6 -0
  118. data/app/views/collections/_form_for_select_collection.html.erb +34 -0
  119. data/app/views/collections/_form_permission.html.erb +36 -0
  120. data/app/views/collections/_form_representative_image.html.erb +13 -0
  121. data/app/views/collections/_form_required_information.html.erb +11 -0
  122. data/app/views/collections/_form_to_add_member.html.erb +21 -0
  123. data/app/views/collections/_identifier_and_action.html.erb +15 -0
  124. data/app/views/collections/_media_display.html.erb +1 -0
  125. data/app/views/collections/_paginate.html.erb +6 -0
  126. data/app/views/collections/_search_collection_dashboard_form.html.erb +10 -0
  127. data/app/views/collections/_show_actions.html.erb +8 -0
  128. data/app/views/collections/_show_descriptions.html.erb +10 -0
  129. data/app/views/collections/_show_fields.html.erb +0 -0
  130. data/app/views/collections/_single_item_action_fields.html.erb +6 -0
  131. data/app/views/collections/_sort_and_per_page.html.erb +29 -0
  132. data/app/views/collections/_view_type_group.html.erb +13 -0
  133. data/app/views/collections/edit.html.erb +17 -0
  134. data/app/views/collections/show.html.erb +24 -0
  135. data/app/views/curation_concerns/base/_attributes.html.erb +25 -0
  136. data/app/views/curation_concerns/base/_collections.html.erb +26 -0
  137. data/app/views/curation_concerns/base/_form.html.erb +25 -0
  138. data/app/views/curation_concerns/base/_form_additional_information.html.erb +7 -0
  139. data/app/views/curation_concerns/base/_form_content_license.html.erb +16 -0
  140. data/app/views/curation_concerns/base/_form_descriptive_fields.erb +11 -0
  141. data/app/views/curation_concerns/base/_form_editors.html.erb +15 -0
  142. data/app/views/curation_concerns/base/_form_files_and_links.html.erb +23 -0
  143. data/app/views/curation_concerns/base/_form_permission.html.erb +52 -0
  144. data/app/views/curation_concerns/base/_form_permission_embargo.html.erb +6 -0
  145. data/app/views/curation_concerns/base/_form_permission_lease.html.erb +6 -0
  146. data/app/views/curation_concerns/base/_form_permission_under_embargo.html.erb +16 -0
  147. data/app/views/curation_concerns/base/_form_permission_under_lease.html.erb +18 -0
  148. data/app/views/curation_concerns/base/_form_representative_image.html.erb +13 -0
  149. data/app/views/curation_concerns/base/_form_required_information.html.erb +11 -0
  150. data/app/views/curation_concerns/base/_form_supplementary_fields.html.erb +15 -0
  151. data/app/views/curation_concerns/base/_legally_binding_text.html.erb +33 -0
  152. data/app/views/curation_concerns/base/_related_files.html.erb +24 -0
  153. data/app/views/curation_concerns/base/_representative_media.html.erb +8 -0
  154. data/app/views/curation_concerns/base/edit.html.erb +13 -0
  155. data/app/views/curation_concerns/base/new.html.erb +12 -0
  156. data/app/views/curation_concerns/base/show.html.erb +21 -0
  157. data/app/views/curation_concerns/base/unauthorized.html.erb +3 -0
  158. data/app/views/curation_concerns/classify_concerns/new.html.erb +25 -0
  159. data/app/views/curation_concerns/collections/_form_additional_information.html.erb +6 -0
  160. data/app/views/curation_concerns/generic_files/_actions.html.erb +16 -0
  161. data/app/views/curation_concerns/generic_files/_form.html.erb +35 -0
  162. data/app/views/curation_concerns/generic_files/_generic_file.html.erb +12 -0
  163. data/app/views/curation_concerns/generic_files/_media_display.html.erb +19 -0
  164. data/app/views/curation_concerns/generic_files/edit.html.erb +5 -0
  165. data/app/views/curation_concerns/generic_files/jq_upload.json.jbuilder +8 -0
  166. data/app/views/curation_concerns/generic_files/show.html.erb +15 -0
  167. data/app/views/curation_concerns/permissions/confirm.html.erb +21 -0
  168. data/app/views/embargoes/_embargo_history.html.erb +7 -0
  169. data/app/views/embargoes/_list_active_embargoes.html.erb +16 -0
  170. data/app/views/embargoes/_list_deactivated_embargoes.html.erb +10 -0
  171. data/app/views/embargoes/_list_expired_active_embargoes.html.erb +44 -0
  172. data/app/views/embargoes/edit.html.erb +43 -0
  173. data/app/views/embargoes/index.html.erb +18 -0
  174. data/app/views/layouts/boilerplate.html.erb +22 -0
  175. data/app/views/layouts/curation_concerns/1_column.html.erb +11 -0
  176. data/app/views/layouts/curation_concerns/catalog.html.erb +37 -0
  177. data/app/views/layouts/curation_concerns.html.erb +22 -0
  178. data/app/views/leases/_lease_history.html.erb +7 -0
  179. data/app/views/leases/_list_active_leases.html.erb +16 -0
  180. data/app/views/leases/_list_deactivated_leases.html.erb +4 -0
  181. data/app/views/leases/_list_expired_active_leases.html.erb +38 -0
  182. data/app/views/leases/edit.html.erb +43 -0
  183. data/app/views/leases/index.html.erb +18 -0
  184. data/app/views/shared/_add_content.html.erb +32 -0
  185. data/app/views/shared/_brand_bar.html.erb +10 -0
  186. data/app/views/shared/_flash_message.html.erb +17 -0
  187. data/app/views/shared/_footer.html.erb +10 -0
  188. data/app/views/shared/_ga.html.erb +6 -0
  189. data/app/views/shared/_header.html.erb +12 -0
  190. data/app/views/shared/_my_actions.html.erb +21 -0
  191. data/app/views/shared/_site_actions.html.erb +7 -0
  192. data/app/views/shared/_site_search.html.erb +12 -0
  193. data/app/views/shared/_title_bar.html.erb +16 -0
  194. data/app/workers/visibility_copy_worker.rb +30 -0
  195. data/config/initializers/simple_form.rb +31 -0
  196. data/config/locales/curation_concerns.en.yml +96 -0
  197. data/config/routes.rb +4 -0
  198. data/curation_concerns-models/.gitignore +17 -0
  199. data/curation_concerns-models/Gemfile +4 -0
  200. data/curation_concerns-models/LICENSE.md +177 -0
  201. data/curation_concerns-models/README.md +42 -0
  202. data/curation_concerns-models/Rakefile +1 -0
  203. data/curation_concerns-models/app/actors/concerns/curation_concerns/manages_embargoes_actor.rb +99 -0
  204. data/curation_concerns-models/app/actors/curation_concerns/base_actor.rb +90 -0
  205. data/curation_concerns-models/app/actors/curation_concerns/generic_file_actor.rb +150 -0
  206. data/curation_concerns-models/app/actors/curation_concerns/work_actor_behavior.rb +88 -0
  207. data/curation_concerns-models/app/jobs/active_fedora_id_based_job.rb +22 -0
  208. data/curation_concerns-models/app/jobs/active_fedora_pid_based_job.rb +6 -0
  209. data/curation_concerns-models/app/jobs/audit_job.rb +58 -0
  210. data/curation_concerns-models/app/jobs/characterize_job.rb +11 -0
  211. data/curation_concerns-models/app/jobs/copy_permissions_job.rb +24 -0
  212. data/curation_concerns-models/app/jobs/create_derivatives_job.rb +15 -0
  213. data/curation_concerns-models/app/jobs/import_url_job.rb +56 -0
  214. data/curation_concerns-models/app/jobs/ingest_local_file_job.rb +48 -0
  215. data/curation_concerns-models/app/jobs/resolrize_job.rb +9 -0
  216. data/curation_concerns-models/app/models/checksum_audit_log.rb +21 -0
  217. data/curation_concerns-models/app/models/concerns/curation_concerns/ability.rb +34 -0
  218. data/curation_concerns-models/app/models/concerns/curation_concerns/basic_metadata.rb +87 -0
  219. data/curation_concerns-models/app/models/concerns/curation_concerns/collection_behavior.rb +47 -0
  220. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/belongs_to_works.rb +53 -0
  221. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/characterization.rb +89 -0
  222. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/content.rb +8 -0
  223. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/export.rb +343 -0
  224. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/full_text_indexing.rb +12 -0
  225. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/indexing.rb +14 -0
  226. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/versions.rb +16 -0
  227. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file.rb +5 -0
  228. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file_behavior.rb +44 -0
  229. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_work_behavior.rb +38 -0
  230. data/curation_concerns-models/app/models/concerns/curation_concerns/has_representative.rb +14 -0
  231. data/curation_concerns-models/app/models/concerns/curation_concerns/human_readable_type.rb +23 -0
  232. data/curation_concerns-models/app/models/concerns/curation_concerns/permissions/readable.rb +19 -0
  233. data/curation_concerns-models/app/models/concerns/curation_concerns/permissions/writable.rb +75 -0
  234. data/curation_concerns-models/app/models/concerns/curation_concerns/permissions.rb +7 -0
  235. data/curation_concerns-models/app/models/concerns/curation_concerns/serializers.rb +15 -0
  236. data/curation_concerns-models/app/models/concerns/curation_concerns/solr_document_behavior.rb +135 -0
  237. data/curation_concerns-models/app/models/concerns/curation_concerns/user.rb +65 -0
  238. data/curation_concerns-models/app/models/concerns/curation_concerns/with_basic_metadata.rb +98 -0
  239. data/curation_concerns-models/app/models/concerns/curation_concerns/with_generic_files.rb +29 -0
  240. data/curation_concerns-models/app/models/curation_concerns/classify_concern.rb +47 -0
  241. data/curation_concerns-models/app/models/curation_concerns/quick_classification_query.rb +31 -0
  242. data/curation_concerns-models/app/models/datastreams/fits_datastream.rb +148 -0
  243. data/curation_concerns-models/app/models/version_committer.rb +2 -0
  244. data/curation_concerns-models/app/services/curation_concerns/characterization_service.rb +71 -0
  245. data/curation_concerns-models/app/services/curation_concerns/full_text_extraction_service.rb +38 -0
  246. data/curation_concerns-models/app/services/curation_concerns/generic_file_audit_service.rb +85 -0
  247. data/curation_concerns-models/app/services/curation_concerns/generic_file_indexing_service.rb +14 -0
  248. data/curation_concerns-models/app/services/curation_concerns/generic_work_indexing_service.rb +16 -0
  249. data/curation_concerns-models/app/services/curation_concerns/noid.rb +23 -0
  250. data/curation_concerns-models/app/services/curation_concerns/repository_audit_service.rb +9 -0
  251. data/curation_concerns-models/app/services/curation_concerns/versioning_service.rb +27 -0
  252. data/curation_concerns-models/config/locales/curation_concerns.en.yml +6 -0
  253. data/curation_concerns-models/curation_concerns-models.gemspec +34 -0
  254. data/curation_concerns-models/lib/curation_concerns/messages.rb +66 -0
  255. data/curation_concerns-models/lib/curation_concerns/models/engine.rb +61 -0
  256. data/curation_concerns-models/lib/curation_concerns/models/resque.rb +36 -0
  257. data/curation_concerns-models/lib/curation_concerns/models/utils.rb +22 -0
  258. data/curation_concerns-models/lib/curation_concerns/models/version.rb +5 -0
  259. data/curation_concerns-models/lib/curation_concerns/models.rb +32 -0
  260. data/curation_concerns-models/lib/generators/curation_concerns/models/abstract_migration_generator.rb +30 -0
  261. data/curation_concerns-models/lib/generators/curation_concerns/models/clamav_generator.rb +19 -0
  262. data/curation_concerns-models/lib/generators/curation_concerns/models/fulltext_generator.rb +28 -0
  263. data/curation_concerns-models/lib/generators/curation_concerns/models/install_generator.rb +70 -0
  264. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/app/models/collection.rb +4 -0
  265. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/app/models/generic_file.rb +4 -0
  266. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/clamav.rb +1 -0
  267. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/curation_concerns.rb +123 -0
  268. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/mime_types.rb +6 -0
  269. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/redis.yml +9 -0
  270. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/redis_config.rb +32 -0
  271. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque-pool.yml +1 -0
  272. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque_admin.rb +10 -0
  273. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque_config.rb +5 -0
  274. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/migrations/create_checksum_audit_logs.rb +19 -0
  275. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/migrations/create_version_committers.rb +15 -0
  276. data/curation_concerns-models/lib/tasks/curation_concerns-models_tasks.rake +75 -0
  277. data/curation_concerns-models/lib/tasks/migrate.rake +13 -0
  278. data/curation_concerns-models/lib/tasks/resque.rake +13 -0
  279. data/curation_concerns-models/lib/tasks/solr_reindex.rake +8 -0
  280. data/curation_concerns.gemspec +46 -0
  281. data/lib/curation_concerns/configuration.rb +74 -0
  282. data/lib/curation_concerns/controller_resource.rb +10 -0
  283. data/lib/curation_concerns/engine.rb +20 -0
  284. data/lib/curation_concerns/rails/routes.rb +76 -0
  285. data/lib/curation_concerns/spec_support.rb +10 -0
  286. data/lib/curation_concerns/version.rb +3 -0
  287. data/lib/curation_concerns.rb +8 -0
  288. data/lib/generators/curation_concerns/install_generator.rb +103 -0
  289. data/lib/generators/curation_concerns/templates/curation_concerns.css.scss +3 -0
  290. data/lib/generators/curation_concerns/templates/curation_concerns.js +1 -0
  291. data/lib/generators/curation_concerns/templates/curation_concerns_config.rb +2 -0
  292. data/lib/generators/curation_concerns/templates/curation_concerns_helper.rb +4 -0
  293. data/lib/generators/curation_concerns/work/USAGE +19 -0
  294. data/lib/generators/curation_concerns/work/templates/README +13 -0
  295. data/lib/generators/curation_concerns/work/templates/actor.rb.erb +7 -0
  296. data/lib/generators/curation_concerns/work/templates/actor_spec.rb.erb +9 -0
  297. data/lib/generators/curation_concerns/work/templates/controller.rb.erb +7 -0
  298. data/lib/generators/curation_concerns/work/templates/controller_spec.rb.erb +9 -0
  299. data/lib/generators/curation_concerns/work/templates/model.rb.erb +7 -0
  300. data/lib/generators/curation_concerns/work/templates/model_spec.rb.erb +9 -0
  301. data/lib/generators/curation_concerns/work/work_generator.rb +78 -0
  302. data/solr_conf/conf/solrconfig.xml +223 -0
  303. data/spec/abilities/collection_abilities_spec.rb +48 -0
  304. data/spec/abilities/generic_file_abilities_spec.rb +62 -0
  305. data/spec/abilities/generic_work_abilities_spec.rb +58 -0
  306. data/spec/actors/curation_concerns/generic_file_actor_spec.rb +116 -0
  307. data/spec/actors/curation_concerns/manages_embargoes_actor_spec.rb +95 -0
  308. data/spec/actors/curation_concerns/work_actor_spec.rb +203 -0
  309. data/spec/controllers/catalog_controller_spec.rb +115 -0
  310. data/spec/controllers/curation_concerns/classify_concerns_controller_spec.rb +43 -0
  311. data/spec/controllers/curation_concerns/collections_controller_spec.rb +171 -0
  312. data/spec/controllers/curation_concerns/generic_files_controller_spec.rb +251 -0
  313. data/spec/controllers/curation_concerns/generic_works_controller_spec.rb +167 -0
  314. data/spec/controllers/curation_concerns/permissions_controller_spec.rb +29 -0
  315. data/spec/controllers/downloads_controller_spec.rb +51 -0
  316. data/spec/controllers/embargoes_controller_spec.rb +114 -0
  317. data/spec/controllers/leases_controller_spec.rb +94 -0
  318. data/spec/factories/collections.rb +15 -0
  319. data/spec/factories/create_curation_concern.rb +3 -0
  320. data/spec/factories/generic_files.rb +31 -0
  321. data/spec/factories/generic_works.rb +54 -0
  322. data/spec/factories/users.rb +28 -0
  323. data/spec/features/add_file_spec.rb +30 -0
  324. data/spec/features/collection_spec.rb +222 -0
  325. data/spec/features/create_work_spec.rb +43 -0
  326. data/spec/features/embargo_spec.rb +51 -0
  327. data/spec/features/lease_spec.rb +49 -0
  328. data/spec/features/update_file_spec.rb +32 -0
  329. data/spec/features/work_generator_spec.rb +58 -0
  330. data/spec/fixtures/Example.ogg +0 -0
  331. data/spec/fixtures/charter.docx +0 -0
  332. data/spec/fixtures/countdown.avi +0 -0
  333. data/spec/fixtures/curation_concerns_generic_stub.txt +1 -0
  334. data/spec/fixtures/files/image.png +0 -0
  335. data/spec/fixtures/image.jp2 +0 -0
  336. data/spec/fixtures/image.jpg +0 -0
  337. data/spec/fixtures/piano_note.wav +0 -0
  338. data/spec/fixtures/sample_mpeg4.mp4 +0 -0
  339. data/spec/fixtures/small_file.txt +1 -0
  340. data/spec/fixtures/spoken-text.m4a +0 -0
  341. data/spec/fixtures/test4.pdf +0 -0
  342. data/spec/fixtures/test5.mp3 +0 -0
  343. data/spec/fixtures/world.png +0 -0
  344. data/spec/forms/collection_edit_form_spec.rb +20 -0
  345. data/spec/forms/generic_file_edit_form_spec.rb +33 -0
  346. data/spec/helpers/catalog_helper_spec.rb +58 -0
  347. data/spec/helpers/configuration_helper_spec.rb +13 -0
  348. data/spec/helpers/curation_concerns/.keep +0 -0
  349. data/spec/helpers/curation_concerns/collections_helper_spec.rb +49 -0
  350. data/spec/helpers/render_constraints_helper_spec.rb +19 -0
  351. data/spec/helpers/thumbnail_helper_spec.rb +21 -0
  352. data/spec/helpers/url_helper_spec.rb +22 -0
  353. data/spec/jobs/active_fedora_id_based_job_spec.rb +14 -0
  354. data/spec/jobs/audit_job_spec.rb +53 -0
  355. data/spec/jobs/characterize_job_spec.rb +23 -0
  356. data/spec/jobs/copy_permissions_job_spec.rb +49 -0
  357. data/spec/jobs/create_derivatives_job_spec.rb +23 -0
  358. data/spec/jobs/curation_concerns_resque_queue_spec.rb +49 -0
  359. data/spec/jobs/import_url_job_spec.rb +45 -0
  360. data/spec/jobs/ingest_local_file_job_spec.rb +25 -0
  361. data/spec/lib/curation_concerns/messages_spec.rb +70 -0
  362. data/spec/lib/curation_concerns/readable_permissions_spec.rb +56 -0
  363. data/spec/lib/curation_concerns/writable_permissions_spec.rb +16 -0
  364. data/spec/matchers/metadata_field_matchers.rb +28 -0
  365. data/spec/matchers/response_matchers.rb +7 -0
  366. data/spec/matchers.rb +24 -0
  367. data/spec/models/checksum_audit_log_spec.rb +66 -0
  368. data/spec/models/curation_concerns/collection_behavior_spec.rb +107 -0
  369. data/spec/models/curation_concerns/generic_file/derivatives_spec.rb +88 -0
  370. data/spec/models/curation_concerns/generic_work_behavior_spec.rb +35 -0
  371. data/spec/models/fits_datastream_spec.rb +127 -0
  372. data/spec/models/generic_file_spec.rb +619 -0
  373. data/spec/models/generic_work_spec.rb +43 -0
  374. data/spec/models/user_spec.rb +23 -0
  375. data/spec/presenters/curation_concerns/collection_presenter_spec.rb +34 -0
  376. data/spec/presenters/curation_concerns/generic_file_presenter_spec.rb +16 -0
  377. data/spec/routing/curation_concerns/routes_spec.rb +36 -0
  378. data/spec/routing/route_spec.rb +86 -0
  379. data/spec/services/characterization_service_spec.rb +30 -0
  380. data/spec/services/embargo_service_spec.rb +38 -0
  381. data/spec/services/full_text_extraction_service_spec.rb +5 -0
  382. data/spec/services/generic_file_audit_service_spec.rb +71 -0
  383. data/spec/services/generic_file_indexing_service_spec.rb +57 -0
  384. data/spec/services/generic_work_indexing_service_spec.rb +18 -0
  385. data/spec/services/lease_service_spec.rb +53 -0
  386. data/spec/services/repository_audit_service_spec.rb +18 -0
  387. data/spec/services/versioning_service_spec.rb +32 -0
  388. data/spec/spec_helper.rb +94 -0
  389. data/spec/support/controllers/engine_helpers.rb +7 -0
  390. data/spec/support/curation_concerns/factory_helpers.rb +14 -0
  391. data/spec/support/features/fixture_file_upload.rb +14 -0
  392. data/spec/support/features/session_helpers.rb +41 -0
  393. data/spec/support/features.rb +19 -0
  394. data/spec/support/shared/shared_examples_has_dc_metadata.rb +17 -0
  395. data/spec/support/shared/shared_examples_is_embargoable.rb +8 -0
  396. data/spec/support/shared/shared_examples_with_access_rights.rb +63 -0
  397. data/spec/tasks/rake_spec.rb +24 -0
  398. data/spec/test_app_templates/Gemfile.extra +1 -0
  399. data/spec/test_app_templates/lib/generators/test_app_generator.rb +55 -0
  400. data/spec/views/catalog/index.html.erb_spec.rb +59 -0
  401. data/spec/views/curation_concerns/base/_attributes.html.erb_spec.rb +25 -0
  402. data/spec/views/curation_concerns/base/show.html.erb_spec.rb +29 -0
  403. data/spec/views/curation_concerns/permissions/confirm.html.erb_spec.rb +33 -0
  404. data/spec/views/shared/_add_content.html.erb_spec.rb +42 -0
  405. data/spec/views/shared/_my_actions.html.erb_spec.rb +23 -0
  406. data/spec/workers/visibility_copy_worker_spec.rb +70 -0
  407. data/tasks/jetty.rake +15 -0
  408. data/tasks/release.rake +93 -0
  409. data/vendor/assets/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  410. data/vendor/assets/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  411. data/vendor/assets/javascripts/handlebars.js +2278 -0
  412. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.autocomplete.js +602 -0
  413. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.core.js +356 -0
  414. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect-highlight.js +50 -0
  415. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect.js +1276 -0
  416. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.menu.js +610 -0
  417. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.position.js +498 -0
  418. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.widget.js +528 -0
  419. data/vendor/assets/javascripts/jquery.tokeninput.js +1061 -0
  420. data/vendor/assets/stylesheets/jquery-ui-lightness.css +474 -0
  421. data/vendor/assets/stylesheets/token-input-facebook.css +122 -0
  422. data/vendor/assets/stylesheets/token-input-mac.css +204 -0
  423. data/vendor/assets/stylesheets/token-input.css +127 -0
  424. metadata +888 -0
@@ -0,0 +1,5 @@
1
+ class LeasesController < ApplicationController
2
+ include CurationConcerns::ManagesEmbargoes
3
+ include CurationConcerns::LeasesControllerBehavior
4
+ include Hydra::Collections::AcceptsBatches
5
+ end
@@ -0,0 +1,20 @@
1
+ class RegistrationsController < Devise::RegistrationsController
2
+ include CurationConcerns::ThemedLayoutController
3
+ with_themed_layout '1_column'
4
+
5
+ protected
6
+
7
+ # def after_update_path_for(resource)
8
+ # resource.update_column(:user_does_not_require_profile_update, true)
9
+ # super
10
+ # end
11
+
12
+ # def resource_class
13
+ # Account
14
+ # end
15
+
16
+ # def sign_up(resource_name, resource)
17
+ # sign_in(resource_name, resource.user)
18
+ # end
19
+
20
+ end
@@ -0,0 +1,4 @@
1
+ class SessionsController < Devise::SessionsController
2
+ include CurationConcerns::ThemedLayoutController
3
+ with_themed_layout '1_column'
4
+ end
@@ -0,0 +1,57 @@
1
+ module CurationConcerns::GenericWorkRdfProperties
2
+ extend ActiveSupport::Concern
3
+ included do
4
+ property :part_of, predicate: RDF::DC.isPartOf
5
+ property :resource_type, predicate: RDF::DC.type do |index|
6
+ index.as :stored_searchable, :facetable
7
+ end
8
+ property :title, predicate: RDF::DC.title do |index|
9
+ index.as :stored_searchable, :facetable
10
+ end
11
+ property :creator, predicate: RDF::DC.creator do |index|
12
+ index.as :stored_searchable, :facetable
13
+ end
14
+ property :contributor, predicate: RDF::DC.contributor do |index|
15
+ index.as :stored_searchable, :facetable
16
+ end
17
+ property :description, predicate: RDF::DC.description do |index|
18
+ index.type :text
19
+ index.as :stored_searchable
20
+ end
21
+ property :relation, predicate: RDF::DC.relation
22
+ property :rights, predicate: RDF::DC.rights do |index|
23
+ index.as :stored_searchable
24
+ end
25
+ property :publisher, predicate: RDF::DC.publisher do |index|
26
+ index.as :stored_searchable, :facetable
27
+ end
28
+ property :created, predicate: RDF::DC.created
29
+
30
+ property :date, predicate: RDF::DC.date do |index|
31
+ index.type :date
32
+ index.as :stored_sortable
33
+ end
34
+ property :date_uploaded, predicate: RDF::DC.dateSubmitted do |index|
35
+ index.type :date
36
+ index.as :stored_sortable
37
+ end
38
+ property :date_modified, predicate: RDF::DC.modified do |index|
39
+ index.type :date
40
+ index.as :stored_sortable
41
+ end
42
+ property :subject, predicate: RDF::DC.subject do |index|
43
+ index.as :stored_searchable, :facetable
44
+ end
45
+ property :language, predicate: RDF::DC.language do |index|
46
+ index.as :stored_searchable, :facetable
47
+ end
48
+ property :identifier, predicate: RDF::DC.identifier do |index|
49
+ index.as :stored_searchable
50
+ end
51
+ property :bibliographic_citation, predicate: RDF::DC.bibliographicCitation
52
+ property :source, predicate: RDF::DC.source
53
+ property :coverage, predicate: RDF::DC.coverage
54
+ property :type, predicate: RDF::DC.type
55
+ property :content_format, predicate: RDF::DC.format
56
+ end
57
+ end
@@ -0,0 +1,3 @@
1
+ class GenericWorkMetadata < ActiveFedora::NtriplesRDFDatastream
2
+ include CurationConcerns::GenericWorkRdfProperties
3
+ end
@@ -0,0 +1,17 @@
1
+ module CurationConcerns
2
+ module Forms
3
+ class CollectionEditForm
4
+ include HydraEditor::Form
5
+ self.model_class = ::Collection
6
+ self.terms = [:resource_type, :title, :creator, :contributor, :description, :tag, :rights,
7
+ :publisher, :date_created, :subject, :language, :identifier, :based_near, :related_url]
8
+
9
+ # Test to see if the given field is required
10
+ # @param [Symbol] key a field
11
+ # @return [Boolean] is it required or not
12
+ def required?(key)
13
+ model_class.validators_on(key).any?{|v| v.kind_of? ActiveModel::Validations::PresenceValidator}
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ module CurationConcerns
2
+ module Forms
3
+ class GenericFileEditForm < GenericFilePresenter
4
+ include HydraEditor::Form
5
+ include HydraEditor::Form::Permissions
6
+ self.required_fields = [:title, :creator, :tag, :rights]
7
+
8
+ # def self.build_permitted_params
9
+ # super.merge {
10
+ # :visibility, :visibility_during_embargo, :embargo_release_date, :visibility_after_embargo, :visibility_during_lease, :lease_expiration_date, :visibility_after_lease }
11
+ # end
12
+ end
13
+ end
14
+ end
15
+
@@ -0,0 +1,9 @@
1
+ module CurationConcerns
2
+ module Forms
3
+ class GenericWorkEditForm < GenericWorkPresenter
4
+ include HydraEditor::Form
5
+ include HydraEditor::Form::Permissions
6
+ self.required_fields = [:title, :creator, :tag, :rights]
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,46 @@
1
+ module CurationConcerns
2
+ module AbilityHelper
3
+ # Returns true if can create at least one type of work
4
+ def can_ever_create_works?
5
+ can = false
6
+ CurationConcerns.configuration.curation_concerns.each do |curation_concern_type|
7
+ break if can
8
+ can = can?(:create,curation_concern_type)
9
+ end
10
+ return can
11
+ end
12
+
13
+ def visibility_options(variant)
14
+ options = [
15
+ ['Open Access',Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC],
16
+ [t('curation_concerns.institution_name'),Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED],
17
+ ['Private',Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE]
18
+ ]
19
+ case variant
20
+ when :restrict
21
+ options.delete_at(0)
22
+ options.reverse!
23
+ when :loosen
24
+ options.delete_at(2)
25
+ end
26
+ return options
27
+ end
28
+
29
+ def visibility_badge(value)
30
+ case value
31
+ when Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
32
+ content_tag :span, "Open Access", class:"label label-success"
33
+ when Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
34
+ content_tag :span, t('sufia.institution_name'), class:"label label-info"
35
+ when Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
36
+ content_tag :span, "Private", class:"label label-danger"
37
+ when Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_EMBARGO
38
+ content_tag :span, "Embargo", class:"label label-warning"
39
+ when Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_LEASE
40
+ content_tag :span, "Lease", class:"label label-warning"
41
+ else
42
+ content_tag :span, value, class:"label label-info"
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,67 @@
1
+ module CurationConcerns
2
+ module AttributeHelper
3
+
4
+ # If options[:catalog_search_link] is false,
5
+ # it will return the attribute value as text.
6
+ # If options[:catalog_search_link] is true,
7
+ # it will return a link to a catalog search for that text.
8
+ #
9
+ # If the method_name of the attribute is different than
10
+ # how the attribute name should appear on the search URL,
11
+ # you can explicitly set the URL's search field name using
12
+ # options[:search_field].
13
+ def curation_concern_attribute_to_html(curation_concern, method_name, label = nil, options = {})
14
+ if curation_concern.respond_to?(method_name)
15
+ markup = ""
16
+ label ||= derived_label_for(curation_concern, method_name)
17
+ subject = curation_concern.send(method_name)
18
+ return markup if !subject.present? && !options[:include_empty]
19
+ markup << %(<tr><th>#{label}</th>\n<td><ul class='tabular'>)
20
+ [subject].flatten.compact.each do |value|
21
+ if method_name == :rights
22
+ # Special treatment for license/rights. A URL from the Sufia gem's config/sufia.rb is stored in the descMetadata of the
23
+ # curation_concern. If that URL is valid in form, then it is used as a link. If it is not valid, it is used as plain text.
24
+ parsedUri = URI.parse(value) rescue nil
25
+ if parsedUri.nil?
26
+ markup << %(<li class="attribute #{method_name}">#{h(value)}</li>\n)
27
+ else
28
+ markup << %(<li class="attribute #{method_name}"><a href=#{h(value)} target="_blank"> #{h(CurationConcerns.config.cc_licenses_reverse[value])}</a></li>\n)
29
+ end
30
+ else
31
+ search_field = options[:search_field] || method_name
32
+ li_value = link_to_if(options[:catalog_search_link], h(value), main_app.catalog_index_path(search_field: search_field, q: h(value)))
33
+ markup << %(<li class="attribute #{method_name}"> #{li_value} </li>\n)
34
+ end
35
+ end
36
+ markup << %(</ul></td></tr>)
37
+ markup.html_safe
38
+ end
39
+ end
40
+
41
+ def permission_badge_for(curation_concern, solr_document = nil)
42
+ solr_document ||= curation_concern.to_solr
43
+ dom_label_class, link_title = extract_dom_label_class_and_link_title(solr_document)
44
+ %(<span class="label #{dom_label_class}" title="#{link_title}">#{link_title}</span>).html_safe
45
+ end
46
+
47
+ private
48
+ def extract_dom_label_class_and_link_title(document)
49
+ hash = document.stringify_keys
50
+ dom_label_class, link_title = "label-danger", "Private"
51
+ if hash[Hydra.config.permissions.read.group].present?
52
+ if hash[Hydra.config.permissions.read.group].include?('public')
53
+ if hash[Hydra.config.permissions.embargo.release_date].present?
54
+ dom_label_class, link_title = 'label-warning', 'Open Access with Embargo'
55
+ else
56
+ dom_label_class, link_title = 'label-success', 'Open Access'
57
+ end
58
+ elsif hash[Hydra.config.permissions.read.group].include?('registered')
59
+ dom_label_class, link_title = "label-info", t('sufia.institution_name')
60
+ end
61
+ end
62
+ return dom_label_class, link_title
63
+ end
64
+
65
+
66
+ end
67
+ end
@@ -0,0 +1,38 @@
1
+ module CurationConcerns::CatalogHelper
2
+ def type_tab(label, key=label)
3
+ if params[:f] && params[:f][type_field] == [key]
4
+ content_tag(:li, link_to(label, "#"), class: "active")
5
+ else
6
+ facet_solr_field = facet_configuration_for_field(type_field)
7
+ path = search_action_path(add_facet_params_and_redirect(type_field, key))
8
+ # local_params = params.dup
9
+ # local_facet_params = local_params[:f] || {}.with_indifferent_access
10
+ # local_params[:f] = local_facet_params.select{|k,_| k != type_field }
11
+ # puts "local #{local_params}"
12
+ # path = add_facet_params(type_field, key, local_params)
13
+ content_tag(:li, link_to(label, path))
14
+ end
15
+ end
16
+
17
+ def all_type_tab(label = t('curation_concerns.catalog.index.type_tabs.all'))
18
+ if params[:f] && params[:f][type_field]
19
+ facet_solr_field = facet_configuration_for_field(type_field)
20
+ new_params = remove_facet_params(type_field, params[:f][type_field].first)
21
+
22
+ # Delete any request params from facet-specific action, needed
23
+ # to redir to index action properly.
24
+ new_params.except! *Blacklight::Solr::FacetPaginator.request_keys.values
25
+ path = search_action_path(new_params)
26
+ content_tag(:li, link_to(label, path))
27
+ else
28
+ content_tag(:li, link_to(label, '#'), class: "active")
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def type_field
35
+ Solrizer.solr_name("generic_type", :facetable)
36
+ end
37
+
38
+ end
@@ -0,0 +1,63 @@
1
+ module CurationConcerns::CollectionsHelper
2
+ def has_collection_search_parameters?
3
+ params[:cq].present?
4
+ end
5
+
6
+ def collection_modal_id(collectible)
7
+ "#{collectible.to_param.gsub(/:/, '-')}-modal"
8
+ end
9
+
10
+ def link_to_select_collection(collectible, opts={})
11
+ html_class = opts[:class]
12
+ link_to '#', data: { toggle: "modal", target: '#' + collection_modal_id(collectible) },
13
+ class: "add-to-collection #{html_class}", title: "Add #{collectible.human_readable_type} to Collection" do
14
+ icon('plus-sign') + ' Add to a Collection'
15
+ end
16
+ end
17
+
18
+ # override hydra-collections
19
+ def link_to_remove_from_collection(document, label = 'Remove From Collection')
20
+ link_to collections.collection_path(@collection.id, collection: { members: 'remove'},
21
+ batch_document_ids: [ document.id ]), method: :put do
22
+ icon('minus-sign') + ' ' + label
23
+ end
24
+ end
25
+
26
+ def icon(type)
27
+ content_tag :span, '', class: "glyphicon glyphicon-#{type}"
28
+ end
29
+
30
+ def collection_options_for_select(exclude_item = nil)
31
+ options_for_select(available_collections(exclude_item))
32
+ end
33
+
34
+ private
35
+ # return a list of collections for the current user with the exception of the passed in collection
36
+ def available_collections(exclude_item)
37
+ if exclude_item
38
+ collection_options.reject {|n| n.last == exclude_item.id}
39
+ else
40
+ collection_options
41
+ end
42
+ end
43
+
44
+
45
+ def collection_options
46
+ @collection_options ||= current_users_collections
47
+ end
48
+
49
+ # Defaults to returning a list of all collections.
50
+ # If you have implement User.collections, the results of that will be used.
51
+ def current_users_collections
52
+ if current_user.respond_to?(:collections)
53
+ current_user.collections.map { |c| [c.title.join(', '), c.id] }
54
+ else
55
+ query = ActiveFedora::SolrQueryBuilder.construct_query_for_rel(has_model: Collection.to_class_uri)
56
+ ActiveFedora::SolrService.query(query, fl: 'title_tesim id',
57
+ rows: 1000).map do |r|
58
+ [r['title_tesim'].join(', '), r['id']]
59
+ end.sort { |a, b| a.first <=> b.first }
60
+ end
61
+ end
62
+
63
+ end
@@ -0,0 +1,17 @@
1
+ module CurationConcerns
2
+ module EmbargoHelper
3
+
4
+ def assets_with_expired_embargoes
5
+ @assets_with_expired_embargoes ||= EmbargoService.assets_with_expired_embargoes
6
+ end
7
+
8
+ def assets_under_embargo
9
+ @assets_under_embargo ||= EmbargoService.assets_under_embargo
10
+ end
11
+
12
+ def assets_with_deactivated_embargoes
13
+ @assets_with_deactivated_embargoes ||= EmbargoService.assets_with_deactivated_embargoes
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ module CurationConcerns::GenericFileHelper
2
+
3
+ def generic_file_title(gf)
4
+ can?(:read, gf) ? gf.to_s : "File"
5
+ end
6
+
7
+ def generic_file_link_name(gf)
8
+ can?(:read, gf) ? gf.filename : "File"
9
+ end
10
+
11
+ def parent_path(parent)
12
+ if parent.is_a?(Collection)
13
+ main_app.collection_path(parent)
14
+ else
15
+ polymorphic_path([main_app, :curation_concerns, parent])
16
+ end
17
+ end
18
+
19
+ end
@@ -0,0 +1,18 @@
1
+ module CurationConcerns
2
+ module LeaseHelper
3
+
4
+ def assets_with_expired_leases
5
+ @assets_with_expired_leases ||= LeaseService.assets_with_expired_leases
6
+ end
7
+
8
+ def assets_under_lease
9
+ @assets_under_lease ||= LeaseService.assets_under_lease
10
+ end
11
+
12
+ def assets_with_deactivated_leases
13
+ @assets_with_deactivated_leases ||= LeaseService.assets_with_deactivated_leases
14
+ end
15
+
16
+ end
17
+ end
18
+
@@ -0,0 +1,13 @@
1
+ module CurationConcerns::MainAppHelpers
2
+ include CurationConcerns::TitleHelper
3
+ include CurationConcerns::AttributeHelper
4
+ include CurationConcerns::GenericFileHelper
5
+ include CurationConcerns::SearchPathsHelper
6
+ include CurationConcerns::RenderConstraintsHelper
7
+ include CurationConcerns::AbilityHelper
8
+ include CurationConcerns::ThumbnailHelper
9
+ include CurationConcerns::UrlHelper
10
+ include CurationConcerns::EmbargoHelper
11
+ include CurationConcerns::LeaseHelper
12
+ include CurationConcerns::CollectionsHelper
13
+ end
@@ -0,0 +1,42 @@
1
+ module CurationConcerns
2
+ module RenderConstraintsHelper
3
+ # Overridden to remove the 'search_field' tag from the localized params when the query is cleared.
4
+ # This is because unlike Blacklight, there is no way to change the search_field in the curation_concerns UI
5
+ ##
6
+ # Render the query constraints
7
+ #
8
+ # @param [Hash] query parameters
9
+ # @return [String]
10
+ def render_constraints_query(localized_params = params)
11
+ # So simple don't need a view template, we can just do it here.
12
+ return "".html_safe if localized_params[:q].blank?
13
+
14
+ render_constraint_element(constraint_query_label(localized_params),
15
+ localized_params[:q],
16
+ classes: ["query"],
17
+ remove: url_for(localized_params.except(:search_field).merge(q: nil, action: 'index')))
18
+ end
19
+
20
+ ##
21
+ # We can remove this method once we use Blacklight > 5.4.0
22
+ ##
23
+ # Return a label for the currently selected search field.
24
+ # If no "search_field" or the default (e.g. "all_fields") is selected, then return nil
25
+ # Otherwise grab the label of the selected search field.
26
+ # @param [Hash] query parameters
27
+ # @return [String]
28
+ def constraint_query_label(localized_params = params)
29
+ label_for_search_field(localized_params[:search_field]) unless default_search_field?(localized_params[:search_field])
30
+ end
31
+
32
+ ##
33
+ # We can remove this method once we use Blacklight > 5.4.0
34
+ ##
35
+ # Is the search form using the default search field ("all_fields" by default)?
36
+ # @param [String] the currently selected search_field
37
+ # @return [Boolean]
38
+ def default_search_field?(selected_search_field)
39
+ selected_search_field.blank? || (default_search_field && selected_search_field == default_search_field[:key])
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,13 @@
1
+ module CurationConcerns::SearchPathsHelper
2
+
3
+ def search_path_for_my_works(opts={})
4
+ params_for_my_works = {:'f[generic_type_sim][]'=>'Work', works: 'mine'}
5
+ main_app.catalog_index_path(params_for_my_works.merge(opts))
6
+ end
7
+
8
+ def search_path_for_my_collections(opts={})
9
+ params_for_my_collections = {:'f[generic_type_sim][]'=>'Collection', works: 'mine'}
10
+ main_app.catalog_index_path(params_for_my_collections.merge(opts))
11
+ end
12
+
13
+ end
@@ -0,0 +1,11 @@
1
+ module CurationConcerns
2
+ module ThumbnailHelper
3
+ def thumbnail_tag(document, image_options)
4
+ if document.representative.present?
5
+ image_tag main_app.download_path(document.representative, datastream_id: 'thumbnail'), alt: 'Thumbnail', class: "canonical-image"
6
+ else
7
+ content_tag :span, '', class: 'canonical-image'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,23 @@
1
+ module CurationConcerns::TitleHelper
2
+
3
+ def construct_page_title(*elements)
4
+ (elements.flatten.compact + [application_name]).join(" // ")
5
+ end
6
+
7
+ def curation_concern_page_title(curation_concern)
8
+ if curation_concern.persisted?
9
+ construct_page_title(curation_concern.title, "#{curation_concern.human_readable_type} [#{curation_concern.to_param}]")
10
+ else
11
+ construct_page_title("New #{curation_concern.human_readable_type}")
12
+ end
13
+ end
14
+
15
+ def default_page_title
16
+ text = controller_name.singularize.titleize
17
+ if action_name
18
+ text = "#{action_name.titleize} " + text
19
+ end
20
+ construct_page_title(text)
21
+ end
22
+
23
+ end
@@ -0,0 +1,29 @@
1
+ module CurationConcerns
2
+ module UrlHelper
3
+
4
+ # override Blacklight so we can use our 'curation_concern' namespace
5
+ # We may also pass in a ActiveFedora document instead of a SolrDocument
6
+ def url_for_document doc, options = {}
7
+ if doc.collection?
8
+ doc
9
+ else
10
+ polymorphic_path([main_app, :curation_concerns, doc])
11
+ end
12
+ end
13
+
14
+ def track_collection_path(*args)
15
+ main_app.track_solr_document_path(*args)
16
+ end
17
+
18
+ def track_generic_file_path(*args)
19
+ main_app.track_solr_document_path(*args)
20
+ end
21
+
22
+ # generated new GenericWork models get registered as curation concerns and need a
23
+ # track_model_path to render Blacklight-related views
24
+ CurationConcerns.configuration.registered_curation_concern_types.each do |concern|
25
+ define_method("track_#{concern.underscore}_path") {|*args| main_app.track_solr_document_path(*args)}
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,40 @@
1
+ module CurationConcerns
2
+ class CollectionPresenter
3
+ include Hydra::Presenter
4
+ include ActionView::Helpers::NumberHelper
5
+
6
+ self.model_class = ::Collection
7
+ # Terms is the list of fields displayed by app/views/collections/_show_descriptions.html.erb
8
+ self.terms = [:title, :total_items, :size, :resource_type, :description, :creator, :contributor,
9
+ :tag, :rights, :publisher, :date_created, :subject, :language, :identifier,
10
+ :based_near, :related_url]
11
+
12
+ # Depositor and permissions are not displayed in app/views/collections/_show_descriptions.html.erb
13
+ # so don't include them in `terms'.
14
+ # delegate :depositor, :permissions, to: :model
15
+
16
+ def terms_with_values
17
+ terms.select { |t| self[t].present? }
18
+ end
19
+
20
+ def [](key)
21
+ case key
22
+ when :size
23
+ size
24
+ when :total_items
25
+ total_items
26
+ else
27
+ super
28
+ end
29
+ end
30
+
31
+ def size
32
+ number_to_human_size(model.bytes)
33
+ end
34
+
35
+ def total_items
36
+ model.members.count
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,14 @@
1
+ module CurationConcerns
2
+ class GenericFilePresenter
3
+ include Hydra::Presenter
4
+ self.model_class = ::GenericFile
5
+ # Terms is the list of fields displayed by app/views/generic_files/_show_descriptions.html.erb
6
+ self.terms = [:resource_type, :title, :creator, :contributor, :description, :tag, :rights,
7
+ :publisher, :date_created, :subject, :language, :identifier, :based_near, :related_url]
8
+
9
+ # Depositor and permissions are not displayed in app/views/generic_files/_show_descriptions.html.erb
10
+ # so don't include them in `terms'.
11
+ delegate :depositor, :permissions, to: :model
12
+ end
13
+ end
14
+
@@ -0,0 +1,13 @@
1
+ module CurationConcerns
2
+ class GenericWorkPresenter
3
+ include Hydra::Presenter
4
+ self.model_class = GenericWork
5
+ # Terms is the list of fields displayed
6
+ self.terms = [:resource_type, :title, :creator, :contributor, :description, :tag, :rights,
7
+ :publisher, :date_created, :subject, :language, :identifier, :based_near, :related_url]
8
+
9
+ # Depositor and permissions are not displayed
10
+ # so don't include them in `terms'.
11
+ delegate :depositor, :permissions, to: :model
12
+ end
13
+ end