sufia 6.2.0 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +146 -0
  3. data/.travis.yml +4 -7
  4. data/Gemfile +2 -0
  5. data/History.md +29 -1
  6. data/README.md +25 -9
  7. data/SUFIA_VERSION +1 -1
  8. data/app/assets/stylesheets/sufia/_collections.scss +15 -0
  9. data/app/assets/stylesheets/sufia/_file-listing.scss +7 -0
  10. data/app/assets/stylesheets/sufia/_home-page.scss +10 -0
  11. data/app/builders/sufia/bootstrap_breadcrumbs_builder.rb +3 -5
  12. data/app/controllers/admin/stats_controller.rb +1 -76
  13. data/app/controllers/api/items_controller.rb +4 -6
  14. data/app/controllers/api/zotero_controller.rb +5 -5
  15. data/app/controllers/authorities_controller.rb +5 -1
  16. data/app/controllers/batch_edits_controller.rb +3 -3
  17. data/app/controllers/concerns/sufia/admin/depositor_stats.rb +41 -0
  18. data/app/controllers/concerns/sufia/admin/stats_behavior.rb +94 -0
  19. data/app/controllers/concerns/sufia/batch_controller_behavior.rb +16 -18
  20. data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +54 -56
  21. data/app/controllers/concerns/sufia/breadcrumbs.rb +3 -6
  22. data/app/controllers/concerns/sufia/collections_controller_behavior.rb +39 -39
  23. data/app/controllers/concerns/sufia/controller.rb +10 -10
  24. data/app/controllers/concerns/sufia/dashboard_controller_behavior.rb +17 -18
  25. data/app/controllers/concerns/sufia/depositors_controller_behavior.rb +9 -12
  26. data/app/controllers/concerns/sufia/files_controller/browse_everything.rb +6 -7
  27. data/app/controllers/concerns/sufia/files_controller/local_ingest_behavior.rb +39 -40
  28. data/app/controllers/concerns/sufia/files_controller/upload_complete_behavior.rb +1 -1
  29. data/app/controllers/concerns/sufia/files_controller_behavior.rb +109 -110
  30. data/app/controllers/concerns/sufia/homepage_controller.rb +8 -8
  31. data/app/controllers/concerns/sufia/my_controller_behavior.rb +13 -10
  32. data/app/controllers/concerns/sufia/single_use_links_controller_behavior.rb +11 -14
  33. data/app/controllers/concerns/sufia/single_use_links_viewer_controller_behavior.rb +27 -21
  34. data/app/controllers/concerns/sufia/transfers_controller_behavior.rb +17 -17
  35. data/app/controllers/concerns/sufia/users_controller_behavior.rb +54 -54
  36. data/app/controllers/contact_form_controller.rb +1 -1
  37. data/app/controllers/content_blocks_controller.rb +11 -12
  38. data/app/controllers/directory_controller.rb +2 -3
  39. data/app/controllers/featured_work_lists_controller.rb +1 -1
  40. data/app/controllers/featured_works_controller.rb +2 -4
  41. data/app/controllers/homepage_controller.rb +1 -2
  42. data/app/controllers/mailbox_controller.rb +12 -32
  43. data/app/controllers/my/collections_controller.rb +3 -4
  44. data/app/controllers/my/files_controller.rb +4 -6
  45. data/app/controllers/my/highlights_controller.rb +4 -6
  46. data/app/controllers/my/shares_controller.rb +3 -5
  47. data/app/controllers/pages_controller.rb +1 -3
  48. data/app/controllers/single_use_links_controller.rb +0 -1
  49. data/app/controllers/single_use_links_viewer_controller.rb +0 -1
  50. data/app/controllers/static_controller.rb +1 -0
  51. data/app/forms/sufia/forms/collection_edit_form.rb +2 -2
  52. data/app/helpers/batch_edits_helper.rb +1 -3
  53. data/app/helpers/content_block_helper.rb +7 -8
  54. data/app/helpers/generic_file_helper.rb +23 -24
  55. data/app/helpers/sufia/blacklight_override.rb +6 -7
  56. data/app/helpers/sufia/dashboard_helper_behavior.rb +4 -7
  57. data/app/helpers/sufia/permissions_helper.rb +3 -4
  58. data/app/helpers/sufia/sufia_helper_behavior.rb +30 -29
  59. data/app/helpers/trophy_helper.rb +15 -15
  60. data/app/inputs/select_with_modal_help_input.rb +3 -3
  61. data/app/inputs/with_help_icon.rb +4 -4
  62. data/app/jobs/content_delete_event_job.rb +0 -1
  63. data/app/jobs/content_depositor_change_event_job.rb +1 -2
  64. data/app/jobs/event_job.rb +0 -1
  65. data/app/jobs/user_unfollow_event_job.rb +1 -0
  66. data/app/models/concerns/sufia/solr_document_behavior.rb +1 -2
  67. data/app/models/contact_form.rb +6 -6
  68. data/app/models/content_block.rb +1 -2
  69. data/app/models/featured_work_list.rb +3 -5
  70. data/app/models/user_mailbox.rb +44 -0
  71. data/app/presenters/sufia/collection_presenter.rb +6 -8
  72. data/app/presenters/sufia/generic_file_presenter.rb +2 -2
  73. data/app/presenters/sufia/presenter_renderer.rb +2 -2
  74. data/app/presenters/sufia/version_list_presenter.rb +1 -1
  75. data/app/presenters/sufia/version_presenter.rb +3 -6
  76. data/app/search_builders/deposit_search_builder.rb +19 -0
  77. data/app/search_builders/sufia/my_search_builder_behavior.rb +1 -2
  78. data/app/search_builders/sufia/search_builder.rb +1 -3
  79. data/app/uploaders/tinymce_asset_uploader.rb +0 -2
  80. data/app/views/_controls.html.erb +5 -5
  81. data/app/views/admin/stats/_deposits.html.erb +19 -0
  82. data/app/views/admin/stats/index.html.erb +2 -0
  83. data/app/views/batch_edits/edit.html.erb +2 -2
  84. data/app/views/collections/_edit_actions.html.erb +3 -3
  85. data/app/views/collections/_form_for_select_collection.html.erb +2 -2
  86. data/app/views/collections/_sort_and_per_page.html.erb +12 -9
  87. data/app/views/collections/_view_type_group.html.erb +1 -1
  88. data/app/views/collections/edit.html.erb +5 -5
  89. data/app/views/collections/show.html.erb +7 -6
  90. data/app/views/homepage/_announcement.html.erb +5 -0
  91. data/app/views/homepage/_home.html.erb +1 -0
  92. data/app/views/my/_sort_and_per_page.html.erb +14 -10
  93. data/app/views/my/index.html.erb +1 -1
  94. data/app/views/pages/show.html.erb +0 -2
  95. data/app/views/single_use_links/new_download.html.erb +1 -1
  96. data/app/views/single_use_links_viewer/show.html.erb +1 -1
  97. data/app/views/users/_notify_link.html.erb +1 -1
  98. data/app/views/users/_notify_number.html.erb +2 -2
  99. data/config/initializers/simple_form.rb +1 -1
  100. data/config/initializers/simple_form_bootstrap.rb +1 -1
  101. data/config/locales/sufia.en.yml +4 -0
  102. data/config/routes.rb +2 -3
  103. data/lib/generators/sufia/admin_stat_generator.rb +0 -3
  104. data/lib/generators/sufia/install_generator.rb +8 -9
  105. data/lib/generators/sufia/templates/catalog_controller.rb +2 -3
  106. data/lib/generators/sufia/templates/config/action_dispatch_http_upload_monkey_patch.rb +1 -0
  107. data/lib/generators/sufia/upgrade400_generator.rb +9 -9
  108. data/lib/generators/sufia/upgrade600_generator.rb +1 -4
  109. data/lib/sufia.rb +2 -2
  110. data/lib/sufia/arkivo/actor.rb +1 -1
  111. data/lib/sufia/arkivo/create_subscription_job.rb +30 -30
  112. data/lib/sufia/arkivo/metadata_munger.rb +7 -7
  113. data/lib/sufia/arkivo/schema_validator.rb +1 -1
  114. data/lib/sufia/single_use_error.rb +0 -1
  115. data/lib/sufia/version.rb +1 -1
  116. data/lib/sufia/zotero/config.rb +13 -13
  117. data/spec/actors/generic_file/actor_spec.rb +17 -18
  118. data/spec/controllers/admin_stats_controller_spec.rb +56 -5
  119. data/spec/controllers/api/zotero_controller_spec.rb +10 -9
  120. data/spec/controllers/authorities_controller_spec.rb +8 -8
  121. data/spec/controllers/batch_controller_spec.rb +19 -20
  122. data/spec/controllers/batch_edits_controller_spec.rb +8 -9
  123. data/spec/controllers/catalog_controller_spec.rb +7 -9
  124. data/spec/controllers/collections_controller_spec.rb +30 -32
  125. data/spec/controllers/content_blocks_controller_spec.rb +4 -4
  126. data/spec/controllers/dashboard_controller_spec.rb +12 -12
  127. data/spec/controllers/depositors_controller_spec.rb +8 -8
  128. data/spec/controllers/downloads_controller_spec.rb +10 -11
  129. data/spec/controllers/featured_work_lists_controller_spec.rb +4 -4
  130. data/spec/controllers/featured_works_controller_spec.rb +11 -12
  131. data/spec/controllers/generic_files_controller_spec.rb +154 -125
  132. data/spec/controllers/homepage_controller_spec.rb +22 -15
  133. data/spec/controllers/mailbox_controller_spec.rb +20 -36
  134. data/spec/controllers/my/collections_controller_spec.rb +4 -5
  135. data/spec/controllers/my/files_controller_spec.rb +10 -11
  136. data/spec/controllers/my/highlights_controller_spec.rb +4 -5
  137. data/spec/controllers/my/shares_controller_spec.rb +12 -14
  138. data/spec/controllers/my_controller_spec.rb +1 -3
  139. data/spec/controllers/pages_controller_spec.rb +4 -4
  140. data/spec/controllers/single_use_links_controller_spec.rb +1 -3
  141. data/spec/controllers/single_use_links_viewer_controller_spec.rb +1 -2
  142. data/spec/controllers/static_controller_spec.rb +1 -1
  143. data/spec/controllers/tinymce_assets_controller_spec.rb +8 -9
  144. data/spec/controllers/transfers_controller_spec.rb +19 -19
  145. data/spec/controllers/users_controller_spec.rb +33 -35
  146. data/spec/factories/api_items.rb +2 -2
  147. data/spec/factories/content_blocks.rb +1 -1
  148. data/spec/factories/featured_works.rb +1 -1
  149. data/spec/factories/generic_files.rb +3 -3
  150. data/spec/factories/users.rb +7 -8
  151. data/spec/features/browse_dashboard_files_spec.rb +14 -18
  152. data/spec/features/browse_files_spec.rb +3 -4
  153. data/spec/features/catalog_search_spec.rb +3 -5
  154. data/spec/features/cloud_upload_spec.rb +2 -2
  155. data/spec/features/collection_spec.rb +21 -21
  156. data/spec/features/contact_form_spec.rb +10 -11
  157. data/spec/features/display_dashboard_spec.rb +5 -9
  158. data/spec/features/edit_file_spec.rb +8 -9
  159. data/spec/features/featured_item_spec.rb +1 -1
  160. data/spec/features/ingest_upload_files_spec.rb +5 -5
  161. data/spec/features/notifications_spec.rb +2 -6
  162. data/spec/features/ownership_transfer_spec.rb +2 -2
  163. data/spec/features/proxy_spec.rb +2 -2
  164. data/spec/features/search_spec.rb +3 -4
  165. data/spec/features/single_use_links_spec.rb +1 -1
  166. data/spec/features/users_spec.rb +4 -5
  167. data/spec/forms/collection_edit_form_spec.rb +2 -2
  168. data/spec/forms/generic_file_edit_form_spec.rb +6 -7
  169. data/spec/helpers/batch_edits_helper_spec.rb +9 -13
  170. data/spec/helpers/content_block_helper_spec.rb +3 -3
  171. data/spec/helpers/dashboard_helper_spec.rb +19 -24
  172. data/spec/helpers/generic_file_helper_spec.rb +5 -7
  173. data/spec/helpers/sufia_helper_spec.rb +43 -54
  174. data/spec/helpers/trophy_helper_spec.rb +5 -5
  175. data/spec/inputs/multi_value_with_help_input_spec.rb +1 -2
  176. data/spec/inputs/select_with_help_input_spec.rb +19 -15
  177. data/spec/javascripts/jasmine_spec.rb +4 -5
  178. data/spec/javascripts/support/jasmine_helper.rb +9 -9
  179. data/spec/jobs/active_fedora_id_based_job_spec.rb +7 -5
  180. data/spec/jobs/audit_job_spec.rb +7 -7
  181. data/spec/jobs/batch_update_job_spec.rb +5 -6
  182. data/spec/jobs/characterize_job_spec.rb +1 -1
  183. data/spec/jobs/content_depositor_change_event_job_spec.rb +1 -1
  184. data/spec/jobs/create_derivatives_job_spec.rb +5 -5
  185. data/spec/jobs/event_jobs_spec.rb +16 -16
  186. data/spec/jobs/import_url_job_spec.rb +36 -5
  187. data/spec/jobs/ingest_local_file_job_spec.rb +31 -20
  188. data/spec/jobs/sufia_resque_queue_spec.rb +1 -1
  189. data/spec/lib/sufia/analytics_spec.rb +0 -1
  190. data/spec/lib/sufia/arkivo/actor_spec.rb +6 -6
  191. data/spec/lib/sufia/arkivo/schema_validator_spec.rb +18 -18
  192. data/spec/lib/sufia/breadcrumbs_spec.rb +5 -6
  193. data/spec/lib/sufia/messages_spec.rb +11 -12
  194. data/spec/lib/sufia/readable_permissions_spec.rb +8 -10
  195. data/spec/lib/sufia/upload_complete_behavior_spec.rb +6 -7
  196. data/spec/lib/sufia/user_stat_importer_spec.rb +30 -33
  197. data/spec/lib/sufia/writable_permissions_spec.rb +1 -3
  198. data/spec/lib/sufia/zotero/config_spec.rb +4 -6
  199. data/spec/models/ability_spec.rb +11 -9
  200. data/spec/models/batch_spec.rb +13 -13
  201. data/spec/models/characterization_spec.rb +2 -3
  202. data/spec/models/checksum_audit_log_spec.rb +18 -19
  203. data/spec/models/collection_spec.rb +11 -12
  204. data/spec/models/content_block_spec.rb +33 -22
  205. data/spec/models/download_spec.rb +3 -5
  206. data/spec/models/featured_work_list_spec.rb +3 -3
  207. data/spec/models/featured_work_spec.rb +12 -14
  208. data/spec/models/file_content_datastream_spec.rb +9 -7
  209. data/spec/models/file_download_stat_spec.rb +34 -40
  210. data/spec/models/file_usage_spec.rb +46 -52
  211. data/spec/models/file_view_stat_spec.rb +35 -41
  212. data/spec/models/fits_datastream_spec.rb +23 -25
  213. data/spec/models/generic_file/visibility_spec.rb +10 -5
  214. data/spec/models/generic_file_spec.rb +86 -88
  215. data/spec/models/geo_names_resource_spec.rb +3 -5
  216. data/spec/models/local_authority_spec.rb +30 -33
  217. data/spec/models/pageview_spec.rb +3 -3
  218. data/spec/models/proxy_deposit_request_spec.rb +3 -3
  219. data/spec/models/single_use_link_spec.rb +36 -36
  220. data/spec/models/solr_document_spec.rb +3 -6
  221. data/spec/models/trophy_spec.rb +8 -9
  222. data/spec/models/user_mailbox_spec.rb +62 -0
  223. data/spec/models/user_spec.rb +28 -29
  224. data/spec/presenters/presenter_renderer_spec.rb +1 -1
  225. data/spec/presenters/sufia/generic_file_presenter_spec.rb +5 -5
  226. data/spec/presenters/sufia/version_list_presenter_spec.rb +2 -2
  227. data/spec/presenters/sufia/version_presenter_spec.rb +1 -1
  228. data/spec/routing/featured_works_route_spec.rb +4 -4
  229. data/spec/routing/ownership_transfers_route_spec.rb +1 -1
  230. data/spec/routing/route_spec.rb +89 -89
  231. data/spec/services/generic_file_audit_service_spec.rb +8 -8
  232. data/spec/services/repository_audit_service_spec.rb +7 -3
  233. data/spec/spec_helper.rb +5 -4
  234. data/spec/support/features/session_helpers.rb +1 -1
  235. data/spec/support/input_support.rb +1 -2
  236. data/spec/support/rake.rb +1 -1
  237. data/spec/support/selectors.rb +1 -6
  238. data/spec/support/statistic_helper.rb +1 -1
  239. data/spec/support/uploaded_file_monkeypatch.rb +1 -1
  240. data/spec/tasks/rake_spec.rb +3 -5
  241. data/spec/views/admin/stats/index.html.erb_spec.rb +16 -16
  242. data/spec/views/batch/edit.html.erb_spec.rb +1 -3
  243. data/spec/views/batch_edits/check_all_spec.rb +5 -5
  244. data/spec/views/batch_edits/edit.html.erb_spec.rb +1 -3
  245. data/spec/views/catalog/index.html.erb_spec.rb +1 -3
  246. data/spec/views/catalog/sort_and_per_page.html.erb_spec.rb +4 -5
  247. data/spec/views/collections/_form.html.erb_spec.rb +5 -3
  248. data/spec/views/collections/_show_descriptions.html.erb_spec.rb +7 -8
  249. data/spec/views/collections/_show_document_list.erb_spec.rb +4 -6
  250. data/spec/views/dashboard/index_spec.rb +14 -21
  251. data/spec/views/generic_file/_browse_everything.html.erb_spec.rb +2 -2
  252. data/spec/views/generic_file/_permission_form.html.erb_spec.rb +8 -9
  253. data/spec/views/generic_file/edit.html.erb_spec.rb +7 -7
  254. data/spec/views/generic_file/show.html.erb_spec.rb +24 -25
  255. data/spec/views/generic_file/stats.html.erb_spec.rb +19 -19
  256. data/spec/views/homepage/_announcement.html.erb_spec.rb +51 -0
  257. data/spec/views/homepage/_featured_works.html.erb_spec.rb +5 -9
  258. data/spec/views/homepage/_home_header.html.erb_spec.rb +2 -2
  259. data/spec/views/my/facet.html.erb_spec.rb +4 -4
  260. data/spec/views/single_use_links/new_download.html.erb_spec.rb +28 -0
  261. data/spec/views/single_use_links_viewer/show.html.erb_spec.rb +29 -0
  262. data/spec/views/users/_follower_modal.html.erb_spec.rb +7 -8
  263. data/spec/views/users/_following_modal.html.erb_spec.rb +4 -5
  264. data/spec/views/users/_notify_number.html.erb_spec.rb +2 -5
  265. data/spec/views/users/_user_util_links.html.erb_spec.rb +5 -8
  266. data/spec/views/users/index.html.erb_spec.rb +4 -6
  267. data/spec/views/users/show.html.erb_spec.rb +4 -7
  268. data/tasks/sufia-dev.rake +19 -3
  269. metadata +20 -5
