worthwhile 0.0.1.alpha → 0.0.1

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 (316) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.rspec +1 -0
  4. data/.travis.yml +19 -0
  5. data/Gemfile +7 -11
  6. data/README.md +8 -12
  7. data/Rakefile +17 -2
  8. data/app/actors/concerns/worthwhile/manages_embargoes_actor.rb +79 -0
  9. data/app/actors/curation_concern/base_actor.rb +68 -0
  10. data/app/actors/curation_concern/generic_file_actor.rb +40 -0
  11. data/app/actors/curation_concern/generic_work_actor.rb +92 -0
  12. data/app/actors/curation_concern/linked_resource_actor.rb +4 -0
  13. data/app/assets/images/default.png +0 -0
  14. data/app/assets/images/nope.png +0 -0
  15. data/app/assets/javascripts/.gitkeep +0 -0
  16. data/app/assets/javascripts/modernizr.js +3 -0
  17. data/app/assets/javascripts/worthwhile/.gitkeep +0 -0
  18. data/app/assets/javascripts/worthwhile/accept_contributor_agreement.js +15 -0
  19. data/app/assets/javascripts/worthwhile/application.js +18 -0
  20. data/app/assets/javascripts/worthwhile/browse_everything_implement.js +7 -0
  21. data/app/assets/javascripts/worthwhile/embargoes.js +17 -0
  22. data/app/assets/javascripts/worthwhile/facet_mine.js +22 -0
  23. data/app/assets/javascripts/worthwhile/help_modal.js +36 -0
  24. data/app/assets/javascripts/worthwhile/link_groups.js.coffee +123 -0
  25. data/app/assets/javascripts/worthwhile/link_users.js.coffee +126 -0
  26. data/app/assets/javascripts/worthwhile/manage_repeating_fields.js +74 -0
  27. data/app/assets/javascripts/worthwhile/proxy_rights.js.coffee +95 -0
  28. data/app/assets/javascripts/worthwhile/proxy_submission.js +23 -0
  29. data/app/assets/javascripts/worthwhile/select_works.js.coffee +20 -0
  30. data/app/assets/javascripts/worthwhile/worthwhile.js +45 -0
  31. data/app/assets/stylesheets/worthwhile.css.scss +23 -0
  32. data/app/assets/stylesheets/worthwhile/_global-variables.css.scss +5 -0
  33. data/app/assets/stylesheets/worthwhile/_modules.css.scss +14 -0
  34. data/app/assets/stylesheets/worthwhile/_positioning.css.scss +138 -0
  35. data/app/assets/stylesheets/worthwhile/_theme.css.scss +46 -0
  36. data/app/assets/stylesheets/worthwhile/_typography.css.scss +142 -0
  37. data/app/assets/stylesheets/worthwhile/_variables_bootstrap.css.scss +7 -0
  38. data/app/assets/stylesheets/worthwhile/_worthwhile.css.scss +7 -0
  39. data/app/assets/stylesheets/worthwhile/downloads.css.scss +3 -0
  40. data/app/assets/stylesheets/worthwhile/help_requests.css.scss +3 -0
  41. data/app/assets/stylesheets/worthwhile/modules/accessibility.css.scss +50 -0
  42. data/app/assets/stylesheets/worthwhile/modules/accordion.css.scss +33 -0
  43. data/app/assets/stylesheets/worthwhile/modules/attributes.css.scss +26 -0
  44. data/app/assets/stylesheets/worthwhile/modules/classify_work.css.scss +100 -0
  45. data/app/assets/stylesheets/worthwhile/modules/collections.css.scss +42 -0
  46. data/app/assets/stylesheets/worthwhile/modules/embargoes.css.scss +15 -0
  47. data/app/assets/stylesheets/worthwhile/modules/emphatic_action_area.css.scss +14 -0
  48. data/app/assets/stylesheets/worthwhile/modules/forms.css.scss +116 -0
  49. data/app/assets/stylesheets/worthwhile/modules/multi_value_fields.css.scss +52 -0
  50. data/app/assets/stylesheets/worthwhile/modules/pagination.css.scss +4 -0
  51. data/app/assets/stylesheets/worthwhile/modules/search_results.css.scss +55 -0
  52. data/app/assets/stylesheets/worthwhile/modules/site_actions.css.scss +53 -0
  53. data/app/assets/stylesheets/worthwhile/modules/site_search.css.scss +46 -0
  54. data/app/controllers/catalog_controller.rb +3 -0
  55. data/app/controllers/collections_controller.rb +59 -0
  56. data/app/controllers/concerns/worthwhile/application_controller_behavior.rb +23 -0
  57. data/app/controllers/concerns/worthwhile/catalog_controller.rb +347 -0
  58. data/app/controllers/concerns/worthwhile/curation_concern_controller.rb +131 -0
  59. data/app/controllers/concerns/worthwhile/files_controller.rb +149 -0
  60. data/app/controllers/concerns/worthwhile/manages_embargoes.rb +22 -0
  61. data/app/controllers/concerns/worthwhile/parent_container.rb +31 -0
  62. data/app/controllers/concerns/worthwhile/themed_layout_controller.rb +31 -0
  63. data/app/controllers/concerns/worthwhile/without_namespace.rb +15 -0
  64. data/app/controllers/curation_concern/generic_files_controller.rb +6 -0
  65. data/app/controllers/curation_concern/generic_works_controller.rb +6 -0
  66. data/app/controllers/curation_concern/linked_resources_controller.rb +68 -0
  67. data/app/controllers/curation_concern/permissions_controller.rb +19 -0
  68. data/app/controllers/downloads_controller.rb +4 -0
  69. data/app/controllers/embargoes_controller.rb +44 -0
  70. data/app/controllers/leases_controller.rb +34 -0
  71. data/app/controllers/registrations_controller.rb +20 -0
  72. data/app/controllers/sessions_controller.rb +4 -0
  73. data/app/controllers/worthwhile/application_controller.rb +7 -0
  74. data/app/controllers/worthwhile/classify_concerns_controller.rb +35 -0
  75. data/app/datastreams/generic_work_metadata.rb +3 -0
  76. data/app/datastreams/worthwhile/generic_work_rdf_properties.rb +57 -0
  77. data/app/datastreams/worthwhile/properties_datastream.rb +28 -0
  78. data/app/helpers/curate/collections_helper.rb +133 -0
  79. data/app/helpers/worthwhile/ability_helper.rb +46 -0
  80. data/app/helpers/worthwhile/attribute_helper.rb +67 -0
  81. data/app/helpers/worthwhile/catalog_helper.rb +38 -0
  82. data/app/helpers/worthwhile/collections_helper.rb +19 -0
  83. data/app/helpers/worthwhile/embargo_helper.rb +17 -0
  84. data/app/helpers/worthwhile/generic_file_helper.rb +19 -0
  85. data/app/helpers/worthwhile/lease_helper.rb +18 -0
  86. data/app/helpers/worthwhile/main_app_helpers.rb +14 -0
  87. data/app/helpers/worthwhile/render_constraints_helper.rb +42 -0
  88. data/app/helpers/worthwhile/search_paths_helper.rb +13 -0
  89. data/app/helpers/worthwhile/thumbnail_helper.rb +11 -0
  90. data/app/helpers/worthwhile/title_helper.rb +23 -0
  91. data/app/helpers/worthwhile/url_helper.rb +16 -0
  92. data/app/inputs/multi_value_input.rb +72 -0
  93. data/app/models/collection.rb +15 -0
  94. data/app/models/concerns/curation_concern/collection_model.rb +62 -0
  95. data/app/models/concerns/curation_concern/curatable.rb +77 -0
  96. data/app/models/concerns/curation_concern/has_representative.rb +14 -0
  97. data/app/models/concerns/curation_concern/human_readable_type.rb +23 -0
  98. data/app/models/concerns/curation_concern/with_basic_metadata.rb +49 -0
  99. data/app/models/concerns/curation_concern/with_editors.rb +44 -0
  100. data/app/models/concerns/curation_concern/with_generic_files.rb +23 -0
  101. data/app/models/concerns/curation_concern/with_linked_resources.rb +21 -0
  102. data/app/models/concerns/curation_concern/work.rb +24 -0
  103. data/app/models/concerns/worthwhile/ability.rb +34 -0
  104. data/app/models/concerns/worthwhile/generic_file/versioned_content.rb +18 -0
  105. data/app/models/concerns/worthwhile/generic_file_base.rb +64 -0
  106. data/app/models/concerns/worthwhile/solr_document_behavior.rb +140 -0
  107. data/app/models/generic_work.rb +5 -0
  108. data/app/models/worthwhile/classify_concern.rb +47 -0
  109. data/app/models/worthwhile/content_version.rb +23 -0
  110. data/app/models/worthwhile/contributor_agreement.rb +23 -0
  111. data/app/models/worthwhile/generic_file.rb +5 -0
  112. data/app/models/worthwhile/linked_resource.rb +41 -0
  113. data/app/models/worthwhile/quick_classification_query.rb +31 -0
  114. data/app/services/worthwhile/curation_concern.rb +21 -0
  115. data/app/services/worthwhile/embargo_service.rb +26 -0
  116. data/app/services/worthwhile/lease_service.rb +23 -0
  117. data/app/views/catalog/_action_menu_partials/_collection.html.erb +27 -0
  118. data/app/views/catalog/_action_menu_partials/_default.html.erb +27 -0
  119. data/app/views/catalog/_document.html.erb +3 -0
  120. data/app/views/catalog/_document_list.html.erb +5 -0
  121. data/app/views/catalog/_home_text.html.erb +8 -0
  122. data/app/views/catalog/_index_default.html.erb +17 -0
  123. data/app/views/catalog/_index_header_list_default.html.erb +17 -0
  124. data/app/views/catalog/_navbar.html.erb +12 -0
  125. data/app/views/catalog/_show_partials/_default.html.erb +22 -0
  126. data/app/views/catalog/_show_partials/_default_details.html.erb +15 -0
  127. data/app/views/catalog/_show_partials/_facets.html.erb +52 -0
  128. data/app/views/catalog/index.html.erb +48 -0
  129. data/app/views/collections/_batch_edits_actions.html.erb +3 -0
  130. data/app/views/collections/_button_for_creating_empty_collection.html.erb +3 -0
  131. data/app/views/collections/_collection.html.erb +1 -0
  132. data/app/views/collections/_dashboard_document_list.html.erb +6 -0
  133. data/app/views/collections/_document_list.html.erb +7 -0
  134. data/app/views/collections/_edit_actions.html.erb +5 -0
  135. data/app/views/collections/_edit_descriptions.html.erb +20 -0
  136. data/app/views/collections/_form.html.erb +26 -0
  137. data/app/views/collections/_form_for_select_collection.html.erb +34 -0
  138. data/app/views/collections/_form_permission.html.erb +36 -0
  139. data/app/views/collections/_form_required_information.html.erb +11 -0
  140. data/app/views/collections/_identifier_and_action.html.erb +15 -0
  141. data/app/views/collections/_media_display.html.erb +1 -0
  142. data/app/views/collections/_paginate.html.erb +6 -0
  143. data/app/views/collections/_search_collection_dashboard_form.html.erb +10 -0
  144. data/app/views/collections/_show_actions.html.erb +8 -0
  145. data/app/views/collections/_show_descriptions.html.erb +10 -0
  146. data/app/views/collections/_show_fields.html.erb +0 -0
  147. data/app/views/collections/_single_item_action_fields.html.erb +6 -0
  148. data/app/views/collections/_sort_and_per_page.html.erb +29 -0
  149. data/app/views/collections/_view_type_group.html.erb +13 -0
  150. data/app/views/collections/edit.html.erb +22 -0
  151. data/app/views/collections/new.html.erb +15 -0
  152. data/app/views/collections/show.html.erb +24 -0
  153. data/app/views/curate/collections/_add_to_collection_modal.html.erb +15 -0
  154. data/app/views/curate/collections/_button_remove_from_collection.html.erb +6 -0
  155. data/app/views/curate/collections/_form_to_add_member.html.erb +27 -0
  156. data/app/views/curate/collections/add_member_form.html.erb +6 -0
  157. data/app/views/curation_concern/base/_attributes.html.erb +25 -0
  158. data/app/views/curation_concern/base/_collections.html.erb +26 -0
  159. data/app/views/curation_concern/base/_form.html.erb +27 -0
  160. data/app/views/curation_concern/base/_form_additional_information.html.erb +9 -0
  161. data/app/views/curation_concern/base/_form_content_license.html.erb +16 -0
  162. data/app/views/curation_concern/base/_form_contributor_agreement.html.erb +29 -0
  163. data/app/views/curation_concern/base/_form_descriptive_fields.erb +23 -0
  164. data/app/views/curation_concern/base/_form_files_and_links.html.erb +29 -0
  165. data/app/views/curation_concern/base/_form_permission.html.erb +52 -0
  166. data/app/views/curation_concern/base/_form_permission_embargo.html.erb +6 -0
  167. data/app/views/curation_concern/base/_form_permission_lease.html.erb +6 -0
  168. data/app/views/curation_concern/base/_form_permission_under_embargo.html.erb +16 -0
  169. data/app/views/curation_concern/base/_form_permission_under_lease.html.erb +18 -0
  170. data/app/views/curation_concern/base/_form_representative_image.html.erb +13 -0
  171. data/app/views/curation_concern/base/_form_required_information.html.erb +11 -0
  172. data/app/views/curation_concern/base/_form_supplementary_fields.html.erb +15 -0
  173. data/app/views/curation_concern/base/_legally_binding_text.html.erb +33 -0
  174. data/app/views/curation_concern/base/_related_files.html.erb +24 -0
  175. data/app/views/curation_concern/base/_related_resources.html.erb +40 -0
  176. data/app/views/curation_concern/base/_representative_media.html.erb +8 -0
  177. data/app/views/curation_concern/base/edit.html.erb +15 -0
  178. data/app/views/curation_concern/base/new.html.erb +14 -0
  179. data/app/views/curation_concern/base/show.html.erb +32 -0
  180. data/app/views/curation_concern/base/unauthorized.html.erb +3 -0
  181. data/app/views/curation_concern/generic_files/_form.html.erb +35 -0
  182. data/app/views/curation_concern/generic_files/_media_display.html.erb +20 -0
  183. data/app/views/curation_concern/generic_files/edit.html.erb +5 -0
  184. data/app/views/curation_concern/generic_files/show.html.erb +15 -0
  185. data/app/views/curation_concern/generic_works/_generic_work.html.erb +3 -0
  186. data/app/views/curation_concern/linked_resources/_form.html.erb +11 -0
  187. data/app/views/curation_concern/linked_resources/edit.html.erb +5 -0
  188. data/app/views/curation_concern/linked_resources/new.html.erb +5 -0
  189. data/app/views/curation_concern/permissions/confirm.html.erb +13 -0
  190. data/app/views/curation_concern/worthwhile/generic_files/_actions.html.erb +16 -0
  191. data/app/views/curation_concern/worthwhile/generic_files/_generic_file.html.erb +12 -0
  192. data/app/views/embargoes/_embargo_history.html.erb +7 -0
  193. data/app/views/embargoes/_list_active_embargoes.html.erb +16 -0
  194. data/app/views/embargoes/_list_deactivated_embargoes.html.erb +10 -0
  195. data/app/views/embargoes/_list_expired_active_embargoes.html.erb +44 -0
  196. data/app/views/embargoes/edit.html.erb +43 -0
  197. data/app/views/embargoes/index.html.erb +18 -0
  198. data/app/views/layouts/boilerplate.html.erb +22 -0
  199. data/app/views/layouts/common_objects.html.erb +36 -0
  200. data/app/views/layouts/curate_nd.html.erb +33 -0
  201. data/app/views/layouts/curate_nd/1_column.html.erb +22 -0
  202. data/app/views/layouts/curate_nd/2_column.html.erb +26 -0
  203. data/app/views/layouts/curate_nd/catalog.html.erb +38 -0
  204. data/app/views/layouts/curate_nd/dashboard.html.erb +22 -0
  205. data/app/views/leases/_lease_history.html.erb +7 -0
  206. data/app/views/leases/_list_active_leases.html.erb +16 -0
  207. data/app/views/leases/_list_deactivated_leases.html.erb +4 -0
  208. data/app/views/leases/_list_expired_active_leases.html.erb +38 -0
  209. data/app/views/leases/edit.html.erb +43 -0
  210. data/app/views/leases/index.html.erb +18 -0
  211. data/app/views/shared/_add_content.html.erb +32 -0
  212. data/app/views/shared/_brand_bar.html.erb +10 -0
  213. data/app/views/shared/_flash_message.html.erb +17 -0
  214. data/app/views/shared/_footer.html.erb +10 -0
  215. data/app/views/shared/_ga.html.erb +6 -0
  216. data/app/views/shared/_header.html.erb +12 -0
  217. data/app/views/shared/_my_actions.html.erb +21 -0
  218. data/app/views/shared/_site_actions.html.erb +7 -0
  219. data/app/views/shared/_site_search.html.erb +12 -0
  220. data/app/views/shared/_title_bar.html.erb +16 -0
  221. data/app/views/worthwhile/classify_concerns/new.html.erb +27 -0
  222. data/app/workers/visibility_copy_worker.rb +29 -0
  223. data/config/initializers/simple_form.rb +31 -0
  224. data/config/locales/sufia.en.yml +26 -0
  225. data/config/locales/worthwhile.en.yml +68 -0
  226. data/config/routes.rb +4 -0
  227. data/lib/generators/worthwhile/install_generator.rb +74 -0
  228. data/lib/generators/worthwhile/templates/worthwhile.css.scss +3 -0
  229. data/lib/generators/worthwhile/templates/worthwhile.js +1 -0
  230. data/lib/generators/worthwhile/templates/worthwhile_config.rb +3 -0
  231. data/lib/generators/worthwhile/templates/worthwhile_helper.rb +4 -0
  232. data/lib/worthwhile.rb +3 -1
  233. data/lib/worthwhile/configuration.rb +74 -0
  234. data/lib/worthwhile/controller_resource.rb +10 -0
  235. data/lib/worthwhile/engine.rb +20 -0
  236. data/lib/worthwhile/rails/routes.rb +78 -0
  237. data/lib/worthwhile/spec_support.rb +10 -0
  238. data/lib/worthwhile/version.rb +1 -1
  239. data/spec/abilities/generic_file_abilities_spec.rb +62 -0
  240. data/spec/abilities/generic_work_abilities_spec.rb +58 -0
  241. data/spec/actors/curation_concern/generic_work_actor_spec.rb +215 -0
  242. data/spec/actors/curation_concern/linked_resource_actor_spec.rb +36 -0
  243. data/spec/actors/worthwile/manages_embargoes_actor_spec.rb +95 -0
  244. data/spec/controllers/catalog_controller_spec.rb +114 -0
  245. data/spec/controllers/collections_controller_spec.rb +216 -0
  246. data/spec/controllers/curation_concern/generic_files_controller_spec.rb +258 -0
  247. data/spec/controllers/curation_concern/generic_works_controller_spec.rb +171 -0
  248. data/spec/controllers/curation_concern/linked_resources_controller_spec.rb +123 -0
  249. data/spec/controllers/curation_concern/permissions_controller_spec.rb +29 -0
  250. data/spec/controllers/downloads_controller_spec.rb +53 -0
  251. data/spec/controllers/embargoes_controller_spec.rb +107 -0
  252. data/spec/controllers/leases_controller_spec.rb +95 -0
  253. data/spec/controllers/worthwhile/classify_concerns_controller_spec.rb +35 -0
  254. data/spec/factories/collections_factory.rb +21 -0
  255. data/spec/factories/create_curation_concern.rb +3 -0
  256. data/spec/factories/generic_files.rb +18 -0
  257. data/spec/factories/generic_works.rb +37 -0
  258. data/spec/factories/linked_resources_factory.rb +18 -0
  259. data/spec/factories/users.rb +15 -0
  260. data/spec/features/add_external_link_spec.rb +25 -0
  261. data/spec/features/add_file_spec.rb +28 -0
  262. data/spec/features/collection_spec.rb +238 -0
  263. data/spec/features/embargo_spec.rb +45 -0
  264. data/spec/features/lease_spec.rb +43 -0
  265. data/spec/features/update_file_spec.rb +28 -0
  266. data/spec/fixtures/files/image.png +0 -0
  267. data/spec/helpers/catalog_helper_spec.rb +58 -0
  268. data/spec/helpers/configuration_helper_spec.rb +13 -0
  269. data/spec/helpers/render_constraints_helper_spec.rb +19 -0
  270. data/spec/helpers/thumbnail_helper_spec.rb +21 -0
  271. data/spec/helpers/url_helper_spec.rb +19 -0
  272. data/spec/matchers.rb +24 -0
  273. data/spec/matchers/metadata_field_matchers.rb +28 -0
  274. data/spec/models/collection_spec.rb +136 -0
  275. data/spec/models/curation_concern/collection_model_spec.rb +50 -0
  276. data/spec/models/curation_concern/work_spec.rb +30 -0
  277. data/spec/models/generic_work_spec.rb +24 -0
  278. data/spec/models/worthwhile/content_version_spec.rb +27 -0
  279. data/spec/models/worthwhile/generic_file_spec.rb +77 -0
  280. data/spec/models/worthwhile/linked_resource_spec.rb +76 -0
  281. data/spec/routing/worthwhile/routes_spec.rb +23 -0
  282. data/spec/services/embargo_service_spec.rb +38 -0
  283. data/spec/services/lease_service_spec.rb +37 -0
  284. data/spec/spec_helper.rb +30 -5
  285. data/spec/support/controllers/engine_helpers.rb +7 -0
  286. data/spec/support/curation_concern/factory_helpers.rb +14 -0
  287. data/spec/support/features.rb +19 -0
  288. data/spec/support/features/fixture_file_upload.rb +14 -0
  289. data/spec/support/features/session_helpers.rb +41 -0
  290. data/spec/support/shared/shared_examples_has_dc_metadata.rb +17 -0
  291. data/spec/support/shared/shared_examples_is_a_curation_concern_model.rb +40 -0
  292. data/spec/support/shared/shared_examples_is_embargoable.rb +8 -0
  293. data/spec/support/shared/shared_examples_with_access_rights.rb +63 -0
  294. data/spec/test_app_templates/lib/generators/test_app_generator.rb +8 -29
  295. data/spec/views/curation_concern/base/_attributes.html.erb_spec.rb +25 -0
  296. data/spec/views/curation_concern/base/show.html.erb_spec.rb +25 -0
  297. data/spec/views/shared/_add_content.html.erb_spec.rb +42 -0
  298. data/spec/views/shared/_my_actions.html.erb_spec.rb +23 -0
  299. data/spec/workers/visibility_copy_worker_spec.rb +68 -0
  300. data/vendor/assets/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  301. data/vendor/assets/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  302. data/vendor/assets/javascripts/handlebars.js +2278 -0
  303. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.autocomplete.js +602 -0
  304. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.core.js +356 -0
  305. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect-highlight.js +50 -0
  306. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect.js +1276 -0
  307. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.menu.js +610 -0
  308. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.position.js +498 -0
  309. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.widget.js +528 -0
  310. data/vendor/assets/javascripts/jquery.tokeninput.js +1061 -0
  311. data/vendor/assets/stylesheets/jquery-ui-lightness.css +474 -0
  312. data/vendor/assets/stylesheets/token-input-facebook.css +122 -0
  313. data/vendor/assets/stylesheets/token-input-mac.css +204 -0
  314. data/vendor/assets/stylesheets/token-input.css +127 -0
  315. data/worthwhile.gemspec +9 -3
  316. metadata +469 -9
