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
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Generic helper utilities for processing Collection and Collection Type editing
3
+ * @type {Class}
4
+ */
5
+ export default class CollectionUtilities {
6
+ constructor() {
7
+ this.addParticipantsInputValidator = new AddParticipantsInputValidator();
8
+ this.addParticipants = new AddParticipants();
9
+ }
10
+ }
11
+
12
+ class AddParticipants {
13
+ /**
14
+ * Notes:
15
+ This is a workaround for a scoping issue with 'simple_form' and nested forms in the
16
+ 'Edit Collections' partials. All tabs were wrapped in a 'simple_form'. Nested forms, for example inside a tab partial,
17
+ have behaved erratically, so the pattern has been to remove nested form instances for relatively non-complex forms
18
+ and replace with AJAX requests. For this instance of Add Sharing > Add user and Add group, seem more complex in how
19
+ the form is built from '@form.permission_template', so since it's not working, but the form is already built, this
20
+ code listens for a click event on the nested form submit button, prevents Default submit behavior, and manually makes
21
+ the form post.
22
+ * @param {jQuery event} e jQuery event object
23
+ * @return {void}
24
+ */
25
+ handleAddParticipants(e) {
26
+ e.preventDefault();
27
+ const { wrapEl, urlFn } = e.data;
28
+ // This is a callback, because some POST urls might depend on dynamic id variables
29
+ // Send the e event object back and construct any values needed
30
+ const url = urlFn(e);
31
+ const $wrapEl = $(e.target).parents(wrapEl);
32
+
33
+ if ($wrapEl.length === 0) {
34
+ return;
35
+ }
36
+ // Get all input values to send in the upcoming POST
37
+ const serialized = $wrapEl.find(':input').serialize();
38
+ if (serialized.length === 0) {
39
+ return;
40
+ }
41
+
42
+ $.ajax({
43
+ type: 'POST',
44
+ url: url,
45
+ data: serialized
46
+ })
47
+ .done(function(response) {
48
+ // Success handler here, possibly show alert success if page didn't reload?
49
+ })
50
+ .fail(function(err) {
51
+ console.error(err);
52
+ });
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Handle enabling/disabling "Add" button for adding a user or group when editing a Collection
58
+ * or Collection Type. Determines whether editable inputs have been filled out or not, then sets button state.
59
+ * @type: {Class}
60
+ */
61
+ class AddParticipantsInputValidator {
62
+ /**
63
+ * Check that regular inputs have a non-empty input value
64
+ * @param {jQuery object} $inputs Inputs which are editable by the user
65
+ * @return {boolean} Do all inputs passed in have values?
66
+ */
67
+ checkInputsPass($inputs) {
68
+ let inputsPass = true;
69
+
70
+ $inputs.each(function(i) {
71
+ if ($(this).val() === '') {
72
+ inputsPass = false;
73
+ return false;
74
+ }
75
+ });
76
+ return inputsPass;
77
+ }
78
+
79
+ /**
80
+ * Checks that the select2 input (if it exists) has a non-default value
81
+ * @param {object} context jQuery $(this) context object
82
+ * @return {boolean} Whether a select2 input has a non-default value, or doesn't exist
83
+ */
84
+ checkSelect2Pass(context) {
85
+ const $select2 = context.find('.select2-container');
86
+ // No select2 element present, so it passes by default
87
+ if ($select2.length === 0) {
88
+ return true;
89
+ }
90
+ const $placeholder = $select2.siblings('[placeholder]');
91
+ const placeholderValue = $placeholder.attr('placeholder');
92
+ const chosenValue = $select2.find('.select2-chosen').text();
93
+
94
+ return placeholderValue !== chosenValue;
95
+ }
96
+
97
+ /**
98
+ * Handle disabled button state for the 'Add' button for Collections or
99
+ * Collection Type > Edit > Sharing or Participants tab Add Sharing or Add Partipants section
100
+ * @param {object} event jQuery event object
101
+ * @param {string} event.data.buttonSelector jQuery selector string for row's button
102
+ * @param {string} event.data.inputsWrapper jQuery selector string for the wrapping selector class which holds inputs
103
+ * @return {void}
104
+ */
105
+ handleWrapperContentsChange(event) {
106
+ const { buttonSelector, inputsWrapper } = event.data;
107
+ const $inputsWrapper = $(event.target).parents(inputsWrapper);
108
+ // Get regular inputs for the row
109
+ const $inputs = $inputsWrapper.find('.form-control');
110
+ const $addButton = $inputsWrapper.find(buttonSelector);
111
+ const inputsPass = this.checkInputsPass($inputs);
112
+ const select2Pass = this.checkSelect2Pass($inputsWrapper);
113
+
114
+ $addButton.prop('disabled', !(inputsPass && select2Pass));
115
+ }
116
+ }
@@ -0,0 +1,57 @@
1
+ import CollectionUtilities from 'hyrax/collections_utils';
2
+
3
+ export default class CollectionsV2 {
4
+ constructor() {
5
+ this.collectionUtilities = new CollectionUtilities();
6
+ this.setupAddSharingHandler();
7
+ this.sharingAddButtonDisabler();
8
+ }
9
+
10
+ /**
11
+ * Set up the handler for adding groups or users via AJAX POSTS at the following location:
12
+ * Collection > Edit > Sharing tab; or
13
+ * Collection Types > Edit > Participants tab
14
+ * @return {void}
15
+ */
16
+ setupAddSharingHandler() {
17
+ const { addParticipants } = this.collectionUtilities;
18
+ const wrapEl = '.form-add-sharing-wrapper';
19
+
20
+ $('#participants')
21
+ .find('.edit-collection-add-sharing-button')
22
+ .on('click', {
23
+ wrapEl,
24
+ urlFn: (e) => {
25
+ const $wrapEl = $(e.target).parents(wrapEl);
26
+ return '/dashboard/collections/' + $wrapEl.data('id') + '/permission_template?locale=en';
27
+ }
28
+ },
29
+ addParticipants.handleAddParticipants.bind(addParticipants));
30
+ }
31
+
32
+ /**
33
+ * Set up enabling/disabling "Add" button for adding groups and/or users in
34
+ * Edit Collection > Sharing tab
35
+ * @return {void}
36
+ */
37
+ sharingAddButtonDisabler() {
38
+ const { addParticipantsInputValidator } = this.collectionUtilities;
39
+ // Selector for the button to enable/disable
40
+ const buttonSelector = '.edit-collection-add-sharing-button';
41
+ const inputsWrapper = '.form-add-sharing-wrapper';
42
+
43
+ $('#participants')
44
+ .find(inputsWrapper)
45
+ .on(
46
+ 'change',
47
+ // custom data we need passed into the event handler
48
+ {
49
+ buttonSelector: '.edit-collection-add-sharing-button',
50
+ inputsWrapper
51
+ },
52
+ addParticipantsInputValidator.handleWrapperContentsChange.bind(
53
+ addParticipantsInputValidator
54
+ )
55
+ );
56
+ }
57
+ }
@@ -9,16 +9,4 @@ Blacklight.onLoad(function() {
9
9
  $this.parent().hide();
10
10
  $($this.data('target')).show();
11
11
  });
12
-
13
- $('.show-confirm').on('click', function(evt) {
14
- evt.preventDefault();
15
- evt.stopPropagation();
16
- $('#change-tab-content-block').modal('show');
17
- });
18
-
19
- $('#change-tab-btn').on('click', function(evt) {
20
- evt.preventDefault();
21
- $('#change-tab-content-block').modal('hide');
22
- $('.nav-tabs a[href="' + location.hash + '"]').tab('show');
23
- });
24
- });
12
+ });
@@ -0,0 +1,41 @@
1
+ // To enable nav safety on a form:
2
+ // - Render the shared/nav-safety partial on the page.
3
+ // - Add the nav-safety-confirm class to the tab anchor element.
4
+ // - Add the nav-safety class to the form element.
5
+
6
+ Blacklight.onLoad(function() {
7
+ $('.nav-safety-confirm').on('click', function(evt) {
8
+ var dirtyData = $('#nav-safety-modal[dirtyData=true]');
9
+ if (dirtyData.length > 0) {
10
+ evt.preventDefault();
11
+ evt.stopPropagation();
12
+ $('#nav-safety-modal').modal('show');
13
+ }
14
+ });
15
+
16
+ $('#nav-safety-dismiss').on('click', function(evt) {
17
+ // evt.preventDefault();
18
+ nav_safety_off();
19
+ // $('#nav-safety-change-tab').modal('hide');
20
+ });
21
+
22
+ $('form.nav-safety').on('change', function(evt) {
23
+ nav_safety_on();
24
+ });
25
+ $('form.nav-safety').on('reset', function(evt) {
26
+ nav_safety_off();
27
+ });
28
+ });
29
+
30
+ function nav_safety_on() {
31
+ $('#nav-safety-modal')[0].setAttribute('dirtyData', true);
32
+ }
33
+
34
+ function nav_safety_off() {
35
+ $('#nav-safety-modal')[0].setAttribute('dirtyData', false);
36
+ }
37
+
38
+ function tinymce_nav_safety(editor) {editor.on('Change', function (e) {
39
+ $(e.target.targetElm).parents('form.nav-safety').change();
40
+ });
41
+ }
@@ -2,4 +2,7 @@
2
2
  // See https://github.com/rails/jquery-ujs/issues/456