@@ -4,9 +4,9 @@ module API
4
4
  # Zotero parlance is mapped to a GenericFile in Sufia.
5
5
  class ItemsController < ApplicationController
6
6
  skip_before_action :verify_authenticity_token
7
- before_filter :validate_item, only: [:create, :update]
8
- before_filter :authorize_token
9
- before_filter :my_load_and_authorize_resource, only: [:update, :destroy, :show]
7
+ before_action :validate_item, only: [:create, :update]
8
+ before_action :authorize_token
9
+ before_action :my_load_and_authorize_resource, only: [:update, :destroy, :show]
10
10
 
11
11
  attr_reader :item
12
12
 
@@ -66,9 +66,7 @@ module API
66
66
  end
67
67
 
68
68
  def authorize_token
69
- unless valid_token?
70
- return render plain: "invalid user token: #{token}", status: :unauthorized
71
- end
69
+ render plain: "invalid user token: #{token}", status: :unauthorized unless valid_token?
72
70
  end
73
71
 
74
72
  def valid_token?
@@ -3,22 +3,22 @@ require 'oauth'
3
3
  module API
4
4
  # Adds the ability to authenticate against Zotero's OAuth endpoint
5
5
  class ZoteroController < ApplicationController
6
- before_filter :authenticate_user!
7
- before_filter :authorize_user!
8
- before_filter :validate_params, only: :callback
6
+ before_action :authenticate_user!
7
+ before_action :authorize_user!
8
+ before_action :validate_params, only: :callback
9
9
 
