hyrax 2.1.0.beta2 → 2.1.0.rc1

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 (180) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODE_OF_CONDUCT.md +5 -5
  3. data/.github/CONTRIBUTING.md +2 -2
  4. data/.rubocop.yml +1 -0
  5. data/.rubocop_fixme.yml +2 -0
  6. data/Gemfile +1 -0
  7. data/README.md +3 -2
  8. data/app/actors/hyrax/actors/collections_membership_actor.rb +3 -0
  9. data/app/actors/hyrax/actors/create_with_remote_files_actor.rb +4 -3
  10. data/app/actors/hyrax/actors/default_admin_set_actor.rb +9 -6
  11. data/app/assets/javascripts/hyrax.js +3 -0
  12. data/app/assets/javascripts/hyrax/app.js.erb +14 -0
  13. data/app/assets/javascripts/hyrax/batch_edit.js +2 -1
  14. data/app/assets/javascripts/hyrax/collection_types.es6 +97 -36
  15. data/app/assets/javascripts/hyrax/collections.js +15 -49
  16. data/app/assets/javascripts/hyrax/collections_utils.es6 +116 -0
  17. data/app/assets/javascripts/hyrax/collections_v2.es6 +57 -0
  18. data/app/assets/javascripts/hyrax/content_blocks.js +1 -13
  19. data/app/assets/javascripts/hyrax/nav_safety.js +41 -0
  20. data/app/assets/javascripts/hyrax/turbolinks_events.js +3 -0
  21. data/app/assets/stylesheets/hyrax/_collection_types.scss +46 -2
  22. data/app/assets/stylesheets/hyrax/_work-show.scss +6 -9
  23. data/app/assets/stylesheets/hyrax/dashboard.scss +2 -0
  24. data/app/assets/stylesheets/hyrax/sidebar.scss +4 -0
  25. data/app/controllers/concerns/hyrax/works_controller_behavior.rb +10 -2
  26. data/app/controllers/hyrax/admin/admin_sets_controller.rb +2 -9
  27. data/app/controllers/hyrax/admin/collection_types_controller.rb +1 -1
  28. data/app/controllers/hyrax/batch_edits_controller.rb +30 -4
  29. data/app/controllers/hyrax/dashboard/collection_members_controller.rb +1 -0
  30. data/app/controllers/hyrax/dashboard/collections_controller.rb +4 -1
  31. data/app/controllers/hyrax/downloads_controller.rb +7 -1
  32. data/app/forms/hyrax/forms/admin/collection_type_form.rb +1 -1
  33. data/app/indexers/hyrax/repository_reindexer.rb +1 -1
  34. data/app/jobs/attach_files_to_work_job.rb +8 -4
  35. data/app/jobs/import_url_job.rb +11 -5
  36. data/app/models/admin_set.rb +25 -3
  37. data/app/models/concerns/hyrax/collection_behavior.rb +23 -11
  38. data/app/models/concerns/hyrax/collection_nesting.rb +22 -3
  39. data/app/models/hyrax/permission_template_access.rb +7 -4
  40. data/app/presenters/hyrax/admin_set_presenter.rb +21 -0
  41. data/app/presenters/hyrax/collection_presenter.rb +23 -1
  42. data/app/presenters/hyrax/dashboard/user_presenter.rb +4 -0
  43. data/app/presenters/hyrax/presents_attributes.rb +6 -2
  44. data/app/presenters/hyrax/work_show_presenter.rb +4 -0
  45. data/app/renderers/hyrax/renderers/attribute_renderer.rb +14 -0
  46. data/app/services/hyrax/adapters/nesting_index_adapter.rb +19 -39
  47. data/app/services/hyrax/admin_set_create_service.rb +1 -1
  48. data/app/services/hyrax/collection_types/create_service.rb +4 -0
  49. data/app/services/hyrax/collections/migration_service.rb +25 -2
  50. data/app/services/hyrax/collections/nested_collection_persistence_service.rb +8 -3
  51. data/app/services/hyrax/collections/nested_collection_query_service.rb +3 -3
  52. data/app/services/hyrax/default_middleware_stack.rb +3 -3
  53. data/app/services/hyrax/multiple_membership_checker.rb +4 -2
  54. data/app/views/catalog/_index_header_list_collection.html.erb +1 -1
  55. data/app/views/catalog/_search_form.html.erb +0 -4
  56. data/app/views/hyrax/admin/admin_sets/_show_actions.html.erb +27 -0
  57. data/app/views/hyrax/admin/admin_sets/show.html.erb +1 -25
  58. data/app/views/hyrax/admin/collection_types/_form.html.erb +17 -6
  59. data/app/views/hyrax/admin/collection_types/_form_appearance.html.erb +5 -0
  60. data/app/views/hyrax/admin/collection_types/_form_participant_table.html.erb +1 -1
  61. data/app/views/hyrax/admin/collection_types/_form_participants.html.erb +56 -52
  62. data/app/views/hyrax/admin/collection_types/edit.html.erb +9 -7
  63. data/app/views/hyrax/admin/collection_types/index.html.erb +1 -1
  64. data/app/views/hyrax/base/_attribute_rows.html.erb +15 -14
  65. data/app/views/hyrax/base/_form.html.erb +1 -0
  66. data/app/views/hyrax/base/_form_collections_error.html.erb +1 -0
  67. data/app/views/hyrax/base/_items.html.erb +3 -2
  68. data/app/views/hyrax/base/_metadata.html.erb +5 -7
  69. data/app/views/hyrax/base/_relationships.html.erb +3 -5
  70. data/app/views/hyrax/base/_relationships_parent_row.html.erb +4 -5
  71. data/app/views/hyrax/base/_relationships_parent_rows.html.erb +2 -1
  72. data/app/views/hyrax/base/_show_actions.html.erb +11 -1
  73. data/app/views/hyrax/batch_edits/edit.html.erb +57 -17
  74. data/app/views/hyrax/collections/_list_collections.html.erb +1 -1
  75. data/app/views/hyrax/collections/show.html.erb +1 -1
  76. data/app/views/hyrax/content_blocks/_form.html.erb +8 -7
  77. data/app/views/hyrax/dashboard/_index_partials/_current_proxy_rights.html.erb +17 -0
  78. data/app/views/hyrax/dashboard/collections/_collection_title.html.erb +1 -3
  79. data/app/views/hyrax/dashboard/collections/_default_group.html.erb +30 -0
  80. data/app/views/hyrax/dashboard/collections/_form_branding.html.erb +2 -2
  81. data/app/views/hyrax/dashboard/collections/_form_for_select_collection.html.erb +1 -1
  82. data/app/views/hyrax/dashboard/collections/_form_share.html.erb +2 -2
  83. data/app/views/hyrax/dashboard/collections/_list_collections.html.erb +13 -2
  84. data/app/views/hyrax/dashboard/show_user.html.erb +10 -9
  85. data/app/views/hyrax/my/collections/_list_collections.html.erb +10 -3
  86. data/app/views/hyrax/my/collections/_modal_add_subcollection.html.erb +1 -1
  87. data/app/views/hyrax/my/collections/_modal_add_to_collection.html.erb +1 -1
  88. data/app/views/hyrax/my/collections/_modal_delete_collections_deny.html.erb +14 -0
  89. data/app/views/hyrax/my/collections/index.html.erb +1 -0
  90. data/app/views/shared/_nav_safety_modal.html.erb +12 -0
  91. data/config/features.rb +4 -0
  92. data/config/initializers/samvera-nesting_indexer_initializer.rb +1 -0
  93. data/config/locales/hyrax.de.yml +26 -11
  94. data/config/locales/hyrax.en.yml +21 -6
  95. data/config/locales/hyrax.es.yml +17 -2
  96. data/config/locales/hyrax.fr.yml +17 -2
  97. data/config/locales/hyrax.it.yml +17 -2
  98. data/config/locales/hyrax.pt-BR.yml +17 -2
  99. data/config/locales/hyrax.zh.yml +17 -2
  100. data/config/locales/simple_form.en.yml +6 -27
  101. data/hyrax.gemspec +2 -2
  102. data/lib/generators/hyrax/assets_generator.rb +4 -0
  103. data/lib/generators/hyrax/install_generator.rb +10 -0
  104. data/lib/generators/hyrax/templates/app/assets/images/unauthorized.png +0 -0
  105. data/lib/generators/hyrax/templates/config/locales/hyrax.en.yml +6 -5
  106. data/lib/generators/hyrax/templates/config/tinymce.yml +12 -7
  107. data/lib/generators/hyrax/templates/db/migrate/20180406202557_add_badge_color_to_collection_types.rb.erb +5 -0
  108. data/lib/hyrax/configuration.rb +1 -1
  109. data/lib/hyrax/version.rb +1 -1
  110. data/spec/actors/hyrax/actors/collections_membership_actor_spec.rb +24 -0
  111. data/spec/actors/hyrax/actors/create_with_remote_files_actor_spec.rb +19 -1
  112. data/spec/actors/hyrax/actors/default_admin_set_actor_spec.rb +41 -8
  113. data/spec/actors/hyrax/actors/file_set_actor_spec.rb +4 -12
  114. data/spec/actors/hyrax/actors/generic_work_actor_spec.rb +3 -7
  115. data/spec/controllers/hyrax/admin/strategies_controller_spec.rb +13 -2
  116. data/spec/controllers/hyrax/batch_edits_controller_spec.rb +83 -8
  117. data/spec/controllers/hyrax/dashboard/collections_controller_spec.rb +3 -0
  118. data/spec/controllers/hyrax/downloads_controller_spec.rb +26 -5
  119. data/spec/controllers/hyrax/file_sets_controller_spec.rb +3 -6
  120. data/spec/controllers/hyrax/generic_works_controller_json_spec.rb +4 -4
  121. data/spec/controllers/hyrax/generic_works_controller_spec.rb +3 -23
  122. data/spec/controllers/hyrax/transfers_controller_spec.rb +1 -1
  123. data/spec/factories/admin_sets_lw.rb +215 -0
  124. data/spec/factories/collections.rb +10 -10
  125. data/spec/factory_tests/adminsets_factory_spec.rb +132 -0
  126. data/spec/factory_tests/collections_factory_spec.rb +3 -3
  127. data/spec/features/batch_create_spec.rb +5 -8
  128. data/spec/features/batch_edit_spec.rb +49 -2
  129. data/spec/features/collection_multi_membership_spec.rb +29 -14
  130. data/spec/features/collection_type_spec.rb +9 -2
  131. data/spec/features/create_work_admin_spec.rb +1 -1
  132. data/spec/features/create_work_spec.rb +1 -1
  133. data/spec/features/dashboard/collection_spec.rb +16 -12
  134. data/spec/features/edit_content_block_admin_spec.rb +29 -12
  135. data/spec/features/embargo_spec.rb +55 -0
  136. data/spec/features/proxy_spec.rb +3 -1
  137. data/spec/features/work_show_spec.rb +20 -4
  138. data/spec/forms/hyrax/forms/admin/collection_type_form_spec.rb +1 -0
  139. data/spec/indexers/hyrax/repository_reindexer_spec.rb +1 -1
  140. data/spec/jobs/attach_files_to_work_job_spec.rb +15 -3
  141. data/spec/jobs/batch_create_job_spec.rb +6 -6
  142. data/spec/jobs/create_work_job_spec.rb +1 -1
  143. data/spec/models/admin_set_spec.rb +10 -8
  144. data/spec/models/collection_spec.rb +1 -1
  145. data/spec/models/concerns/hyrax/collection_nesting_spec.rb +6 -3
  146. data/spec/models/flipflop_spec.rb +8 -0
  147. data/spec/models/hyrax/work_behavior_spec.rb +1 -1
  148. data/spec/presenters/hyrax/admin_set_presenter_spec.rb +70 -0
  149. data/spec/presenters/hyrax/collection_presenter_spec.rb +66 -0
  150. data/spec/renderers/hyrax/renderers/attribute_renderer_spec.rb +19 -0
  151. data/spec/services/hyrax/adapters/nesting_index_adapter_spec.rb +31 -21
  152. data/spec/services/hyrax/collection_types/create_service_spec.rb +7 -4
  153. data/spec/services/hyrax/collections/migration_service_spec.rb +204 -17
  154. data/spec/services/hyrax/collections/nested_collection_persistence_service_spec.rb +1 -1
  155. data/spec/services/hyrax/collections/permissions_create_service_spec.rb +1 -1
  156. data/spec/services/hyrax/collections/permissions_service_spec.rb +4 -0
  157. data/spec/services/hyrax/default_middleware_stack_spec.rb +1 -1
  158. data/spec/services/hyrax/multiple_membership_checker_spec.rb +4 -4
  159. data/spec/services/hyrax/workflow/grant_edit_to_depositor_spec.rb +1 -1
  160. data/spec/services/hyrax/workflow/grant_read_to_depositor_spec.rb +1 -1
  161. data/spec/services/hyrax/workflow/revoke_edit_from_depositor_spec.rb +1 -1
  162. data/spec/spec_helper.rb +35 -2
  163. data/spec/support/features/batch_edit_actions.rb +1 -1
  164. data/spec/support/selectors.rb +15 -0
  165. data/spec/views/hyrax/admin/admin_sets/_show_actions.html.erb_spec.rb +66 -0
  166. data/spec/views/hyrax/admin/admin_sets/show.html.erb_spec.rb +5 -34
  167. data/spec/views/hyrax/admin/collection_types/_form.html.erb_spec.rb +3 -1
  168. data/spec/views/hyrax/admin/collection_types/_form_appearance.html.erb_spec.rb +22 -0
  169. data/spec/views/hyrax/admin/collection_types/_form_participants.html.erb_spec.rb +11 -3
  170. data/spec/views/hyrax/base/_items.html.erb_spec.rb +46 -0
  171. data/spec/views/hyrax/base/_relationships.html.erb_spec.rb +1 -1
  172. data/spec/views/hyrax/base/_show_actions.html.erb_spec.rb +4 -2
  173. data/spec/views/hyrax/dashboard/collections/_default_group.html.erb_spec.rb +43 -0
  174. data/spec/views/hyrax/dashboard/collections/_list_collections.html.erb_spec.rb +51 -0
  175. data/spec/views/hyrax/dashboard/collections/show.html.erb_spec.rb +1 -0
  176. data/spec/views/hyrax/dashboard/show_user_spec.rb +5 -2
  177. data/spec/views/hyrax/my/collections/_list_collections.html.erb_spec.rb +2 -0
  178. data/template.rb +1 -1
  179. metadata +30 -13
  180. data/app/views/hyrax/content_blocks/_modal_content_block.html.erb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: be1e8653f1cbe02d0084c4e9d5ad3ae86452030c