3
3
  $(document).on('turbolinks:load', function() {
4
4
  $.rails.refreshCSRFTokens();
5
+ // Explicitly set flag to false to force loading of UV
6
+ // See https://github.com/samvera/hyrax/issues/2906
7
+ window.embedScriptIncluded = false;
5
8
  });
@@ -9,8 +9,8 @@
9
9
  .collection-types-wrapper {
10
10
  @media (min-width: 900px) {
11
11
  .collection-types-table {
12
- th:last-child,
13
- td:last-child {
12
+ td:last-child,
13
+ th:last-child {
14
14
  width: 20%;
15
15
  }
16
16
  }
@@ -48,6 +48,50 @@
48
48
  }
49
49
  }
50
50
 
51
+ // Edit Collection Types - Participants Tab
52
+ .collection-types-edit-participants-tab {
53
+ .section-participants {
54
+ padding-bottom: 40px;
55
+
56
+ .form-inline {
57
+ label {
58
+ padding-right: 5px;
59
+ text-align: right;
60
+ width: 100px;
61
+ }
62
+
63
+ .select2-container,
64
+ input,
65
+ select {
66
+ width: 200px;
67
+ }
68
+
69
+ .btn {
70
+ width: 75px;
71
+ }
72
+ }
73
+ }
74
+
75
+ .section-current-participants {
76
+ legend {
77
+ margin-bottom: 0;
78
+ }
79
+
80
+ .share-status {
81
+ td,
82
+ th {
83
+ width: 40%;
84
+ }
85
+
86
+ th:last-of-type,
87
+ td:last-of-type {
88
+ text-align: center;
89
+ width: 20%;
90
+ }
91
+ }
92
+ }
93
+ }
94
+
51
95
  .collection-type-share-applies-to {
52
96
  margin-left: 3em;
53
97
  }
@@ -35,16 +35,13 @@ ul.tabular {
35
35
  // text-align: center;
36
36
  }
37
37
 
38
- .table.table-borderless {
39
- th,
40
- td {
41
- border: 0;
42
- padding: 8px;
43
- vertical-align: top;
38
+ .work-show {
39
+ dt,
40
+ dd {
41
+ padding: 2px;
44
42
  }
45
-
46
- th {
47
- text-align: right;
43
+ dd {
44
+ margin-left: 6px;
48
45
  }
49
46
  }
50
47
 
@@ -159,6 +159,8 @@ body.dashboard {
159
159
  line-height: 1.42857143;
160
160
  color: #333;
161
161
  white-space: nowrap;
162
+ overflow: hidden;
163
+ text-overflow: ellipsis;
162
164
  }
163
165
 
164
166
  .facet-count {
@@ -44,6 +44,10 @@ $gutter-width: $grid-gutter-width/2;
44
44
  padding-left: 52px;
45
45
  }
46
46
  }
47
+
48
+ .fa {
49
+ width: 15px;
50
+ }
47
51
  }
48
52
 
49
53
  .sidebar-toggle {
@@ -56,7 +56,6 @@ module Hyrax
56
56
  else
57
57
  respond_to do |wants|
58
58
  wants.html do
59
- flash[:error] = curation_concern.errors.messages[:collections].to_sentence
60
59
  build_form
61
60
  render 'new', status: :unprocessable_entity
62
61
  end
@@ -68,6 +67,8 @@ module Hyrax
68
67
  # Finds a solr document matching the id and sets @presenter
69
68
  # @raise CanCan::AccessDenied if the document is not found or the user doesn't have access to it.
70
69
  def show
70
+ @user_collections = user_collections
71
+
71
72
  respond_to do |wants|
72
73
  wants.html { presenter && parent_presenter }
73
74
  wants.json do
@@ -99,7 +100,6 @@ module Hyrax
99
100
  else
100
101
  respond_to do |wants|
101
102
  wants.html do
102
- flash[:error] = curation_concern.errors.messages[:collections].to_sentence
103
103
  build_form
104
104
  render 'edit', status: :unprocessable_entity
105
105
  end
@@ -132,6 +132,14 @@ module Hyrax
132
132
 
133
133
  private
134
134
 
135
+ def user_collections
136
+ collections_service.search_results(:deposit) if presenter.editor?
137
+ end
138
+
139
+ def collections_service
140
+ Hyrax::CollectionsService.new(self)
141
+ end
142
+
135
143
  def admin_set_id_for_new
136
144
  # admin_set_id is required on the client, otherwise simple_form renders a blank option.
137
145
  # however it isn't a required field for someone to submit via json.
@@ -20,8 +20,9 @@ module Hyrax
20
20
  self.admin_set_create_service = AdminSetCreateService
21
21
 
22
22
  def show
23
+ add_breadcrumb I18n.t('hyrax.controls.home'), hyrax.root_path
23
24
  add_breadcrumb t(:'hyrax.dashboard.title'), hyrax.dashboard_path
24
- add_breadcrumb t(:'hyrax.dashboard.my.collections'), hyrax.admin_admin_sets_path
25
+ add_breadcrumb t(:'hyrax.dashboard.my.collections'), hyrax.my_collections_path
25
26
  add_breadcrumb @admin_set.title.first
26
27
  super
27
28
  end
@@ -113,14 +114,6 @@ module Hyrax
113
114
  @form ||= form_class.new(@admin_set, current_ability, repository)
114
115
  end
115
116
 
116
- # Overrides the parent implementation so that the returned search builder
117
- # searches for edit access
118
- # Instantiates the search builder that builds a query for a single item
119
- # this is useful in the show view.
120
- def single_item_search_builder
121
- single_item_search_builder_class.new(self, :edit).with(params.except(:q, :page))
122
- end
123
-
124
117
  def action_breadcrumb
125
118
  case action_name
126
119
  when 'edit', 'update'
@@ -101,7 +101,7 @@ module Hyrax
101
101
 
102
102
  def collection_type_params
103
103
  params.require(:collection_type).permit(:title, :description, :nestable, :brandable, :discoverable, :sharable, :share_applies_to_new_works,
104
- :allow_multiple_membership, :require_membership, :assigns_workflow, :assigns_visibility)
104
+ :allow_multiple_membership, :require_membership, :assigns_workflow, :assigns_visibility, :badge_color)
105
105
  end
106
106
  end
107
107
  end
@@ -46,9 +46,16 @@ module Hyrax
46
46
  end
47
47
 
48
48
  def update_document(obj)
49
- obj.attributes = work_params
49
+ interpret_visiblity_params(obj)
50
+ obj.attributes = work_params(admin_set_id: obj.admin_set_id).except(*visibility_params)
50
51
  obj.date_modified = Time.current.ctime
51
- obj.visibility = params[:visibility]
52
+
53
+ if params[:visibility]
54
+ Deprecation.warn(self, "visibility is not submitted by the Hyrax UI and is deprecated " \
55
+ "for removal in Hyrax 3.0. Please use " \
56
+ "#{form_class.model_name.param_key}[visibility] instead.")
57
+ obj.visibility = params[:visibility]
58
+ end
52
59
 
53
60
  InheritPermissionsJob.perform_now(obj)
54
61
  VisibilityCopyJob.perform_now(obj)
@@ -94,9 +101,28 @@ module Hyrax
94
101
  form_class.terms
95
102
  end
96
103
 
97
- def work_params
104
+ def work_params(extra_params = {})
98
105
  work_params = params[form_class.model_name.param_key] || ActionController::Parameters.new
99
- form_class.model_attributes(work_params)
106
+ form_class.model_attributes(work_params.merge(extra_params))
107
+ end
108
+
109
+ def interpret_visiblity_params(obj)
110
+ stack = ActionDispatch::MiddlewareStack.new.tap do |middleware|
111
+ middleware.use Hyrax::Actors::InterpretVisibilityActor
112
+ end
113
+ env = Hyrax::Actors::Environment.new(obj, current_ability, work_params(admin_set_id: obj.admin_set_id))
114
+ last_actor = Hyrax::Actors::Terminator.new
115
+ stack.build(last_actor).update(env)
116
+ end
117
+
118
+ def visibility_params
119
+ ['visibility',
120
+ 'lease_expiration_date',
121
+ 'visibility_during_lease',
122
+ 'visibility_after_lease',
123
+ 'embargo_release_date',
124
+ 'visibility_during_embargo',
125
+ 'visibility_after_embargo']
100
126
  end
101
127
 
102
128
  def redirect_to_return_controller