10
10
  def initiate
11
11
  request_token = client.get_request_token(oauth_callback: callback_url)
12
12
  session[:request_token] = request_token
13
13
  current_user.zotero_token = request_token
14
14
  current_user.save
15
- redirect_to request_token.authorize_url({ identity: '1', oauth_callback: callback_url })
15
+ redirect_to request_token.authorize_url(identity: '1', oauth_callback: callback_url)
16
16
  rescue OAuth::Unauthorized
17
17
  redirect_to root_url, alert: 'Invalid Zotero client key pair'
18
18
  end
19
19
 
20
20
  def callback
21
- access_token = current_token.get_access_token({ oauth_verifier: params['oauth_verifier'] })
21
+ access_token = current_token.get_access_token(oauth_verifier: params['oauth_verifier'])
22
22
  # parse userID and API key out of token and store in user instance
23
23
  current_user.zotero_userid = access_token.params[:userID]
24
24
  current_user.save
@@ -8,7 +8,11 @@ class AuthoritiesController < ApplicationController
8
8
  if params[:term] == "location"
9
9
  GeoNamesResource.find_location(s)
10
10
  else
11
- LocalAuthority.entries_by_term(params[:model], params[:term], s) rescue []
11
+ begin
12
+ LocalAuthority.entries_by_term(params[:model], params[:term], s)
13
+ rescue
14
+ []
15
+ end
12
16
  end