@@ -0,0 +1,19 @@
1
+ class CurationConcern::PermissionsController < ApplicationController
2
+ include Worthwhile::CurationConcernController
3
+ with_themed_layout '1_column'
4
+ self.curation_concern_type = ActiveFedora::Base
5
+
6
+ def confirm
7
+ end
8
+
9
+ def copy
10
+ Sufia.queue.push(VisibilityCopyWorker.new(curation_concern.id))
11
+ flash_message = 'Updating file permissions. This may take a few minutes. You may want to refresh your browser or return to this record later to see the updated file permissions.'
12
+ redirect_to polymorphic_path([:curation_concern, curation_concern]), notice: flash_message
13
+ end
14
+
15
+ def curation_concern
16
+ @curation_concern ||= self.curation_concern_type.find(params[:id], cast: true)
17
+ end
18
+
19
+ end
@@ -0,0 +1,4 @@
1
+ class DownloadsController < ApplicationController
2
+ include Worthwhile::WithoutNamespace
3
+ include Hydra::Controller::DownloadBehavior
4
+ end
@@ -0,0 +1,44 @@
1
+ class EmbargoesController < ApplicationController
2
+
3
+ include Worthwhile::WithoutNamespace
4
+ include Worthwhile::ManagesEmbargoes
5
+ include Hydra::Collections::AcceptsBatches
6
+
7
+ skip_before_filter :normalize_identifier, only: :update
8
+
9
+ # Remove an active or lapsed embargo
10
+ def destroy
11
+ update_files = !curation_concern.under_embargo? # embargo expired
12
+ remove_embargo(curation_concern)
13
+ flash[:notice] = curation_concern.embargo_history.last
14
+ if update_files
15
+ redirect_to confirm_curation_concern_permission_path(curation_concern)
16
+ else
17
+ redirect_to edit_embargo_path(curation_concern)
18
+ end
19
+ end
20
+
21
+ def update
22
+ filter_docs_with_edit_access!
23
+ copy_visibility = params[:embargoes].values.map { |h| h[:copy_visibility] }
24
+ batch.each do |id|
25
+ ActiveFedora::Base.find(id).tap do |curation_concern|
26
+ remove_embargo(curation_concern)
27
+ curation_concern.copy_visibility_to_files if copy_visibility.include?(id)
28
+ end
29
+ end
30
+ redirect_to embargoes_path
31
+ end
32
+
33
+ protected
34
+ def _prefixes
35
+ # This allows us to use the unauthorized template in curation_concern/base
36
+ @_prefixes ||= super + ['curation_concern/base']
37
+ end
38
+
39
+ def remove_embargo(work)
40
+ work.embargo_visibility! # If the embargo has lapsed, update the current visibility.
41
+ work.deactivate_embargo!
42
+ work.save
43
+ end
44
+ end
@@ -0,0 +1,34 @@
1
+ class LeasesController < ApplicationController
2
+ include Worthwhile::WithoutNamespace
3
+ include Worthwhile::ManagesEmbargoes
4
+ include Hydra::Collections::AcceptsBatches
5
+
6
+ skip_before_filter :normalize_identifier, only: :update
7
+
8
+ def destroy
9
+ curation_concern.lease_visibility! # If the lease has lapsed, update the current visibility.
10
+ curation_concern.deactivate_lease!
11
+ saved = curation_concern.save
12
+ Sufia.queue.push(VisibilityCopyWorker.new(curation_concern.id)) if saved
13
+ flash[:notice] = curation_concern.lease_history.last
14
+ redirect_to edit_lease_path(curation_concern)
15
+ end
16
+
17
+ def update
18
+ filter_docs_with_edit_access!
19
+ batch.each do |id|
20
+ ActiveFedora::Base.find(id).tap do |curation_concern|
21
+ curation_concern.deactivate_lease!
22
+ curation_concern.save
23
+ end
24
+ end
25
+ redirect_to leases_path
26
+ end
27
+
28
+
29
+ protected
30
+ def _prefixes
31
+ # This allows us to use the unauthorized template in curation_concern/base
32
+ @_prefixes ||= super + ['curation_concern/base']
33
+ end
34
+ end
@@ -0,0 +1,20 @@
1
+ class RegistrationsController < Devise::RegistrationsController
2
+ include Worthwhile::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 Worthwhile::ThemedLayoutController
3
+ with_themed_layout '1_column'
4
+ end
@@ -0,0 +1,7 @@
1
+ module Worthwhile
2
+ # Inherit from the host app's ApplicationController
3
+ # This will configure e.g. the layout used by the host
4
+ class ApplicationController < ::ApplicationController
5
+ include Worthwhile::ApplicationControllerBehavior
6
+ end
7
+ end
@@ -0,0 +1,35 @@
1
+ module Worthwhile
2
+ class ClassifyConcernsController < ApplicationController
3
+ include Worthwhile::ThemedLayoutController
4
+ with_themed_layout '1_column'
5
+ respond_to :html
6
+ before_filter :authenticate_user!
7
+ load_and_authorize_resource
8
+
9
+ add_breadcrumb 'Submit a work', lambda {|controller| controller.request.path }
10
+
11
+ def classify_concern
12
+ @classify_concern
13
+ end
14
+ helper_method :classify_concern
15
+
16
+ def new
17
+ respond_with(classify_concern)
18
+ end
19
+
20
+ def create
21
+ classify_concern.attributes = params[:classify_concern]
22
+ if classify_concern.valid?
23
+ respond_with(classify_concern) do |wants|
24
+ wants.html do
25
+ redirect_to new_polymorphic_path(
26
+ [:curation_concern, classify_concern.curation_concern_class]
27
+ )
28
+ end
29
+ end
30
+ else
31
+ respond_with(classify_concern)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,3 @@
1
+ class GenericWorkMetadata < ActiveFedora::NtriplesRDFDatastream
2
+ include Worthwhile::GenericWorkRdfProperties
3
+ end
@@ -0,0 +1,57 @@
1
+ module Worthwhile::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,28 @@
1
+ # properties datastream: catch-all for info that didn't have another home.
2
+ class Worthwhile::PropertiesDatastream < ActiveFedora::OmDatastream
3
+ set_terminology do |t|
4
+ t.root(:path=>"fields" )
5
+ # This is where we put the user id of the object depositor
6
+ t.depositor index_as: :stored_searchable
7
+ t.owner
8
+
9
+ # Although we aren't using these fields, they are required because sufia-models delegates to them.
10
+ t.relative_path
11
+ t.import_url
12
+
13
+ #This attribute should hold the selected file which represent the work.
14
+ t.representative
15
+ end
16
+
17
+ def self.xml_template
18
+ builder = Nokogiri::XML::Builder.new do |xml|
19
+ xml.fields
20
+ end
21
+ builder.doc
22
+ end
23
+
24
+ def prefix
25
+ 'properties_'
26
+ end
27
+ end
28
+
@@ -0,0 +1,133 @@
1
+ #require Hydra::Collections::Engine.root + '/app/helpers/collections_helper.rb'
2
+ # View Helpers for Hydra Collections functionality
3
+ module Curate::CollectionsHelper
4
+
5
+ # Displays the Collections create collection button.
6
+ def button_for_create_new_collection(label = 'Create Collection')
7
+ render partial: 'button_create_collection', locals:{label:label}
8
+ end
9
+
10
+ def button_for_remove_item_from_collection(document, collection, label = 'Remove From Collection')
11
+ render partial:'/curate/collections/button_remove_from_collection', locals:{collection:collection, label:label, document:document}
12
+ end
13
+
14
+ def hidden_collection_members
15
+ _erbout = ''
16
+ if params[:batch_document_ids].present?
17
+ params[:batch_document_ids].each do |batch_item|
18
+ _erbout.concat hidden_field_tag("batch_document_ids[]", batch_item)
19
+ end
20
+ end
21
+ _erbout.html_safe
22
+ end
23
+
24
+ def has_any_collections?
25
+ current_user.collections.count > 0 if current_user
26
+ end
27
+
28
+ # 'terminate' indicates whether to drill down and display the content of collections within the given collection
29
+ # (i.e. recurse by calling list_items_in_collection on collections within the given collection).
30
+ #
31
+ # 'options' hash may include the following:
32
+ # :display_contributors - boolean - Indicates whether to display a list of contributors next to the work/collection title.
33
+ # Default is true. When omitted from options hash or present and set to true, the contributors will be listed.
34
+ # When set to false, the contributors are not listed.
35
+ def list_items_in_collection(collection, terminate=false, options={})
36
+ content_tag :ul, class: 'collection-listing' do
37
+ collection.members.inject('') do |output, member|
38
+ output << member_line_item(collection, member, terminate, options)
39
+ end.html_safe
40
+ end
41
+ end
42
+
43
+ def member_line_item(collection, member, terminate, options={})
44
+ if can? :read, member
45
+ content_tag :li, class: line_item_class(collection), data: { noid: member.noid }do
46
+ markup = member.respond_to?(:members) ? collection_line_item(member, terminate, options) : work_line_item(member, options)
47
+
48
+ if can? :edit, collection
49
+ markup << collection_member_actions(collection, member)
50
+ end
51
+
52
+ markup
53
+ end
54
+ else
55
+ ""
56
+ end
57
+ end
58
+
59
+ def line_item_class(collection)
60
+ css_class = 'collection-member'
61
+ css_class << ' with-controls' if can? :edit, collection
62
+ css_class
63
+ end
64
+
65
+ def work_line_item(work, options={})
66
+ link = link_to work.to_s, polymorphic_path_for_asset(work)
67
+ link = link + ' ' + contributors(work) if options.fetch(:display_contributors, true)
68
+ link
69
+ end
70
+
71
+ def collection_line_item(collection, terminate, options={})
72
+ # A collection listed as a terminal (terminate is true) member of another collection gets a
73
+ # normal-sized (<p>) font versus a collection heading-sized (<h3>) font.
74
+ headertag = terminate ? :p : :h3
75
+ list_item = content_tag headertag, class: 'collection-section-heading' do
76
+ link_to collection.to_s, collection_path(collection)
77
+ end
78
+ if collection.description.present?
79
+ list_item << content_tag( :div, collection.description, class: 'collection-section-description')
80
+ end
81
+ list_item << list_items_in_collection(collection, true, options) unless terminate # limit nesting
82
+ list_item
83
+ end
84
+
85
+ def contributors(work)
86
+ if work.respond_to?(:contributor)
87
+ "(#{work.contributor.to_a.join(', ')})"
88
+ else
89
+ ''
90
+ end
91
+ end
92
+
93
+ def collection_member_actions(collection, member)
94
+ content_tag :span, class: 'collection-member-actions' do
95
+ if member.respond_to?(:members)
96
+ markup = actions_for_member(collection, member)
97
+ else
98
+ actions_for_member(collection, member)
99
+ end
100
+ end
101
+ end
102
+
103
+ def actions_for_member(collection, member)
104
+ button_to remove_member_collections_path(id: collection.to_param, item_id: member.pid), data: { confirm: 'Are you sure you want to remove this item from the collection?' }, method: :put, id: "remove-#{member.noid}", class: 'btn', form_class: 'remove-member', remote: true do
105
+ raw('<i class="icon-minus"></i> Remove')
106
+ end
107
+ end
108
+
109
+ def collection_options
110
+ @collection_options ||= current_users_collections
111
+ end
112
+
113
+ # Defaults to returning a list of all collections.
114
+ # If you have implement User.collections, the results of that will be used.
115
+ def current_users_collections
116
+ if current_user.respond_to?(:collections)
117
+ current_user.collections.to_a
118
+ else
119
+ Collection.all
120
+ end
121
+ end
122
+
123
+ def available_collections(item = nil)
124
+ if item.present?
125
+ collection_options.reject {|n| n == item}
126
+ else
127
+ collection_options
128
+ end
129
+ end
130
+
131
+
132
+ end
133
+
@@ -0,0 +1,46 @@
1
+ module Worthwhile
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
+ Worthwhile.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('sufia.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