4
- data.tar.gz: 3195a5f77e3b68b97ad86b0d441340037f2c5617
3
+ metadata.gz: 7758e362b3ead3c21f48bf9cf6763565ea0304fb
4
+ data.tar.gz: 3788d88af39d4ab5b81a17bb94bf90d39e2852fa
5
5
  SHA512:
6
- metadata.gz: eca96b7e93e799c6540995b8607f0c696350e125030475c7e15ac567f1c048ed05a851f656b04c2a72c258e26d1c95cf08e52f79f87c1446269e055d626e8de4
7
- data.tar.gz: 155ac39bca91ca478e0856b27a6487ff9976e7dddee5b22a4ed6b3323f109e3dc1310bdd82fb529a542cb9603926d571df8e23b65f73c9a14323025ed502d159
6
+ metadata.gz: 4c1e3c4e80619330f7e5dd1d624a38296618d2dc40e371485d70039e52068af1dbb9593cea59a5aac0a6951b392b82800426d530a13825523517637ce9cac7e7
7
+ data.tar.gz: 02d3518cccfd2c631cda0e27b1dfa200bbbec739c184d211da2d9ec215f663d19f13623009bd5bc96fef967152244729acb9def82aa67d320543d44c12907636
@@ -22,15 +22,15 @@ mutual respect and reasoned argument.
22
22
  Community members work together to promote a respectful and safe