13
17
  render json: hits
14
18
  end
@@ -1,5 +1,5 @@
1
1
  class BatchEditsController < ApplicationController
2
- include Hydra::BatchEditBehavior
3
- include GenericFileHelper
4
- include Sufia::BatchEditsControllerBehavior
2
+ include Hydra::BatchEditBehavior
3
+ include GenericFileHelper
4
+ include Sufia::BatchEditsControllerBehavior
5
5
  end
@@ -0,0 +1,41 @@
1
+ # Module to gather information about the deposits in the system
2
+ #
3
+ module Sufia::Admin::DepositorStats
4
+ extend ActiveSupport::Concern
5
+
6
+ # we are using blacklight facet queries for some of our searches so we have to include them when we are included
7
+ included do
8
+ include Blacklight::Base
9
+ copy_blacklight_config_from(CatalogController)
10
+ end
11
+
12
+ # Gather information about the depositors in the system
13
+ #
14
+ # @param [Hash] deposit_stats
15
+ # @option deposit_stats [String] :start_date optional string to specify the start date to gather the stats from
16
+ # @option deposit_stats [String] :end_date optional string to specify the end date to gather the stats from
17
+ #
18
+ def depositors(deposit_stats)
19
+ start_datetime = DateTime.parse(deposit_stats[:start_date]) unless deposit_stats[:start_date].blank?
20
+ end_datetime = DateTime.parse(deposit_stats[:end_date]).end_of_day unless deposit_stats[:end_date].blank?
21
+
22
+ query = GenericFile.build_date_query(start_datetime, end_datetime) unless start_datetime.blank?
23
+ sb = DepositSearchBuilder.new([:include_depositor_facet], self)
24
+ facet_results = repository.search(sb.merge(q: query).query)
25
+ facets = facet_results["facet_counts"]["facet_fields"]["depositor_ssim"]
26
+ depositors = []
27
+
28
+ # facet results come back in an array where the first item is the user and the second item is the count
29
+ # [ abc123, 55, ccczzz, 205 ]
30
+ # in the loop we are stepping through the array by twos to get the entire pair
31
+ # The item at i is the key and the item at i+1 is the number of files
32
+ (0...facets.length).step(2).each do |i|
33
+ depositor = {}
34
+ depositor[:key] = facets[i]
35
+ depositor[:deposits] = facets[i + 1]
36
+ depositor[:user] = User.find_by_user_key(depositor[:key])
37
+ depositors << depositor
38
+ end
39
+ depositors
40
+ end
41
+ end
@@ -0,0 +1,94 @@
1
+ module Sufia
2
+ module Admin
3
+ module StatsBehavior
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ include Sufia::Admin::DepositorStats
8
+ end
9
+
10
+ def index
11
+ # total user count
12
+ @users_count = ::User.count
13
+
14
+ # The most recent users to join
15
+ @users_stats = params.fetch(:users_stats, {})
16
+ @recent_users = recent_users
17
+
18
+ # Query Solr for top depositors
19
+ @active_users = top_depositors
20
+
21
+ # Count of documents by permissions
22
+ @files_count = document_by_permission
23
+
24
+ # Query Solr for top file formats
25
+ @top_formats = top_formats
26
+
27
+ @deposit_stats = params.fetch(:deposit_stats, {})
28
+ @depositors = depositors(@deposit_stats)
29
+ render 'index'
30
+ end
31
+
32
+ private
33
+
34
+ def top_depositors_count
35
+ count = params[:dep_count].to_i
36
+ count.in?(5..20) ? count : 5
37
+ end
38
+
39
+ def document_by_permission
40
+ return document_by_date_by_permission if @users_stats[:file_start_date]
41
+
42
+ files_count = {}
43
+ files_count[:total] = ::GenericFile.count
44
+ files_count[:public] = ::GenericFile.where_public.count
45
+ files_count[:registered] = ::GenericFile.where_registered.count
46
+ files_count[:private] = files_count[:total] - (files_count[:registered] + files_count[:public])
47
+ files_count
48
+ end
49
+
50
+ def document_by_date_by_permission
51
+ start_date = DateTime.parse(@users_stats[:file_start_date])
52
+ end_date = DateTime.parse(@users_stats[:file_end_date]).end_of_day unless @users_stats[:file_end_date].blank?
53
+ files_count = {}
54
+ files_count[:total] = ::GenericFile.find_by_date_created(start_date, end_date).count
55
+ files_count[:public] = ::GenericFile.find_by_date_created(start_date, end_date).merge(::GenericFile.where_public).count
56
+ files_count[:registered] = ::GenericFile.find_by_date_created(start_date, end_date).merge(::GenericFile.where_registered).count
57
+ files_count[:private] = files_count[:total] - (files_count[:registered] + files_count[:public])
58
+ files_count
59
+ end
60
+
61
+ def top_depositors
62
+ depositor_key = Solrizer.solr_name('depositor', :stored_searchable, type: :string)
63
+ top_data(depositor_key, top_depositors_count)
64
+ end
65
+
66
+ def top_formats
67
+ format_key = Solrizer.solr_name('file_format', Solrizer::Descriptor.new(:string, :indexed, :multivalued))
68
+ top_data(format_key, 5)
69
+ end
70
+
71
+ def top_data(key, limit)
72
+ query_url = "#{ActiveFedora.solr_config[:url]}/terms?terms.fl=#{key}&terms.sort=count&terms.limit=#{limit}&wt=json&omitHeader=true"
73
+ # Parse JSON response (looks like {"terms":{"depositor_tesim":["mjg36",3]}} for depositor)
74
+ json = open(query_url).read
75
+ begin
76
+ tuples = JSON.parse(json)['terms'][key]
77
+ rescue
78
+ []
79
+ end
80
+ # Change to hash where keys = logins and values = counts
81
+ Hash[*tuples]
82
+ end
83
+
84
+ def recent_users
85
+ # no dates return the top 5
86
+ return ::User.order('created_at DESC').limit(5) if @users_stats[:start_date].blank?
87
+
88
+ start_date = DateTime.parse @users_stats[:start_date]
89
+ end_date = DateTime.parse(@users_stats[:end_date]).end_of_day unless @users_stats[:end_date].blank?
90
+ ::User.recent_users start_date, end_date
91
+ end
92
+ end
93
+ end
94
+ end
@@ -3,13 +3,13 @@ module Sufia
3
3
  extend ActiveSupport::Concern
