sufia 6.2.0 → 6.3.0

Sign up to get free protection for your applications and to get access to all the features.
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