23
23
  community. In the event that someone’s conduct is causing offence or
24
24
  distress, Samvera has a detailed
25
- [Anti-Harassment Policy and Protocol](https://wiki.duraspace.org/display/hydra/Anti-Harassment+Policy)
25
+ [Anti-Harassment Policy and Protocol](https://wiki.duraspace.org/display/samvera/Anti-Harassment+Policy)
26
26
  which can be applied to address the problem. The first step in dealing
27
27
  with any serious misconduct is to contact a local meeting organizer,
28
28
  the
29
- [Samvera community helpers](https://wiki.duraspace.org/display/hydra/Hydra+Community+Helpers)
30
- ([email](mailto:helpers@projecthydra.org)), a community member you
29
+ [Samvera community helpers](https://wiki.duraspace.org/display/samvera/Samvera+Community+Helpers)
30
+ ([email](mailto:helpers@samvera.org)), a community member you
31
31
  trust, or the
32
- [Samvera Steering Group](https://wiki.duraspace.org/display/hydra/Samvera+Steering+Group+membership)
32
+ [Samvera Steering Group](https://wiki.duraspace.org/display/samvera/Samvera+Steering+Group+membership)
33
33
  immediately; at Samvera events, these people can be identified by
34
34
  distinctive name badges. The
35
- [Policy and Protocol](https://wiki.duraspace.org/display/hydra/Anti-Harassment+Policy)
35
+ [Policy and Protocol](https://wiki.duraspace.org/display/samvera/Anti-Harassment+Policy)
36
36
  should be consulted for fuller details.
@@ -18,7 +18,7 @@ All code contributors must have an Individual Contributor License Agreement
18
18
  an institution, the institution must have a Corporate Contributor License
19
19
  Agreement (cCLA) on file.
20
20
 
21
- https://wiki.duraspace.org/display/hydra/Hydra+Project+Intellectual+Property+Licensing+and+Ownership
21
+ https://wiki.duraspace.org/display/samvera/Samvera+Community+Intellectual+Property+Licensing+and+Ownership
22
22
 
23
23
  You should also add yourself to the `CONTRIBUTORS.md` file in the root of the project.
24
24
 
@@ -164,6 +164,6 @@ If you are uncertain, bring other contributors into the conversation by assignin
164
164
  # Additional Resources
165
165
 
166
166
  * [General GitHub documentation](http://help.github.com/)
167
- * [GitHub pull request documentation](http://help.github.com/send-pull-requests/)
167
+ * [GitHub pull request documentation](https://help.github.com/articles/about-pull-requests/)
168
168
  * [Pro Git](http://git-scm.com/book) is both a free and excellent book about Git.
169
169
  * [A Git Config for Contributing](http://ndlib.github.io/practices/my-typical-per-project-git-config/)
data/.rubocop.yml CHANGED
@@ -24,6 +24,7 @@ Metrics/BlockLength:
24
24
  - 'app/models/concerns/hyrax/content_block_behavior.rb'
25
25
  - 'app/services/hyrax/workflow/workflow_schema.rb'
26
26
  - 'config/initializers/simple_form.rb'
27
+ - 'config/features.rb'
27
28
  - 'config/routes.rb'
28
29
  - 'lib/generators/hyrax/templates/catalog_controller.rb'
29
30
  - 'lib/generators/hyrax/templates/config/initializers/simple_form_bootstrap.rb'
data/.rubocop_fixme.yml CHANGED
@@ -6,6 +6,7 @@ Metrics/ClassLength:
6
6
  Exclude:
7
7
  - 'app/controllers/hyrax/dashboard/collections_controller.rb'
8
8
  - 'app/controllers/hyrax/admin/admin_sets_controller.rb'
9
+ - 'app/controllers/hyrax/batch_edits_controller.rb'
9
10
  - 'app/controllers/hyrax/downloads_controller.rb'
10
11
  - 'app/controllers/hyrax/file_sets_controller.rb'
11
12
  - 'app/forms/hyrax/forms/permission_template_form.rb'
@@ -83,6 +84,7 @@ RSpec/ExampleLength:
83
84
  - 'spec/actors/hyrax/actors/file_set_actor_spec.rb'
84
85
  - 'spec/actors/hyrax/actors/generic_work_actor_spec.rb'
85
86
  - 'spec/controllers/hyrax/api/items_controller_spec.rb'
87
+ - 'spec/controllers/hyrax/batch_edits_controller_spec.rb'
86
88
  - 'spec/controllers/hyrax/batch_uploads_controller_spec.rb'
87
89
  - 'spec/controllers/hyrax/file_sets_controller_spec.rb'
88
90
  - 'spec/controllers/hyrax/generic_works_controller_spec.rb'
data/Gemfile CHANGED
@@ -5,6 +5,7 @@ gemspec
5
5
 
6
6
  group :development, :test do
7
7
  gem 'coveralls', require: false
8
+ gem 'i18n-tasks'
8
9
  gem 'pry' unless ENV['CI']
9
10
  gem 'pry-byebug' unless ENV['CI']
10
11
  gem "simplecov", require: false
data/README.md CHANGED
@@ -63,7 +63,7 @@ The Samvera community is here to help. Please see our [support guide](./.github/
63
63
  # Getting started
64
64
 
65
65
  This document contains instructions specific to setting up an app with __Hyrax
66
- v2.1.0.beta2__. If you are looking for instructions on installing a different
66
+ v2.1.0.rc1__. If you are looking for instructions on installing a different
67
67
  version, be sure to select the appropriate branch or tag from the drop-down
68
68
  menu above.
69
69
 
@@ -162,7 +162,7 @@ NOTE: The steps need to be done in order to create a new Hyrax based app.
162
162
  Generate a new Rails application using the template.
163
163
 
164
164
  ```
165
- rails _5.0.6_ new my_app -m https://raw.githubusercontent.com/samvera/hyrax/v2.1.0.beta2/template.rb
165
+ rails _5.0.6_ new my_app -m https://raw.githubusercontent.com/samvera/hyrax/v2.1.0.rc1/template.rb
166
166
  ```
167
167
 
168
168
  Generating a new Rails application using Hyrax's template above takes cares of a number of steps for you, including:
@@ -172,6 +172,7 @@ Generating a new Rails application using Hyrax's template above takes cares of a
172
172
  * Running Hyrax's install generator, to add a number of files that Hyrax requires within your Rails app, including e.g. database migrations
173
173
  * Loading all of Hyrax's database migrations into your application's database
174
174
  * Loading Hyrax's default workflows into your application's database
175
+ * Create default collection types (e.g. Admin Set, User Collection)
175
176
 
176
177
  ## Start servers
177
178
 
@@ -79,6 +79,7 @@ module Hyrax
79
79
  Deprecation.warn(self, ':member_of_collection_ids has been deprecated for removal in Hyrax 3.0. ' \
80
80
  'use :member_of_collections_attributes instead.')
81
81
 
82
+ collection_ids = [] if collection_ids.empty?
82
83
  other_collections = collections_without_edit_access(env)
83
84
 
84
85
  collections = ::Collection.find(collection_ids)
@@ -102,6 +103,8 @@ module Hyrax
102
103
  # along side the FileSets on the show page
103
104
  def add(env, id)
104
105
  collection = Collection.find(id)
106
+ collection.reindex_extent = Hyrax::Adapters::NestingIndexAdapter::LIMITED_REINDEX
107
+
105
108
  return unless env.current_ability.can?(:deposit, collection)
106
109
  env.curation_concern.member_of_collections << collection
107
110
  end
@@ -55,14 +55,15 @@ module Hyrax
55
55
  Rails.logger.error "User #{env.user.user_key} attempted to ingest file from url #{file_info[:url]}, which doesn't pass validation"
56
56
  return false
57
57
  end
58
- create_file_from_url(env, uri, file_info[:file_name])
58
+ auth_header = file_info.fetch(:auth_header, {})
59
+ create_file_from_url(env, uri, file_info[:file_name], auth_header)
59
60
  end
60
61
  true
61
62
  end
62
63
 
63
64
  # Generic utility for creating FileSet from a URL
64
65
  # Used in to import files using URLs from a file picker like browse_everything
65
- def create_file_from_url(env, uri, file_name)
66
+ def create_file_from_url(env, uri, file_name, auth_header = {})
66
67
  ::FileSet.new(import_url: uri.to_s, label: file_name) do |fs|
67
68
  actor = Hyrax::Actors::FileSetActor.new(fs, env.user)
68
69
  actor.create_metadata(visibility: env.curation_concern.visibility)
@@ -73,7 +74,7 @@ module Hyrax
73
74
  file_path = CGI.unescape(uri.path)
74
75
  IngestLocalFileJob.perform_later(fs, file_path, env.user)
75
76
  else
76
- ImportUrlJob.perform_later(fs, operation_for(user: actor.user))
77
+ ImportUrlJob.perform_later(fs, operation_for(user: actor.user), auth_header)
77
78
  end
78
79
  end
79
80
  end
@@ -10,24 +10,27 @@ module Hyrax
10
10
  # @param [Hyrax::Actors::Environment] env
11
11
  # @return [Boolean] true if create was successful
12
12
  def create(env)
13
- ensure_admin_set_attribute!(env.attributes)
13
+ ensure_admin_set_attribute!(env)
14
14
  next_actor.create(env)
15
15
  end
16
16
 
17
17
  # @param [Hyrax::Actors::Environment] env
18
18
  # @return [Boolean] true if update was successful
19
19
  def update(env)
20
- ensure_admin_set_attribute!(env.attributes)
20
+ ensure_admin_set_attribute!(env)
21
21
  next_actor.update(env)
22
22
  end
23
23
 
24
24
  private
25
25
 
26
- def ensure_admin_set_attribute!(attributes)
27
- if attributes[:admin_set_id].present?
28
- ensure_permission_template!(admin_set_id: attributes[:admin_set_id])
26
+ def ensure_admin_set_attribute!(env)
27
+ if env.attributes[:admin_set_id].present?
28
+ ensure_permission_template!(admin_set_id: env.attributes[:admin_set_id])
29
+ elsif env.curation_concern.admin_set_id.present?
30
+ env.attributes[:admin_set_id] = env.curation_concern.admin_set_id
31
+ ensure_permission_template!(admin_set_id: env.attributes[:admin_set_id])
29
32
  else
30
- attributes[:admin_set_id] = default_admin_set_id
33
+ env.attributes[:admin_set_id] = default_admin_set_id
31
34
  end
32
35
  end
33
36
 
@@ -54,6 +54,7 @@
54
54
  //= require hyrax/browse_everything
55
55
  //= require hyrax/search
56
56
  //= require hyrax/content_blocks
57
+ //= require hyrax/nav_safety
57
58
  //= require hyrax/ga_events
58
59
  //= require hyrax/select_submit
59
60
  //= require hyrax/tabs
@@ -86,7 +87,9 @@
86
87
  //= require hyrax/relationships
87
88
  //= require hyrax/select_work_type
88
89
  //= require hyrax/collections
90
+ //= require hyrax/collections_v2
89
91
  //= require hyrax/collection_types
92
+ //= require hyrax/collections_utils
90
93
  //= require hyrax/select_collection_type
91
94
  //= require hydra-editor/hydra-editor
92
95
  //= require nestable
@@ -13,8 +13,10 @@ Hyrax = {
13
13
  this.datatable();
14
14
  this.adminSetEditor();
15
15
  this.collectionEditor();
16
+ this.collectionsV2();
16
17
  this.collectionTypes();
17
18
  this.collectionTypeEditor();
19
+ this.collectionUtilities();
18
20
  this.adminStatisticsGraphs();
19
21
  this.tinyMCE();
20
22
  this.sortAndPerPage();
@@ -49,12 +51,24 @@ Hyrax = {
49
51
  var controls = new CollectionControls($('#collection_permissions'));
50
52
  },
51
53
 
54
+ // Collections v2 - collections related js should (over time) be moved here
55
+ // from 'collections.js' to take advantage of shared modules
56
+ collectionsV2: function() {
57
+ var CollectionsV2 = require('hyrax/collections_v2');
58
+ new CollectionsV2();
59
+ },
60
+
52
61
  // Collection types
53
62
  collectionTypes: function() {
54
63
  var CollectionTypes = require('hyrax/collection_types');
55
64
  var collection_types = new CollectionTypes($('.collection-types-wrapper'))
56
65
  },
57
66
 
67
+ collectionUtilities: function() {
68
+ var CollectionUtilities = require('hyrax/collections_utils');
69
+ new CollectionUtilities();
70
+ },
71
+
58
72
  // Pretty graphs on the dashboard page
59
73
  adminStatisticsGraphs: function() {
60
74
  var AdminGraphs = require('hyrax/admin/graphs');
@@ -159,7 +159,8 @@ function batch_edit_init () {
159
159
  setTimeout(ajaxManager.runNow(), 100);
160
160
  }
161
161
 
162
- $("#permissions_save").click(runSave);
162
+ $("#permissions_visibility_save").click(runSave);
163
+ $("#permissions_roles_save").click(runSave);
163
164
  $(".field-save").click(runSave);
164
165
  }
165
166
 
@@ -1,65 +1,126 @@
1
- export default class CollectionTypes {
1
+ import CollectionUtilities from 'hyrax/collections_utils';
2
2
 
3
+ export default class CollectionTypes {
3
4
  constructor(element) {
5
+ this.collectionUtilities = new CollectionUtilities();
6
+
4
7
  if (element.length > 0) {
5
- this.handleCollapseToggle()
6
- this.handleDelete()
8
+ this.handleCollapseToggle();
9
+ this.handleDelete();
10
+
11
+ // Edit Collection Type
12
+ this.setupAddParticipantsHandler();
13
+ this.participantsAddButtonDisabler();
7
14
  }
8
15
  }
9
16
 
17
+ setupAddParticipantsHandler() {
18
+ const { addParticipants } = this.collectionUtilities;
19
+ const wrapEl = '.form-add-participants-wrapper';
20
+ const url = '/admin/collection_type_participants?locale=en';
21
+
22
+ $('#participants')
23
+ .find('.add-participants-form input[type="submit"]')
24
+ .on(
25
+ 'click',
26
+ {
27
+ wrapEl,
28
+ // This is a callback (seems odd here because just passing in a string value),
29
+ // because other urls need to be calculated with an id or other param only truly
30
+ // known from when we know the clicked element's place in DOM.
31
+ urlFn: e => url
32
+ },
33
+ addParticipants.handleAddParticipants.bind(addParticipants)
34
+ );
35
+ }
36
+
10
37
  handleCollapseToggle() {
11
- let $collapseHeader = $('a.collapse-header')
12
- let $collapseHeaderSpan = $('a.collapse-header').find('span')
38
+ let $collapseHeader = $('a.collapse-header');
39
+ let $collapseHeaderSpan = $('a.collapse-header').find('span');
40
+ const collapseText = $collapseHeader.data('collapseText');
41
+ const expandText = $collapseHeader.data('expandText');
13
42
 
14
43
  // Toggle show/hide of collapsible content on bootstrap toggle events
15
44
  $('#collapseAbout').on('show.bs.collapse', () => {
16
- $collapseHeader.addClass('open')
17
- $collapseHeaderSpan.html('Less')
18
- })
45
+ $collapseHeader.addClass('open');
46
+ $collapseHeaderSpan.html(collapseText);
47
+ });
19
48
  $('#collapseAbout').on('hide.bs.collapse', () => {
20
- $collapseHeader.removeClass('open')
21
- $collapseHeaderSpan.html('More')
22
- })
49
+ $collapseHeader.removeClass('open');
50
+ $collapseHeaderSpan.html(expandText);
51
+ });
23
52
  }
24
53
 
25
54
  handleDelete() {
26
- let trData = null
55
+ let trData = null;
27
56
 
28
57
  // Click delete collections type button in the table row
29
- $('.delete-collection-type').on('click', (event) => {
30
- let dataset = event.target.dataset
31
- let collectionType = JSON.parse(dataset.collectionType) || null
32
- let hasCollections = dataset.hasCollections === 'true'
58
+ $('.delete-collection-type').on('click', event => {
59
+ let dataset = event.target.dataset;
60
+ let collectionType = JSON.parse(dataset.collectionType) || null;
61
+ let hasCollections = dataset.hasCollections === 'true';
33
62
  this.handleDelete_event_target = event.target;
34
63
  this.collectionType_id = collectionType.id;
35
64
 
36
65
  if (hasCollections === true) {
37
- $('.view-collections-of-this-type').attr('href',dataset.collectionTypeIndex)
38
- $('#deleteDenyModal').modal()
66
+ $('.view-collections-of-this-type').attr(
67
+ 'href',
68
+ dataset.collectionTypeIndex
69
+ );
70
+ $('#deleteDenyModal').modal();
39
71
  } else {
40
- $('#deleteModal').modal()
72
+ $('#deleteModal').modal();
41
73
  }
42
- })
74
+ });
43
75
 
44
76
  // Confirm delete collection type
45
- $('.confirm-delete-collection-type').on('click', (event) => {
46
- event.preventDefault();
47
- $.ajax({
48
- url: window.location.pathname + '/' + this.collectionType_id,
49
- type: 'DELETE',
50
- done: function(e) {
51
- $(this.handleDelete_event_target).parent('td').parent('tr').remove();
52
- let defaultButton = $(event.target).parent('div').find('.btn-default');
53
- defaultButton.trigger( 'click' );
54
- }
55
- })
56
- })
77
+ $('.confirm-delete-collection-type').on('click', event => {
78
+ event.preventDefault();
79
+ $.ajax({
80
+ url: window.location.pathname + '/' + this.collectionType_id,
81
+ type: 'DELETE',
82
+ done: function(e) {
83
+ $(this.handleDelete_event_target)
84
+ .parent('td')
85
+ .parent('tr')
86
+ .remove();
87
+ let defaultButton = $(event.target)
88
+ .parent('div')
89
+ .find('.btn-default');
90
+ defaultButton.trigger('click');
91
+ }
92
+ });
93
+ });
57
94
 
58
95
  // Confirm delete collection type
59
- $('.view-collections-of-this-type').on('click', (event) => {
60
- $('#deleteDenyModal').modal('hide')
61
- })
62
-
96
+ $('.view-collections-of-this-type').on('click', event => {
97
+ $('#deleteDenyModal').modal('hide');
98
+ });
63
99
  }
64
100
 
101
+ /**
102
+ * Set up enabling/disabling "Add" button for adding groups and/or users in
103
+ * Edit Collection Type > Participants tab
104
+ * @return {void}
105
+ */
106
+ participantsAddButtonDisabler() {
107
+ const { addParticipantsInputValidator } = this.collectionUtilities;
108
+ // Selector for the button to enable/disable
109
+ const buttonSelector = '.add-participants-form input[type="submit"]';
110
+ const inputsWrapper = '.form-add-participants-wrapper';
111
+
112
+ $('#participants')
113
+ .find(inputsWrapper)
114
+ .on(
115
+ 'change',
116
+ // custom data we need passed into the event handler
117
+ {
118
+ buttonSelector,
119
+ inputsWrapper
120
+ },
121
+ addParticipantsInputValidator.handleWrapperContentsChange.bind(
122
+ addParticipantsInputValidator
123
+ )
124
+ );
125
+ }
65
126
  }
@@ -240,27 +240,29 @@ Blacklight.onLoad(function () {
240
240
  };
241
241
  var $deleteWordingTarget = $('#selected-collections-delete-modal .pluralized');
242
242
 
243
- tableRows.each(function(i, row) {
244
- checkbox = $(row).find('td:first input[type=checkbox]');
245
- if (typeof checkbox[0] !== "undefined") {
246
- if (checkbox[0].checked) {
247
- numRowsSelected++;
248
- }
249
- }
250
- });
243
+ var canDeleteAll = true;
244
+ var selectedInputs = $('#documents table.collections-list-table tbody tr')
245
+ // Get all inputs in the table
246
+ .find('td:first input[type=checkbox]')
247
+ // Filter to those that are checked
248
+ .filter(function(i, checkbox) { return checkbox.checked; });
249
+
250
+ var cannotDeleteInputs = selectedInputs.filter(function(i, checkbox) { return checkbox.dataset.hasaccess === "false"; });
251
+ if(cannotDeleteInputs.length > 0) {
252
+ // TODO: Can we pass data to this modal to be more specific about which ones they cannot delete?
253
+ $('#collections-to-delete-deny-modal').modal('show');
254
+ return;
255
+ }
251
256
 
252
- if (numRowsSelected > 0) {
257
+ if (selectedInputs.length > 0) {
253
258
  // Collections are selected
254
259
  // Update singular / plural text in delete modal
255
- if (numRowsSelected > 1) {
260
+ if (selectedInputs.length > 1) {
256
261
  $deleteWordingTarget.text(deleteWording.plural);
257
262
  } else {
258
263
  $deleteWordingTarget.text(deleteWording.singular);
259
264
  }
260
265
  $('#selected-collections-delete-modal').modal('show');
261
- } else {
262
- // No collections are selected
263
- $('#collections-to-delete-deny-modal').modal('show');
264
266
  }
265
267
  });
266
268
 
@@ -317,40 +319,4 @@ Blacklight.onLoad(function () {
317
319
  $('#add-subcollection-modal-' + $(this).data('presenterId')).modal('show');
318
320
  });
319
321
 
320
-
321
- // Edit Collection: Sharing tab: Add Sharing section click handlers
322
- /*
323
- Notes:
324
- This is a workaround for a scoping issue with 'simple_form' and nested forms in the
325
- 'Edit Collections' partials. All tabs were wrapped in a 'simple_form'. Nested forms, for example inside a tab partial,
326
- have behaved erratically, so the pattern has been to remove nested form instances for relatively non-complex forms
327
- and replace with AJAX requests. For this instance of Add Sharing > Add user and Add group, seem more complex in how
328
- the form is built from '@form.permission_template', so since it's not working, but the form is already built, this
329
- code listens for a click event on the nested form submit button, prevents Default submit behavior, and manually makes
330
- the form post.
331
- */
332
- $('#participants').find('.edit-collection-add-sharing-button').on('click', function(e) {
333
- e.preventDefault();
334
- var $wrapEl = $(e.target).parents('.form-add-sharing-wrapper');
335
- if ($wrapEl.length === 0) {
336
- return;
337
- }
338
- var serialized = $wrapEl.find(':input').serialize(),
339
- url = '/dashboard/collections/' + $wrapEl.data('id') + '/permission_template?locale=en';
340
-
341
- if (serialized.length === 0) {
342
- return;
343
- }
344
-
345
- $.ajax({
346
- type: 'POST',
347
- url: url,
348
- data: serialized
349
- }).done(function(response) {
350
- // Success handler here, possibly show alert success if page didn't reload?
351
- }).fail(function(err) {
352
- console.error(err);
353
- });
354
-
355
- });
356
322
  });