4
4
  include Hydra::Controller::ControllerBehavior
5
5
 
6
- included do
6
+ included do
7
7
  layout "sufia-one-column"
8
8
 
9
- before_filter :has_access?
9
+ before_action :has_access?
10
10
  ActiveSupport::Deprecation.deprecate_methods(BatchController, :initialize_fields)
11
11
  class_attribute :edit_form_class
12
- self.edit_form_class = Sufia::Forms::BatchEditForm
12
+ self.edit_form_class = Sufia::Forms::BatchEditForm
13
13
  end
14
14
 
15
15
  def edit
@@ -34,22 +34,20 @@ module Sufia
34
34
 
35
35
  protected
36
36
 
37
- def edit_form
38
- generic_file = ::GenericFile.new(creator: [current_user.name], title: @batch.generic_files.map(&:label))
39
- edit_form_class.new(generic_file)
40
- end
41
-
42
- # override this method if you need to initialize more complex RDF assertions (b-nodes)
43
- def initialize_fields(file)
44
- file.initialize_fields
45
- end
37
+ def edit_form
38
+ generic_file = ::GenericFile.new(creator: [current_user.name], title: @batch.generic_files.map(&:label))
39
+ edit_form_class.new(generic_file)
40
+ end
46
41
 
47
- def uploading_on_behalf_of? batch
48
- file = batch.generic_files.first
49
- return false if file.nil? || file.on_behalf_of.blank?
50
- current_user.user_key != file.on_behalf_of
51
- end
42
+ # override this method if you need to initialize more complex RDF assertions (b-nodes)
43
+ def initialize_fields(file)
44
+ file.initialize_fields
45
+ end
52
46
 
