sufia 7.2.0 → 7.3.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (259) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +2 -0
  3. data/.rubocop.yml +3 -0
  4. data/.rubocop_todo.yml +1 -2
  5. data/.travis.yml +0 -1
  6. data/Gemfile +2 -1
  7. data/README.md +23 -106
  8. data/app/actors/sufia/apply_permission_template_actor.rb +19 -0
  9. data/app/actors/sufia/create_with_remote_files_actor.rb +2 -2
  10. data/app/actors/sufia/default_admin_set_actor.rb +42 -0
  11. data/app/actors/sufia/interpret_visibility_actor.rb +115 -0
  12. data/app/assets/images/collection.png +0 -0
  13. data/app/assets/javascripts/sufia.js +6 -0
  14. data/app/assets/javascripts/sufia/admin/admin_set/participants.es6 +9 -0
  15. data/app/assets/javascripts/sufia/admin/admin_set/visibility.es6 +134 -0
  16. data/app/assets/javascripts/sufia/admin/admin_set_controls.es6 +11 -0
  17. data/app/assets/javascripts/sufia/app.js +27 -5
  18. data/app/assets/javascripts/sufia/autocomplete.es6 +15 -0
  19. data/app/assets/javascripts/sufia/autocomplete/work.es6 +29 -0
  20. data/app/assets/javascripts/sufia/dashboard_actions.js +2 -4
  21. data/app/assets/javascripts/sufia/save_work/save_work_control.es6 +14 -2
  22. data/app/assets/javascripts/sufia/save_work/uploaded_files.es6 +7 -2
  23. data/app/assets/javascripts/sufia/save_work/visibility_component.es6 +245 -4
  24. data/app/assets/javascripts/sufia/select_work_type.es6 +38 -0
  25. data/app/assets/javascripts/sufia/workflow_actions_affix.js +14 -0
  26. data/app/assets/stylesheets/sufia/_dashboard.scss +50 -29
  27. data/app/assets/stylesheets/sufia/_footer.scss +30 -0
  28. data/app/assets/stylesheets/sufia/_header.scss +3 -4
  29. data/app/assets/stylesheets/sufia/_home-page.scss +10 -8
  30. data/app/assets/stylesheets/sufia/_select_work_type.scss +43 -0
  31. data/app/assets/stylesheets/sufia/_sufia.scss +4 -1
  32. data/app/assets/stylesheets/sufia/_variables.scss +3 -0
  33. data/app/assets/stylesheets/sufia/admin.scss +66 -169
  34. data/app/assets/stylesheets/sufia/blacklight_gallery.scss +17 -0
  35. data/app/authorities/qa/authorities/find_works.rb +15 -0
  36. data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +2 -1
  37. data/app/controllers/concerns/sufia/batch_uploads_controller_behavior.rb +26 -13
  38. data/app/controllers/concerns/sufia/collections_controller_behavior.rb +25 -0
  39. data/app/controllers/concerns/sufia/controller.rb +8 -0
  40. data/app/controllers/concerns/sufia/deny_access_override_behavior.rb +1 -1
  41. data/app/controllers/concerns/sufia/file_sets_controller_behavior.rb +5 -14
  42. data/app/controllers/concerns/sufia/homepage_controller_behavior.rb +2 -0
  43. data/app/controllers/concerns/sufia/users_controller_behavior.rb +18 -7
  44. data/app/controllers/concerns/sufia/works_controller_behavior.rb +13 -10
  45. data/app/controllers/my/collections_controller.rb +5 -0
  46. data/app/controllers/my/shares_controller.rb +5 -0
  47. data/app/controllers/my/works_controller.rb +5 -0
  48. data/app/controllers/stats_controller.rb +1 -1
  49. data/app/controllers/sufia/admin/admin_sets_controller.rb +20 -2
  50. data/app/controllers/sufia/admin/permission_template_accesses_controller.rb +15 -0
  51. data/app/controllers/sufia/admin/permission_templates_controller.rb +29 -0
  52. data/app/controllers/sufia/admin_controller.rb +2 -0
  53. data/app/controllers/sufia/trophies_controller.rb +0 -2
  54. data/app/forms/sufia/forms/admin_set_form.rb +19 -0
  55. data/app/forms/sufia/forms/batch_edit_form.rb +16 -6
  56. data/app/forms/sufia/forms/batch_upload_form.rb +3 -2
  57. data/app/forms/sufia/forms/permission_template_form.rb +115 -0
  58. data/app/forms/sufia/forms/work_form.rb +6 -0
  59. data/app/helpers/batch_edits_helper.rb +1 -1
  60. data/app/helpers/sufia/citations_behavior.rb +0 -5
  61. data/app/helpers/sufia/citations_behaviors/formatters.rb +0 -1
  62. data/app/helpers/sufia/sufia_helper_behavior.rb +38 -6
  63. data/app/indexers/sufia/collection_indexer.rb +6 -0
  64. data/app/jobs/batch_create_job.rb +7 -15
  65. data/app/models/batch_upload_item.rb +2 -0
  66. data/app/models/concerns/sufia/ability.rb +12 -1
  67. data/app/models/sufia/permission_template.rb +102 -0
  68. data/app/models/sufia/permission_template_access.rb +18 -0
  69. data/app/presenters/sufia/admin_set_presenter.rb +1 -1
  70. data/app/presenters/sufia/model_icon.rb +7 -0
  71. data/app/presenters/sufia/select_type_list_presenter.rb +37 -0
  72. data/app/presenters/sufia/select_type_presenter.rb +35 -0
  73. data/app/presenters/sufia/work_show_presenter.rb +0 -2
  74. data/app/search_builders/collection_search_builder.rb +0 -2
  75. data/app/search_builders/sufia/admin_set_search_builder.rb +24 -0
  76. data/app/search_builders/sufia/catalog_search_builder.rb +10 -4
  77. data/app/search_builders/sufia/find_works_search_builder.rb +44 -0
  78. data/app/search_builders/sufia/my_search_builder_behavior.rb +0 -4
  79. data/app/search_builders/sufia/my_works_search_builder.rb +1 -1
  80. data/app/services/sufia/actor_factory.rb +6 -2
  81. data/app/services/sufia/admin_set_create_service.rb +22 -0
  82. data/app/services/sufia/admin_set_service.rb +46 -16
  83. data/app/services/sufia/collection_thumbnail_path_service.rb +10 -0
  84. data/app/services/sufia/workflow/abstract_notification.rb +39 -0
  85. data/app/services/sufia/workflow/changes_required_notification.rb +22 -0
  86. data/app/services/sufia/workflow/complete_notification.rb +22 -0
  87. data/app/services/sufia/workflow/pending_review_notification.rb +21 -0
  88. data/app/services/sufia/workflow/workflow_by_admin_set_strategy.rb +15 -0
  89. data/app/views/_masthead.html.erb +4 -4
  90. data/app/views/_toolbar.html.erb +31 -9
  91. data/app/views/_user_util_links.html.erb +7 -7
  92. data/app/views/batch_edits/edit.html.erb +24 -12
  93. data/app/views/catalog/_thumbnail_list_collection.html.erb +1 -1
  94. data/app/views/collections/_form.html.erb +2 -2
  95. data/app/views/collections/_media_display.html.erb +1 -1
  96. data/app/views/curation_concerns/base/_find_work_widget.html.erb +16 -0
  97. data/app/views/curation_concerns/base/_form.html.erb +6 -0
  98. data/app/views/curation_concerns/base/_form_child_work_relationships.html.erb +1 -1
  99. data/app/views/curation_concerns/base/_form_metadata.html.erb +1 -1
  100. data/app/views/curation_concerns/base/_form_parent_work_relationships.html.erb +43 -0
  101. data/app/views/curation_concerns/base/_form_progress.html.erb +7 -4
  102. data/app/views/curation_concerns/base/_form_relationships.html.erb +6 -6
  103. data/app/views/curation_concerns/base/_form_share.html.erb +1 -2
  104. data/app/views/curation_concerns/base/_guts4form.html.erb +1 -1
  105. data/app/views/curation_concerns/base/_social_media.html.erb +1 -1
  106. data/app/views/curation_concerns/base/_workflow_actions_widget.erb +3 -0
  107. data/app/views/curation_concerns/base/edit.html.erb +1 -1
  108. data/app/views/curation_concerns/base/new.html.erb +1 -1
  109. data/app/views/curation_concerns/base/show.html.erb +4 -1
  110. data/app/views/curation_concerns/file_sets/_show_actions.html.erb +0 -3
  111. data/app/views/dashboard/_create_work_action.html.erb +20 -0
  112. data/app/views/dashboard/_index_partials/_heading_actions.html.erb +9 -22
  113. data/app/views/layouts/admin.html.erb +8 -68
  114. data/app/views/layouts/curation_concerns/1_column.html.erb +4 -31
  115. data/app/views/layouts/homepage.html.erb +15 -45
  116. data/app/views/layouts/sufia-dashboard.html.erb +1 -36
  117. data/app/views/layouts/sufia.html.erb +49 -0
  118. data/app/views/my/_document_list.html.erb +1 -1
  119. data/app/views/my/_facet_limit.html.erb +2 -2
  120. data/app/views/my/_index_partials/_default_group.html.erb +10 -10
  121. data/app/views/my/_index_partials/_list_collections.html.erb +1 -1
  122. data/app/views/my/_sort_and_per_page.html.erb +8 -8
  123. data/app/views/records/edit_fields/_rights.html.erb +0 -1
  124. data/app/views/shared/_footer.html.erb +1 -1
  125. data/app/views/shared/_select_work_type_modal.html.erb +34 -0
  126. data/app/views/sufia/admin/_collections.html.erb +31 -0
  127. data/app/views/sufia/admin/_sidebar.html.erb +35 -23
  128. data/app/views/sufia/admin/admin_sets/_form.html.erb +38 -15
  129. data/app/views/sufia/admin/admin_sets/_form_metadata.html.erb +2 -0
  130. data/app/views/sufia/admin/admin_sets/_form_participant_table.html.erb +21 -0
  131. data/app/views/sufia/admin/admin_sets/_form_participants.html.erb +68 -0
  132. data/app/views/sufia/admin/admin_sets/_form_visibility.html.erb +58 -0
  133. data/app/views/sufia/admin/admin_sets/index.html.erb +29 -33
  134. data/app/views/sufia/admin/admin_sets/show.html.erb +3 -0
  135. data/app/views/sufia/admin/show.html.erb +22 -19
  136. data/app/views/sufia/batch_uploads/_form.html.erb +2 -1
  137. data/app/views/sufia/homepage/index.html.erb +11 -3
  138. data/app/views/sufia/uploads/_js_templates.html.erb +15 -11
  139. data/app/views/users/_user_row.html.erb +10 -0
  140. data/app/views/users/index.html.erb +1 -12
  141. data/config/features.rb +2 -0
  142. data/config/locales/sufia.en.yml +122 -37
  143. data/config/routes.rb +4 -1
  144. data/db/migrate/20161021175854_create_permission_template.rb +11 -0
  145. data/db/migrate/20161021180154_create_permission_template_access.rb +11 -0
  146. data/db/migrate/20161116222307_add_release_to_permission_templates.rb +6 -0
  147. data/lib/generators/sufia/install_generator.rb +12 -3
  148. data/lib/generators/sufia/templates/catalog_controller.rb +3 -13
  149. data/lib/generators/sufia/templates/workflow.json.erb +65 -0
  150. data/lib/generators/sufia/upgrade700_generator.rb +1 -1
  151. data/lib/generators/sufia/work/templates/locale.en.yml.erb +37 -0
  152. data/lib/generators/sufia/{work_generator.rb → work/work_generator.rb} +25 -5
  153. data/lib/sufia.rb +0 -1
  154. data/lib/sufia/engine.rb +7 -0
  155. data/lib/sufia/move_all_works_to_admin_set.rb +8 -0
  156. data/lib/sufia/version.rb +1 -1
  157. data/lib/tasks/migrate.rake +8 -0
  158. data/spec/actors/sufia/apply_permission_template_actor_spec.rb +64 -0
  159. data/spec/actors/sufia/create_with_remote_files_actor_spec.rb +8 -0
  160. data/spec/actors/sufia/default_admin_set_actor_spec.rb +43 -0
  161. data/spec/actors/sufia/interpret_visibility_actor_spec.rb +266 -0
  162. data/spec/authorities/qa/authorities/find_works_spec.rb +55 -0
  163. data/spec/controllers/batch_edits_controller_spec.rb +1 -6
  164. data/spec/controllers/citations_controller_spec.rb +49 -10
  165. data/spec/controllers/collections_controller_spec.rb +39 -0
  166. data/spec/controllers/curation_concerns/generic_works_controller_spec.rb +22 -1
  167. data/spec/controllers/dashboard_controller_spec.rb +0 -8
  168. data/spec/controllers/depositors_controller_spec.rb +2 -2
  169. data/spec/controllers/downloads_controller_spec.rb +2 -2
  170. data/spec/controllers/my/collections_controller_spec.rb +5 -0
  171. data/spec/controllers/my/shares_controller_spec.rb +5 -0
  172. data/spec/controllers/my/works_controller_spec.rb +5 -0
  173. data/spec/controllers/stats_controller_spec.rb +1 -1
  174. data/spec/controllers/sufia/admin/admin_sets_controller_spec.rb +33 -5
  175. data/spec/controllers/sufia/admin/permission_template_accesses_controller_spec.rb +36 -0
  176. data/spec/controllers/sufia/admin/permission_templates_controller_spec.rb +46 -0
  177. data/spec/controllers/sufia/admin_controller_spec.rb +6 -0
  178. data/spec/controllers/sufia/batch_uploads_controller_spec.rb +40 -42
  179. data/spec/controllers/sufia/homepage_controller_spec.rb +14 -0
  180. data/spec/controllers/sufia/trophies_controller_spec.rb +17 -4
  181. data/spec/controllers/users_controller_spec.rb +13 -4
  182. data/spec/factories/permission_template_accesses.rb +5 -0
  183. data/spec/factories/permission_templates.rb +5 -0
  184. data/spec/factories/sipity_entities.rb +7 -0
  185. data/spec/factories/users.rb +4 -0
  186. data/spec/factories/workflow_states.rb +6 -0
  187. data/spec/factories/workflows.rb +5 -0
  188. data/spec/features/admin_admin_set_spec.rb +6 -4
  189. data/spec/features/batch_edit_spec.rb +0 -1
  190. data/spec/features/collection_spec.rb +4 -4
  191. data/spec/features/edit_work_spec.rb +1 -0
  192. data/spec/features/work_show_spec.rb +10 -0
  193. data/spec/forms/sufia/forms/admin_set_form_spec.rb +2 -1
  194. data/spec/forms/sufia/forms/batch_edit_form_spec.rb +30 -0
  195. data/spec/forms/sufia/forms/permission_template_form_spec.rb +196 -0
  196. data/spec/forms/sufia/forms/work_form_spec.rb +35 -1
  197. data/spec/helpers/batch_edits_helper_spec.rb +4 -4
  198. data/spec/helpers/blacklight_helper_spec.rb +1 -1
  199. data/spec/helpers/sufia_helper_spec.rb +39 -7
  200. data/spec/indexers/sufia/collection_indexer_spec.rb +12 -0
  201. data/spec/javascripts/autocomplete_spec.js.coffee +46 -6
  202. data/spec/javascripts/visibility_component_spec.js +491 -0
  203. data/spec/jobs/batch_create_job_spec.rb +27 -28
  204. data/spec/lib/sufia/arkivo_spec.rb +14 -0
  205. data/spec/lib/sufia/controlled_vocabulary/importer/downloader_spec.rb +31 -0
  206. data/spec/lib/sufia/move_all_works_to_admin_set_spec.rb +13 -0
  207. data/spec/lib/sufia/zotero_spec.rb +8 -0
  208. data/spec/models/sufia/ability_spec.rb +54 -14
  209. data/spec/models/sufia/permission_template_spec.rb +144 -0
  210. data/spec/models/sufia/user_usage_stats_spec.rb +8 -2
  211. data/spec/presenters/sufia/homepage_presenter_spec.rb +1 -1
  212. data/spec/presenters/sufia/select_type_list_presenter_spec.rb +26 -0
  213. data/spec/presenters/sufia/select_type_presenter_spec.rb +21 -0
  214. data/spec/search_builder/sufia/admin_set_search_builder_spec.rb +57 -0
  215. data/spec/search_builder/sufia/catalog_search_builder_spec.rb +40 -14
  216. data/spec/search_builder/sufia/find_works_search_builder_spec.rb +60 -0
  217. data/spec/search_builder/sufia/my_shares_search_builder_spec.rb +4 -1
  218. data/spec/search_builder/sufia/single_admin_set_search_builder_spec.rb +5 -1
  219. data/spec/services/sufia/actor_factory_spec.rb +13 -5
  220. data/spec/services/sufia/admin_set_create_service_spec.rb +27 -0
  221. data/spec/services/sufia/admin_set_service_spec.rb +104 -17
  222. data/spec/services/sufia/workflow/changes_required_notification_spec.rb +32 -0
  223. data/spec/services/sufia/workflow/complete_notification_spec.rb +32 -0
  224. data/spec/services/sufia/workflow/pending_review_notification_spec.rb +31 -0
  225. data/spec/services/sufia/workflow/workflow_by_admin_set_strategy_spec.rb +22 -0
  226. data/spec/spec_helper.rb +24 -5
  227. data/spec/support/proxies.rb +1 -1
  228. data/spec/test_app_templates/lib/generators/test_app_generator.rb +4 -0
  229. data/spec/views/_toolbar.html.erb_spec.rb +23 -6
  230. data/spec/views/batch_edits/edit.html.erb_spec.rb +7 -1
  231. data/spec/views/collections/_form_for_select_collection.html.erb_spec.rb +1 -3
  232. data/spec/views/curation_concerns/base/_find_work_widget.html.erb_spec.rb +22 -0
  233. data/spec/views/curation_concerns/base/_form.html.erb_spec.rb +7 -0
  234. data/spec/views/curation_concerns/base/_form_child_work_relationships.html.erb_spec.rb +1 -0
  235. data/spec/views/curation_concerns/base/_form_parent_work_relationships.html.erb_spec.rb +114 -0
  236. data/spec/views/curation_concerns/base/_form_progress.html.erb_spec.rb +3 -2
  237. data/spec/views/curation_concerns/base/_social_media.html.erb_spec.rb +1 -1
  238. data/spec/views/curation_concerns/base/edit.html.erb_spec.rb +1 -1
  239. data/spec/views/curation_concerns/base/show.html.erb_spec.rb +5 -1
  240. data/spec/views/curation_concerns/file_sets/_show_actions.html.erb_spec.rb +2 -2
  241. data/spec/views/dashboard/create_work_action.html.erb_spec.rb +27 -0
  242. data/spec/views/dashboard/index_spec.rb +7 -2
  243. data/spec/views/my/_sort_and_per_page.html.erb_spec.rb +33 -0
  244. data/spec/views/shared/select_work_type_modal.html.erb_spec.rb +32 -0
  245. data/spec/views/sufia/admin/admin_sets/_form.html.erb_spec.rb +18 -0
  246. data/spec/views/sufia/admin/admin_sets/_form_participants.html.erb_spec.rb +13 -0
  247. data/spec/views/sufia/admin/admin_sets/_form_visibility.html.erb_spec.rb +23 -0
  248. data/spec/views/sufia/batch_uploads/_form.html.erb_spec.rb +2 -12
  249. data/spec/views/sufia/homepage/index.html.erb_spec.rb +29 -8
  250. data/sufia.gemspec +5 -6
  251. data/tasks/sufia-dev.rake +6 -10
  252. data/template.rb +15 -0
  253. metadata +140 -28
  254. data/app/assets/stylesheets/sufia/widgets.css +0 -288
  255. data/app/helpers/sufia/citations_behaviors/formatters/endnote_formatter.rb +0 -49
  256. data/app/models/domain_term.rb +0 -4
  257. data/app/views/citations/file.html.erb +0 -0
  258. data/app/views/records/_rights_modal.html.erb +0 -1
  259. data/db/migrate/20160328222160_create_local_authorities.rb +0 -50
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+ module Sufia
3
+ class CollectionThumbnailPathService < CurationConcerns::ThumbnailPathService
4
+ class << self
5
+ def default_image
6
+ ActionController::Base.helpers.image_path 'collection.png'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,39 @@
1
+ module Sufia
2
+ module Workflow
3
+ class AbstractNotification
4
+ def self.send_notification(entity:, comment:, user:, recipients:)
5
+ new(entity, comment, user, recipients).call
6
+ end
7
+
8
+ attr_reader :work_id, :title, :comment, :user, :recipients
9
+
10
+ def initialize(entity, comment, user, recipients)
11
+ @work_id = entity.proxy_for_global_id.sub(/.*\//, '')
12
+ @title = entity.proxy_for.title.first
13
+ @comment = comment.respond_to?(:comment) ? comment.comment.to_s : ''
14
+ @recipients = recipients
15
+ @user = user
16
+ end
17
+
18
+ def call
19
+ user.send_message(users_to_notify.uniq, message, subject)
20
+ end
21
+
22
+ protected
23
+
24
+ def subject
25
+ raise NotImplementedError, "Implement #subject in a child class"
26
+ end
27
+
28
+ def message
29
+ "#{title} (#{work_id}) was advanced in the workflow by #{user.user_key} and is awaiting approval #{comment}"
30
+ end
31
+
32
+ private
33
+
34
+ def users_to_notify
35
+ recipients.fetch('to', []) + recipients.fetch('cc', [])
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,22 @@
1
+ module Sufia
2
+ module Workflow
3
+ class ChangesRequiredNotification < AbstractNotification
4
+ protected
5
+
6
+ def subject
7
+ 'Your deposit requires changes'
8
+ end
9
+
10
+ def message
11
+ "#{title} (#{work_id}) requires additional changes before approval.\n\n '#{comment}'"
12
+ end
13
+
14
+ private
15
+
16
+ def users_to_notify
17
+ user_key = ActiveFedora::Base.find(work_id).depositor
18
+ super << ::User.find_by(email: user_key)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ module Sufia
2
+ module Workflow
3
+ class CompleteNotification < AbstractNotification
4
+ protected
5
+
6
+ def subject
7
+ 'Deposit has been approved'
8
+ end
9
+
10
+ def message
11
+ "#{title} (#{work_id}) was approved by #{user.user_key}. #{comment}"
12
+ end
13
+
14
+ private
15
+
16
+ def users_to_notify
17
+ user_key = ActiveFedora::Base.find(work_id).depositor
18
+ super << ::User.find_by(email: user_key)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ module Sufia
2
+ module Workflow
3
+ class PendingReviewNotification < AbstractNotification
4
+ protected
5
+
6
+ def subject
7
+ 'Deposit needs review'
8
+ end
9
+
10
+ def message
11
+ "#{title} (#{work_id}) was deposited by #{user.user_key} and is awaiting approval #{comment}"
12
+ end
13
+
14
+ private
15
+
16
+ def users_to_notify
17
+ super << user
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ module Sufia
2
+ module Workflow
3
+ class WorkflowByAdminSetStrategy
4
+ def initialize(_work, attributes)
5
+ @admin_set_id = attributes[:admin_set_id] if attributes[:admin_set_id].present?
6
+ end
7
+
8
+ # @return [String] The name of the workflow by admin_set to use
9
+ def workflow_name
10
+ return 'default' unless @admin_set_id
11
+ Sufia::PermissionTemplate.find_by!(admin_set_id: @admin_set_id).workflow_name
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,3 +1,4 @@
1
+ <%= render '/shared/select_work_type_modal' if create_work_presenter.many? %>
1
2
  <nav id="masthead" class="navbar navbar-inverse navbar-static-top" role="navigation">
2
3
  <div class="container-fluid">
3
4
  <!-- Brand and toggle get grouped for better mobile display -->
@@ -8,14 +9,13 @@
8
9
  <span class="icon-bar"></span>
9
10
  <span class="icon-bar"></span>
10
11
  </button>
11
- <%= render partial: '/logo' %>
12
+ <%= render '/logo' %>
12
13
  </div>
13
14
 
14
15
  <div class="collapse navbar-collapse" id="top-navbar-collapse">
15
- <%= render partial: '/toolbar' %>
16
+ <%= render '/toolbar' %>
16
17
 
17
- <%= render partial: '/user_util_links' %>
18
+ <%= render '/user_util_links' %>
18
19
  </div>
19
20
  </div>
20
21
  </nav>
21
-
@@ -22,18 +22,40 @@
22
22
  <% end %>
23
23
  <ul class="dropdown-menu">
24
24
  <li><%= link_to t("sufia.toolbar.works.my"), sufia.dashboard_works_path %></li>
25
-
26
- <% classification = CurationConcerns::QuickClassificationQuery.new(current_user) %>
27
- <% classification.each do |concern| %>
28
- <li><%= link_to(
29
- "#{t("sufia.toolbar.works.new")} #{concern.human_readable_type}",
30
- new_polymorphic_path([main_app, concern]),
31
- class: "item-option contextual-quick-classify #{dom_class(concern, 'new').gsub('_', '-')}",
25
+ <% if create_work_presenter.many? %>
26
+ <% # launch the type selector modal %>
27
+ <li>
28
+ <%= link_to(
29
+ t("sufia.toolbar.works.new"),
30
+ '#',
31
+ data: { behavior: "select-work", target: "#worktypes-to-create", 'create-type' => 'single' },
32
+ class: "item-option contextual-quick-classify",
33
+ role: 'menuitem'
34
+ ) %>
35
+ </li>
36
+ <li>
37
+ <%= link_to(
38
+ t("sufia.toolbar.works.batch"),
39
+ '#',
40
+ data: { behavior: "select-work", target: "#worktypes-to-create", 'create-type' => 'batch' },
41
+ class: "item-option contextual-quick-classify",
42
+ role: 'menuitem'
43
+ ) %>
44
+ </li>
45
+ <% else %>
46
+ <% # simple link to the first work type %>
47
+ <li>
48
+ <%= link_to(
49
+ t("sufia.toolbar.works.new"),
50
+ new_polymorphic_path([main_app, create_work_presenter.first_model]),
51
+ class: "item-option contextual-quick-classify",
32
52
  role: 'menuitem'
33
53
  ) %>
34
54
  </li>
55
+ <li><%= link_to t("sufia.toolbar.works.batch"),
56
+ sufia.new_batch_upload_path(payload_concern: create_work_presenter.first_model) %>
57
+ </li>
35
58
  <% end %>
36
- <li><%= link_to t("sufia.toolbar.works.batch"), sufia.new_batch_upload_path %></li>
37
59
  </ul>
38
60
  </li>
39
61
  <% end %>
@@ -41,7 +63,7 @@
41
63
  <% if can?(:create, Collection) %>
42
64
  <li class="dropdown">
43
65
  <%= link_to sufia.dashboard_collections_path, role: 'button', data: { toggle: 'dropdown' }, aria: { haspopup: true, expanded: false } do %>
44
- <span class="fa fa-cubes"></span> <%= t("sufia.toolbar.collections.menu") %> <span class="caret"></span>
66
+ <span class="<%= Sufia::ModelIcon.css_class_for(Collection) %>"></span> <%= t("sufia.toolbar.collections.menu") %> <span class="caret"></span>
45
67
  <% end %>
46
68
  <ul class="dropdown-menu">
47
69
  <li><%= link_to t("sufia.toolbar.collections.my"), sufia.dashboard_collections_path %></li>
@@ -2,29 +2,29 @@
2
2
  <% if user_signed_in? %>
3
3
  <li>
4
4
  <%= link_to sufia.notifications_path do %>
5
- Notifications
5
+ <%= t("sufia.toolbar.notifications") %>
6
6
  <%= render partial: 'users/notify_number' %>
7
7
  <% end %>
8
8
  </li>
9
9
  <li class="dropdown">
10
10
  <%= link_to sufia.profile_path(current_user), role: 'button', data: { toggle: 'dropdown' }, aria: { haspopup: true, expanded: false} do %>
11
- <span class="sr-only">View</span>
11
+ <span class="sr-only"><%= t("sufia.toolbar.profile.sr_action") %></span>
12
12
  <span class="hidden-xs">&nbsp;<%= current_user.name %></span>
13
- <span class="sr-only"> profile</span>
13
+ <span class="sr-only"> <%= t("sufia.toolbar.profile.sr_target") %></span>
14
14
  <span class="fa fa-user"></span>
15
15
  <span class="caret" ></span>
16
16
  <% end %>
17
17
  <ul class="dropdown-menu dropdown-menu-right" role="menu">
18
- <li><%= link_to 'View Profile', sufia.profile_path(current_user) %></li>
19
- <li><%= link_to 'Edit Profile', sufia.edit_profile_path(current_user) %></li>
18
+ <li><%= link_to t("sufia.toolbar.profile.view"), sufia.profile_path(current_user) %></li>
19
+ <li><%= link_to t("sufia.toolbar.profile.edit"), sufia.edit_profile_path(current_user) %></li>
20
20
  <li class="divider"></li>
21
- <li><%= link_to 'Logout', main_app.destroy_user_session_path %></li>
21
+ <li><%= link_to t("sufia.toolbar.profile.logout"), main_app.destroy_user_session_path %></li>
22
22
  </ul>
23
23
  </li><!-- /.btn-group -->
24
24
  <% else %>
25
25
  <li>
26
26
  <%= link_to main_app.new_user_session_path do %>
27
- <span class="glyphicon glyphicon-log-in" aria-hidden="true"></span> Login
27
+ <span class="glyphicon glyphicon-log-in" aria-hidden="true"></span > <%= t("sufia.toolbar.profile.login") %>
28
28
  <% end %>
29
29
  </li>
30
30
  <% end %>
@@ -34,8 +34,11 @@
34
34
  <%= hidden_field_tag('key', term.to_s) %>
35
35
  <%# TODO we don't need to show required %>
36
36
  <%= render_edit_field_partial(term, f: f) %>
37
+ <% @form.batch_document_ids.each do |batch_id| %>
38
+ <%= hidden_field_tag "batch_document_ids[]", batch_id %>
39
+ <% end %>
37
40
  <div>
38
- <%= f.submit "Save changes", class: 'btn btn-primary field-save updates-batches' , id: "#{term.to_s}_save" %>
41
+ <%= f.submit "Save changes", class: 'btn btn-primary field-save', id: "#{term.to_s}_save" %>
39
42
  <a class="btn btn-default" data-toggle="collapse" data-parent="#row_<%= term.to_s %>" href="#collapse_<%= term.to_s %>">Cancel </a>
40
43
  <div class="status fleft"></div>
41
44
  </div>
@@ -45,18 +48,27 @@
45
48
  <% end %>
46
49
  </div><!-- #descriptions_display -->
47
50
 
48
- <div id="permissions_display" class="tab-pane">
49
- <%= simple_form_for @form.model, url: batch_edits_path, method: :put, remote: true, html: { id: "form_permissions", class: "ajax-form"} do |f| %>
50
- <%= hidden_field_tag('update_type', 'update') %>
51
- <%= hidden_field_tag('key', 'permissions') %>
52
- <%= render "curation_concerns/file_sets/permission_form", f: f %>
53
- <div class="row">
54
- <%= f.submit "Save changes", class: 'btn btn-primary updates-batches', id: 'permissions_save' %>
51
+ <div id="permissions_display" class="tab-pane">
52
+ <%= simple_form_for @form.model,
53
+ url: batch_edits_path,
54
+ method: :put,
55
+ remote: true,
56
+ html: { id: "form_permissions", class: "ajax-form"},
57
+ data: { 'param-key' => @form.model_name.param_key } do |f| %>
58
+ <%= hidden_field_tag('update_type', 'update') %>
59
+ <%= hidden_field_tag('key', 'permissions') %>
60
+ <%= render "curation_concerns/base/form_permission", f: f %>
61
+ <%= render "curation_concerns/base/form_share", f: f %>
62
+ <% @form.batch_document_ids.each do |batch_id| %>
63
+ <%= hidden_field_tag "batch_document_ids[]", batch_id %>
64
+ <% end %>
65
+ <div class="row">
66
+ <%= f.submit "Save changes", class: 'btn btn-primary', id: 'permissions_save' %>
55
67
  <div id="status_permissions" class="status fleft"></div>
56
- </div>
57
- <% end %>
58
- </div>
59
- </div> <!-- .tab-content -->
68
+ </div>
69
+ <% end %>
70
+ </div>
71
+ </div> <!-- .tab-content -->
60
72
 
61
73
  <!-- Ajax call to clear the batch before page uload. -->
62
74
  <%= button_to "Clear Batch", { controller: :batch_edits, action: :clear }, form_class: 'hidden', remote: true, id: 'clear_batch' %>
@@ -1,4 +1,4 @@
1
1
  <div class="col-sm-3">
2
- <span class="fa fa-cubes collection-icon-search"></span>
2
+ <span class="<%= Sufia::ModelIcon.css_class_for(Collection) %> collection-icon-search"></span>
3
3
  </div>
4
4
 
@@ -1,12 +1,12 @@
1
1
  <%= simple_form_for @form, html: { class: 'editor' } do |f| %>
2
2
  <div id="descriptions_display">
3
- <h2 class="non lower"><%= t('sufia.collection.edit.description') %></h2>
3
+ <h2 class="non lower"><%= t('sufia.collection.form.description') %></h2>
4
4
  <div id="base-terms">
5
5
  <% f.object.primary_terms.each do |term| %>
6
6
  <%= render_edit_field_partial(term, f: f) %>
7
7
  <% end %>
8
8
  </div>
9
- <%= link_to t('sufia.collection.edit.additional_fields'),
9
+ <%= link_to t('sufia.collection.form.additional_fields'),
10
10
  '#extended-terms',
11
11
  class: 'btn btn-default additional-fields',
12
12
  data: { toggle: 'collapse' },
@@ -1 +1 @@
1
- <span class="fa fa-cubes collection-icon-search"></span>
1
+ <span class="<%= Sufia::ModelIcon.css_class_for(Collection) %> collection-icon-search"></span>
@@ -0,0 +1,16 @@
1
+ <%= f.input id_type,
2
+ label: false,
3
+ type: :text,
4
+ input_html:{
5
+ id: id_name,
6
+ name: f.object.model_name.param_key + '[' + id_type + '][]',
7
+ :'data-autocomplete-url' => Rails.application.routes.url_helpers.qa_path + '/search/find_works',
8
+ :'data-autocomplete' => 'work',
9
+ :'data-user' => current_user.email,
10
+ :'data-id' => id,
11
+ autocomplete: 'off',
12
+ :'aria-labelledby' => id_name + '_label',
13
+ :class => 'new-form-control string multi_value optional related_works_ids form-control multi-text-field ui-autocomplete-input',
14
+ value: ''
15
+ }
16
+ %>
@@ -1,4 +1,10 @@
1
1
  <%= simple_form_for [main_app, @form], html: { multipart: true } do |f| %>
2
+ <% if f.object.errors.include?(:base) %>
3
+ <div class="alert alert-danger alert-dismissable" role="alert">
4
+ <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
5
+ <%= f.object.errors.full_messages_for(:base).send(SimpleForm.error_method) %>
6
+ </div>
7
+ <% end %>
2
8
  <% unless f.object.persisted? %>
3
9
  <% content_for :metadata_tab do %>
4
10
  <p class="switch-upload-type">To create a separate work for each of the files, go to <%= link_to "Batch upload", sufia.new_batch_upload_path %></p>
@@ -49,7 +49,7 @@ HTML Properties:
49
49
  <tr class="new-row">
50
50
  <td>
51
51
  <a href="" class="title hidden"></a>
52
- <input class="new-form-control string multi_value optional related_works_ids work_child_members_ids form-control multi-text-field" value="" id="work_child_members_ids" aria-labelledby="work_child_members_ids_label" name="<%= f.object.model_name.param_key %>[ordered_member_ids][]" type="text">
52
+ <%= render "find_work_widget", f: f, id_name: 'work_child_members_ids', id_type: 'ordered_member_ids', user_email: current_user.email, id: f.object.model.id %>
53
53
  <div class="message has-warning hidden"></div>
54
54
  </td>
55
55
  <td>
@@ -7,7 +7,7 @@
7
7
  <%= render_edit_field_partial(term, f: f) %>
8
8
  <% end %>
9
9
  </div>
10
- <%= link_to t('sufia.works.edit.additional_fields'),
10
+ <%= link_to t('sufia.works.form.additional_fields'),
11
11
  '#extended-terms',
12
12
  class: 'btn btn-default additional-fields',
13
13
  data: { toggle: 'collapse' },
@@ -0,0 +1,43 @@
1
+ <div class="form-group multi_value optional managed">
2
+
3
+ <table class="table table-striped related-files relationships-ajax-enabled"
4
+ data-query-url="<%= polymorphic_path([main_app, :curation_concerns, curation_concern.model_name.singular], id: '$id') %>">
5
+ <thead>
6
+ <tr>
7
+ <th>Parent Work</th>
8
+ <th>Actions</th>
9
+ </tr>
10
+ </thead>
11
+ <tbody>
12
+
13
+ <% f.object.in_work_members.each do |member| %>
14
+ <tr>
15
+ <td>
16
+ <%= link_to member.title.first, [main_app, member] %>
17
+ <input class="string multi_value optional form-control related_works_ids form-control multi-text-field hidden" value="<%= member.id %>" id="work_in_works_ids" aria-labelledby="work_in_works_ids_label" name="<%= f.object.model_name.param_key %>[in_works_ids][]" type="text">
18
+ </td>
19
+ <td>
20
+ <div class="child-actions">
21
+ <%= link_to "Edit", [main_app, :edit, member], target: "_blank", class: 'btn btn-default' %>
22
+ <a class="btn btn-danger btn-remove-row">Remove</a>
23
+ </div>
24
+ </td>
25
+ </tr>
26
+ <% end %>
27
+ <tr class="new-row">
28
+ <td>
29
+ <a href="" class="title hidden"></a>
30
+ <%= render "find_work_widget", f: f, id_name: 'work_parent_members_ids', id_type: 'in_works_ids', user_email: current_user.email, id: f.object.model.id %>
31
+ <div class="message has-warning hidden"></div>
32
+ </td>
33
+ <td>
34
+ <div class="child-actions">
35
+ <a href="" class="edit hidden btn btn-default" target="_blank">Edit</a>
36
+ <a class="btn btn-danger btn-remove-row hidden">Remove</a>
37
+ <a class="btn btn-primary btn-add-row">Add</a>
38
+ </div>
39
+ </td>
40
+ </tr>
41
+ </tbody>
42
+ </table>
43
+ </div>
@@ -5,11 +5,11 @@
5
5
  <div class="list-group">
6
6
  <div class="list-group-item">
7
7
  <fieldset>
8
- <legend class="legend-save-work">Requirements</legend>
8
+ <legend class="legend-save-work"><%= t('.requirements') %></legend>
9
9
  <ul class="requirements">
10
- <li class="incomplete" id="required-metadata">Enter required metadata</li>
10
+ <li class="incomplete" id="required-metadata"><%= t('.required_descriptions') %></li>
11
11
  <% if Sufia.config.work_requires_files %>
12
- <li class="incomplete" id="required-files">Add files</li>
12
+ <li class="incomplete" id="required-files"><%= t('.required_files') %></li>
13
13
  <% end %>
14
14
  </ul>
15
15
  </fieldset>
@@ -43,6 +43,9 @@
43
43
  <%= link_to t(:'helpers.action.cancel'),
44
44
  sufia.dashboard_index_path,
45
45
  class: 'btn btn-default' %>
46
- <%= f.submit 'Save', class: 'btn btn-primary', onclick: "confirmation_needed = false;", id: "with_files_submit", name: "save_with_files" %>
46
+ <%# TODO: If we start using ActionCable, we could listen for object updates and
47
+ alert the user that the object has changed by someone else %>
48
+ <%= f.input CurationConcerns::OptimisticLockValidator.version_field, as: :hidden unless f.object.new_record? %>
49
+ <%= f.submit class: 'btn btn-primary', onclick: "confirmation_needed = false;", id: "with_files_submit", name: "save_with_files" %>
47
50
  </div>
48
51
  </aside>