47
+ def uploading_on_behalf_of?(batch)
48
+ file = batch.generic_files.first
49
+ return false if file.nil? || file.on_behalf_of.blank?
50
+ current_user.user_key != file.on_behalf_of
51
+ end
53
52
  end
54
53
  end
55
-
@@ -5,37 +5,36 @@ module Sufia
5
5
 
6
6
  included do
7
7
  layout "sufia-one-column"
8
- before_filter :build_breadcrumbs, only: :edit
8
+ before_action :build_breadcrumbs, only: :edit
9
9
  end
10
10
 
11
11
  def edit
12
- super
13
- @generic_file = ::GenericFile.new
14
- @generic_file.depositor = current_user.user_key
15
- @terms = terms - [:title, :format, :resource_type]
16
-
17
- h = {}
18
- @names = []
19
- permissions = []
20
-
21
- # For each of the files in the batch, set the attributes to be the concatination of all the attributes
22
- batch.each do |doc_id|
23
- gf = ::GenericFile.load_instance_from_solr(doc_id)
24
- terms.each do |key|
25
- h[key] ||= []
26
- h[key] = (h[key] + gf.send(key)).uniq
27
- end
28
- @names << gf.to_s
29
- permissions = (permissions + gf.permissions).uniq
30
- end
31
-
32
- initialize_fields(h, @generic_file)
33
-
34
- @generic_file.permissions_attributes = [{type: 'group', name: 'public', access: 'read'}]
12
+ super
13
+ @generic_file = ::GenericFile.new
14
+ @generic_file.depositor = current_user.user_key
15
+ @terms = terms - [:title, :format, :resource_type]
16
+
17
+ h = {}
18
+ @names = []
19
+ permissions = []
20
+
21
+ # For each of the files in the batch, set the attributes to be the concatination of all the attributes
22
+ batch.each do |doc_id|
23
+ gf = ::GenericFile.load_instance_from_solr(doc_id)
24
+ terms.each do |key|
25
+ h[key] ||= []
26
+ h[key] = (h[key] + gf.send(key)).uniq
27
+ end
28
+ @names << gf.to_s
29
+ permissions = (permissions + gf.permissions).uniq
30
+ end
31
+
32
+ initialize_fields(h, @generic_file)
33
+
34
+ @generic_file.permissions_attributes = [{ type: 'group', name: 'public', access: 'read' }]
35
35
  end
36
36
 
37
37
  def after_update
38
-
39
38
  respond_to do |format|
40
39
  format.json { head :no_content }
41
40
  format.html { redirect_to_return_controller }
@@ -54,47 +53,46 @@ module Sufia
54
53
 
55
54
  def update
56
55
  case params["update_type"]
57
- when "update"
58
- super
59
- when "delete_all"
60
- destroy_batch
56
+ when "update"
57
+ super
58
+ when "delete_all"
59
+ destroy_batch
61
60
  end
62
61
  end
63
62
 
64
63
  protected
65
64
 
66
- def destroy_batch
67
- batch.each do |doc_id|
68
- gf = ::GenericFile.find(doc_id)
69
- gf.destroy
65
+ def destroy_batch
66
+ batch.each do |doc_id|
67
+ gf = ::GenericFile.find(doc_id)
68
+ gf.destroy
69
+ end
70
+ after_update
70
71
  end
71
- after_update
72
- end
73
72
 
74
- # override this method if you need to initialize more complex RDF assertions (b-nodes)
75
- def initialize_fields(attributes, file)
76
- terms.each do |key|
77
- # if value is empty, we create an one element array to loop over for output
78
- file[key] = attributes[key].empty? ? [''] : attributes[key]
79
- end
80
- end
81
-
82
- def terms
83
- Forms::BatchEditForm.terms
84
- end
73
+ # override this method if you need to initialize more complex RDF assertions (b-nodes)
74
+ def initialize_fields(attributes, file)
75
+ terms.each do |key|
76
+ # if value is empty, we create an one element array to loop over for output
77
+ file[key] = attributes[key].empty? ? [''] : attributes[key]
78
+ end
79
+ end
85
80
 
86
- def generic_file_params
87
- file_params = params[:generic_file] || ActionController::Parameters.new()
88
- Forms::BatchEditForm.model_attributes(file_params)
89
- end
81
+ def terms
82
+ Forms::BatchEditForm.terms
83
+ end
90
84
 
91
- def redirect_to_return_controller
92
- if params[:return_controller]
93
- redirect_to sufia.url_for(controller: params[:return_controller], only_path: true)
94
- else
95
- redirect_to sufia.dashboard_index_path
85
+ def generic_file_params
86
+ file_params = params[:generic_file] || ActionController::Parameters.new
87
+ Forms::BatchEditForm.model_attributes(file_params)
96
88
  end
97
- end
98
89
 
90
+ def redirect_to_return_controller
91
+ if params[:return_controller]
92
+ redirect_to sufia.url_for(controller: params[:return_controller], only_path: true)
93
+ else
94
+ redirect_to sufia.dashboard_index_path
95
+ end
96
+ end
99
97
  end
100
98
  end
@@ -11,9 +11,7 @@ module Sufia
11
11
  end
12
12
 
13
13
  def default_trail
14
- if user_signed_in?
15
- add_breadcrumb I18n.t('sufia.dashboard.title'), sufia.dashboard_index_path
16
- end
14
+ add_breadcrumb I18n.t('sufia.dashboard.title'), sufia.dashboard_index_path if user_signed_in?
17
15
  end
18
16
 
19
17
  def trail_from_referer
@@ -37,9 +35,8 @@ module Sufia
37
35
  end
38
36
 
39
37
  def add_breadcrumb_for_action
40
- if /edit|stats/ =~ action_name && controller_name == "generic_files"
41
- add_breadcrumb I18n.t("sufia.generic_file.browse_view"), sufia.generic_file_path(params["id"])
42
- end
38
+ return unless /edit|stats/ =~ action_name && controller_name == "generic_files"
39
+ add_breadcrumb I18n.t("sufia.generic_file.browse_view"), sufia.generic_file_path(params["id"])
43
40
  end
44
41
  end
45
42
  end
@@ -6,9 +6,9 @@ module Sufia
6
6
  included do
7
7
  include Sufia::Breadcrumbs
8
8
 
9
- before_filter :filter_docs_with_read_access!, except: :show
10
- before_filter :has_access?, except: :show
11
- before_filter :build_breadcrumbs, only: [:edit, :show]
9
+ before_action :filter_docs_with_read_access!, except: :show
10
+ before_action :has_access?, except: :show
11
+ before_action :build_breadcrumbs, only: [:edit, :show]
12
12
 
13
13
  self.search_params_logic += [:add_access_controls_to_solr_params, :add_advanced_parse_q_to_solr]
14
14
 
@@ -32,50 +32,50 @@ module Sufia
32
32
 
33
33
  protected
34
34
 
35
- def presenter
36
- @presenter ||= presenter_class.new(@collection)
37
- end
35
+ def presenter
36
+ @presenter ||= presenter_class.new(@collection)
37
+ end
38
38
 
39
- def presenter_class
40
- Sufia::CollectionPresenter
41
- end
39
+ def presenter_class
40
+ Sufia::CollectionPresenter
41
+ end
42
42
 
43
- def collection_member_search_builder_class
44
- ::SearchBuilder
45
- end
43
+ def collection_member_search_builder_class
44
+ ::SearchBuilder
45
+ end
46
46
 
47
- def collection_params
48
- form_class.model_attributes(
49
- params.require(:collection).permit(:title, :description, :members, part_of: [],
50
- contributor: [], creator: [], publisher: [], date_created: [], subject: [],
51
- language: [], rights: [], resource_type: [], identifier: [], based_near: [],
52
- tag: [], related_url: [])
53
- )
54
- end
47
+ def collection_params
48
+ form_class.model_attributes(
49
+ params.require(:collection).permit(:title, :description, :members, part_of: [],
50
+ contributor: [], creator: [], publisher: [], date_created: [], subject: [],
51
+ language: [], rights: [], resource_type: [], identifier: [], based_near: [],
52
+ tag: [], related_url: [])
53
+ )
54
+ end
55
55
 
56
- def query_collection_members
57
- flash[:notice]=nil if flash[:notice] == "Select something first"
58
- params[:q] = params[:cq]
59
- super
60
- end
56
+ def query_collection_members
57
+ flash[:notice] = nil if flash[:notice] == "Select something first"
58
+ params[:q] = params[:cq]
59
+ super
60
+ end
61
61
 
62
- def after_destroy(id)
63
- respond_to do |format|
64
- format.html { redirect_to sufia.dashboard_collections_path, notice: 'Collection was successfully deleted.' }
65
- format.json { render json: {id: id}, status: :destroyed, location: @collection }
62
+ def after_destroy(id)
63
+ respond_to do |format|
64
+ format.html { redirect_to sufia.dashboard_collections_path, notice: 'Collection was successfully deleted.' }
65
+ format.json { render json: { id: id }, status: :destroyed, location: @collection }
66
+ end
66
67
  end
67
- end
68
68
 
69
- def form
70
- @form ||= form_class.new(@collection)
71
- end
69
+ def form
70
+ @form ||= form_class.new(@collection)
71
+ end
72
72
 
73
- def form_class
74
- Sufia::Forms::CollectionEditForm
75
- end
73
+ def form_class
74
+ Sufia::Forms::CollectionEditForm
75
+ end
76
76
 
77
- def _prefixes
78
- @_prefixes ||= super + ['catalog']
79
- end
77
+ def _prefixes
78
+ @_prefixes ||= super + ['catalog']
79
+ end
80
80
  end
81
81
  end