sufia 6.0.0 → 6.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (290) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -5
  3. data/CONTRIBUTING.md +4 -4
  4. data/Gemfile +2 -1
  5. data/History.md +69 -0
  6. data/README.md +84 -4
  7. data/SUFIA_VERSION +1 -1
  8. data/app/assets/images/zotero.png +0 -0
  9. data/app/assets/javascripts/sufia/featured_works.js +20 -3
  10. data/app/assets/stylesheets/generic_files.css.erb +2 -2
  11. data/app/assets/stylesheets/sufia.css.scss +2 -2
  12. data/app/assets/stylesheets/sufia/_buttons.scss +2 -2
  13. data/app/assets/stylesheets/sufia/_collections.scss +4 -4
  14. data/app/assets/stylesheets/sufia/_dashboard.scss +1 -1
  15. data/app/assets/stylesheets/sufia/_file-listing.scss +3 -0
  16. data/app/assets/stylesheets/sufia/_modal.scss +4 -0
  17. data/app/assets/stylesheets/sufia/_settings.scss +4 -3
  18. data/app/assets/stylesheets/sufia/_styles.scss +4 -0
  19. data/app/controllers/admin/stats_controller.rb +68 -0
  20. data/app/controllers/api/items_controller.rb +78 -0
  21. data/app/controllers/api/zotero_controller.rb +70 -0
  22. data/app/controllers/authorities_controller.rb +6 -5
  23. data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +2 -1
  24. data/app/controllers/concerns/sufia/breadcrumbs.rb +1 -1
  25. data/app/controllers/concerns/sufia/depositors_controller_behavior.rb +11 -0
  26. data/app/controllers/concerns/sufia/files_controller/browse_everything.rb +1 -1
  27. data/app/controllers/concerns/sufia/files_controller/local_ingest_behavior.rb +1 -1
  28. data/app/controllers/concerns/sufia/files_controller_behavior.rb +23 -11
  29. data/app/controllers/concerns/sufia/my_controller_behavior.rb +1 -7
  30. data/app/controllers/concerns/sufia/users_controller_behavior.rb +1 -2
  31. data/app/controllers/my/collections_controller.rb +1 -0
  32. data/app/controllers/my/files_controller.rb +1 -1
  33. data/app/helpers/sufia/sufia_helper_behavior.rb +28 -16
  34. data/app/models/my_search_builder.rb +4 -0
  35. data/app/search_builders/sufia/my_search_builder_behavior.rb +20 -0
  36. data/app/search_builders/sufia/search_builder.rb +1 -1
  37. data/app/views/admin/stats/index.html.erb +68 -0
  38. data/app/views/collections/_action_menu.html.erb +22 -20
  39. data/app/views/collections/_collection.html.erb +1 -1
  40. data/app/views/collections/_form_for_select_collection.html.erb +5 -3
  41. data/app/views/generic_files/_show_actions.html.erb +4 -2
  42. data/app/views/generic_files/show.html.erb +1 -1
  43. data/app/views/layouts/sufia-dashboard.html.erb +5 -4
  44. data/app/views/layouts/sufia-one-column.html.erb +2 -0
  45. data/app/views/layouts/sufia-two-column.html.erb +6 -4
  46. data/app/views/my/_facet_layout.html.erb +2 -2
  47. data/app/views/my/_facets.html.erb +4 -6
  48. data/app/views/my/index.html.erb +4 -3
  49. data/app/views/users/_edit_primary.html.erb +18 -17
  50. data/app/views/users/_follower_modal.html.erb +5 -1
  51. data/app/views/users/_following_modal.html.erb +5 -1
  52. data/app/views/users/_user_info.html.erb +6 -1
  53. data/app/views/users/_zotero.html.erb +12 -0
  54. data/config/locales/sufia.en.yml +10 -1
  55. data/config/routes.rb +23 -1
  56. data/lib/generators/sufia/admin_stat_generator.rb +17 -0
  57. data/lib/generators/sufia/install_generator.rb +8 -3
  58. data/{sufia-models/lib/generators/sufia/models/templates/config/resque_admin.rb → lib/generators/sufia/templates/sufia/stats_admin.rb} +3 -3
  59. data/lib/generators/sufia/upgrade400_generator.rb +2 -2
  60. data/lib/sufia.rb +3 -0
  61. data/lib/sufia/arkivo.rb +11 -0
  62. data/lib/sufia/arkivo/actor.rb +95 -0
  63. data/lib/sufia/arkivo/config.rb +11 -0
  64. data/lib/sufia/arkivo/create_subscription_job.rb +67 -0
  65. data/lib/sufia/arkivo/metadata_munger.rb +51 -0
  66. data/lib/sufia/arkivo/schema_validator.rb +55 -0
  67. data/lib/sufia/form_builder.rb +1 -1
  68. data/lib/sufia/inflections.rb +3 -0
  69. data/lib/sufia/version.rb +1 -1
  70. data/lib/sufia/zotero.rb +6 -0
  71. data/lib/sufia/zotero/config.rb +15 -0
  72. data/solr_conf/conf/solrconfig.xml +11 -0
  73. data/spec/controllers/admin_stats_controller_spec.rb +73 -0
  74. data/spec/controllers/api/items_controller_spec.rb +476 -0
  75. data/spec/controllers/api/zotero_controller_spec.rb +178 -0
  76. data/spec/controllers/batch_edits_controller_spec.rb +7 -0
  77. data/spec/controllers/collections_controller_spec.rb +1 -1
  78. data/spec/controllers/dashboard_controller_spec.rb +1 -1
  79. data/spec/controllers/depositors_controller_spec.rb +9 -5
  80. data/spec/controllers/generic_files_controller_spec.rb +5 -4
  81. data/spec/controllers/mailbox_controller_spec.rb +2 -2
  82. data/spec/controllers/my/collections_controller_spec.rb +1 -2
  83. data/spec/controllers/my/files_controller_spec.rb +5 -5
  84. data/spec/controllers/my/shares_controller_spec.rb +15 -3
  85. data/spec/controllers/pages_controller_spec.rb +1 -1
  86. data/spec/controllers/users_controller_spec.rb +10 -9
  87. data/spec/factories/api_items.rb +91 -0
  88. data/spec/factories/generic_files.rb +4 -0
  89. data/spec/factories/users.rb +4 -4
  90. data/spec/features/featured_item_spec.rb +26 -0
  91. data/spec/features/ingest_upload_files_spec.rb +2 -3
  92. data/spec/features/proxy_spec.rb +0 -1
  93. data/spec/helpers/permissions_helper_spec.rb +2 -2
  94. data/spec/helpers/sufia_helper_spec.rb +11 -5
  95. data/spec/inputs/select_with_help_input_spec.rb +2 -2
  96. data/spec/javascripts/helpers/.gitkeep +0 -0
  97. data/spec/javascripts/helpers/jasmine-jquery.js +832 -0
  98. data/spec/javascripts/jasmine_spec.rb +31 -0
  99. data/spec/javascripts/notify_update_link_spec.js +8 -0
  100. data/spec/javascripts/single_use_link_spec.js.coffee +23 -0
  101. data/spec/javascripts/support/jasmine.yml +124 -0
  102. data/spec/javascripts/support/jasmine_helper.rb +15 -0
  103. data/spec/javascripts/terms_of_service_spec.js.coffee +32 -0
  104. data/spec/javascripts/toggle_icon_spec.js +11 -0
  105. data/spec/jobs/active_fedora_id_based_job_spec.rb +3 -3
  106. data/spec/jobs/import_url_job_spec.rb +0 -2
  107. data/spec/lib/sufia/arkivo/actor_spec.rb +139 -0
  108. data/spec/lib/sufia/arkivo/create_subscription_job_spec.rb +54 -0
  109. data/spec/lib/sufia/arkivo/metadata_munger_spec.rb +48 -0
  110. data/spec/lib/sufia/arkivo/schema_validator_spec.rb +65 -0
  111. data/spec/lib/sufia/upload_complete_behavior_spec.rb +1 -1
  112. data/spec/lib/sufia/user_stat_importer_spec.rb +60 -0
  113. data/spec/lib/sufia/zotero/config_spec.rb +30 -0
  114. data/spec/models/collection_spec.rb +36 -7
  115. data/spec/models/file_download_stat_spec.rb +5 -5
  116. data/spec/models/file_usage_spec.rb +23 -0
  117. data/spec/models/file_view_stat_spec.rb +6 -6
  118. data/spec/models/fits_datastream_spec.rb +0 -5
  119. data/spec/models/generic_file_spec.rb +49 -14
  120. data/spec/models/local_authority_spec.rb +1 -1
  121. data/spec/models/proxy_deposit_request_spec.rb +1 -1
  122. data/spec/models/trophy_spec.rb +8 -8
  123. data/spec/models/user_spec.rb +33 -0
  124. data/spec/presenters/sufia/collection_presenter_spec.rb +1 -1
  125. data/spec/routing/api_route_spec.rb +91 -0
  126. data/spec/routing/route_spec.rb +1 -1
  127. data/spec/services/generic_file_audit_service_spec.rb +44 -8
  128. data/spec/spec_helper.rb +18 -3
  129. data/spec/support/features.rb +0 -2
  130. data/spec/support/locations.rb +0 -21
  131. data/spec/support/rake.rb +41 -0
  132. data/spec/support/selectors.rb +0 -50
  133. data/spec/tasks/rake_spec.rb +33 -12
  134. data/spec/test_app_templates/lib/generators/test_app_generator.rb +12 -0
  135. data/spec/views/admin/stats/index.html.erb_spec.rb +45 -0
  136. data/spec/views/catalog/sort_and_per_page.html.erb_spec.rb +0 -1
  137. data/spec/views/dashboard/index_spec.rb +1 -1
  138. data/spec/views/generic_file/edit.html.erb_spec.rb +1 -1
  139. data/spec/views/generic_file/show.html.erb_spec.rb +1 -3
  140. data/spec/views/users/_follower_modal.html.erb_spec.rb +44 -7
  141. data/spec/views/users/_following_modal.html.erb_spec.rb +49 -7
  142. data/spec/views/users/edit.html.erb_spec.rb +72 -0
  143. data/spec/views/users/show.html.erb_spec.rb +1 -1
  144. data/sufia.gemspec +6 -2
  145. data/tasks/sufia-user.rake +14 -0
  146. metadata +130 -156
  147. data/spec/lib/sufia/id_service_spec.rb +0 -32
  148. data/spec/services/noid_spec.rb +0 -9
  149. data/spec/support/poltergeist.rb +0 -11
  150. data/spec/support/rake_output.rb +0 -20
  151. data/sufia-models/.gitignore +0 -17
  152. data/sufia-models/Gemfile +0 -4
  153. data/sufia-models/LICENSE.md +0 -177
  154. data/sufia-models/README.md +0 -39
  155. data/sufia-models/Rakefile +0 -1
  156. data/sufia-models/app/actors/sufia/generic_file/actor.rb +0 -137
  157. data/sufia-models/app/jobs/active_fedora_id_based_job.rb +0 -22
  158. data/sufia-models/app/jobs/active_fedora_pid_based_job.rb +0 -7
  159. data/sufia-models/app/jobs/audit_job.rb +0 -62
  160. data/sufia-models/app/jobs/batch_update_job.rb +0 -72
  161. data/sufia-models/app/jobs/characterize_job.rb +0 -10
  162. data/sufia-models/app/jobs/create_derivatives_job.rb +0 -14
  163. data/sufia-models/app/jobs/import_url_job.rb +0 -52
  164. data/sufia-models/app/jobs/ingest_local_file_job.rb +0 -46
  165. data/sufia-models/app/jobs/resolrize_job.rb +0 -9
  166. data/sufia-models/app/models/batch.rb +0 -36
  167. data/sufia-models/app/models/checksum_audit_log.rb +0 -21
  168. data/sufia-models/app/models/concerns/sufia/ability.rb +0 -61
  169. data/sufia-models/app/models/concerns/sufia/collection_behavior.rb +0 -24
  170. data/sufia-models/app/models/concerns/sufia/file_stat_utils.rb +0 -35
  171. data/sufia-models/app/models/concerns/sufia/generic_file.rb +0 -25
  172. data/sufia-models/app/models/concerns/sufia/generic_file/batches.rb +0 -28
  173. data/sufia-models/app/models/concerns/sufia/generic_file/characterization.rb +0 -89
  174. data/sufia-models/app/models/concerns/sufia/generic_file/content.rb +0 -13
  175. data/sufia-models/app/models/concerns/sufia/generic_file/derivatives.rb +0 -26
  176. data/sufia-models/app/models/concerns/sufia/generic_file/export.rb +0 -343
  177. data/sufia-models/app/models/concerns/sufia/generic_file/featured.rb +0 -11
  178. data/sufia-models/app/models/concerns/sufia/generic_file/full_text_indexing.rb +0 -43
  179. data/sufia-models/app/models/concerns/sufia/generic_file/indexing.rb +0 -14
  180. data/sufia-models/app/models/concerns/sufia/generic_file/metadata.rb +0 -98
  181. data/sufia-models/app/models/concerns/sufia/generic_file/mime_types.rb +0 -69
  182. data/sufia-models/app/models/concerns/sufia/generic_file/permissions.rb +0 -11
  183. data/sufia-models/app/models/concerns/sufia/generic_file/proxy_deposit.rb +0 -31
  184. data/sufia-models/app/models/concerns/sufia/generic_file/trophies.rb +0 -14
  185. data/sufia-models/app/models/concerns/sufia/generic_file/versions.rb +0 -16
  186. data/sufia-models/app/models/concerns/sufia/generic_file/virus_check.rb +0 -37
  187. data/sufia-models/app/models/concerns/sufia/model_methods.rb +0 -20
  188. data/sufia-models/app/models/concerns/sufia/user.rb +0 -137
  189. data/sufia-models/app/models/concerns/sufia/user_usage_stats.rb +0 -15
  190. data/sufia-models/app/models/datastreams/file_content_datastream.rb +0 -4
  191. data/sufia-models/app/models/datastreams/fits_datastream.rb +0 -152
  192. data/sufia-models/app/models/domain_term.rb +0 -5
  193. data/sufia-models/app/models/featured_work.rb +0 -22
  194. data/sufia-models/app/models/file_download_stat.rb +0 -18
  195. data/sufia-models/app/models/file_usage.rb +0 -34
  196. data/sufia-models/app/models/file_view_stat.rb +0 -18
  197. data/sufia-models/app/models/follow.rb +0 -12
  198. data/sufia-models/app/models/generic_file.rb +0 -3
  199. data/sufia-models/app/models/geo_names_resource.rb +0 -18
  200. data/sufia-models/app/models/group.rb +0 -8
  201. data/sufia-models/app/models/local_authority.rb +0 -86
  202. data/sufia-models/app/models/local_authority_entry.rb +0 -3
  203. data/sufia-models/app/models/proxy_deposit_request.rb +0 -85
  204. data/sufia-models/app/models/proxy_deposit_rights.rb +0 -4
  205. data/sufia-models/app/models/single_use_link.rb +0 -42
  206. data/sufia-models/app/models/subject_local_authority_entry.rb +0 -2
  207. data/sufia-models/app/models/sufia/avatar_uploader.rb +0 -20
  208. data/sufia-models/app/models/sufia/avatar_validator.rb +0 -8
  209. data/sufia-models/app/models/sufia/collection.rb +0 -5
  210. data/sufia-models/app/models/sufia/download.rb +0 -9
  211. data/sufia-models/app/models/sufia/orcid_validator.rb +0 -12
  212. data/sufia-models/app/models/sufia/pageview.rb +0 -9
  213. data/sufia-models/app/models/trophy.rb +0 -10
  214. data/sufia-models/app/models/user_stat.rb +0 -2
  215. data/sufia-models/app/models/version_committer.rb +0 -2
  216. data/sufia-models/app/services/sufia/analytics.rb +0 -50
  217. data/sufia-models/app/services/sufia/generic_file_audit_service.rb +0 -83
  218. data/sufia-models/app/services/sufia/generic_file_indexing_service.rb +0 -12
  219. data/sufia-models/app/services/sufia/id_service.rb +0 -45
  220. data/sufia-models/app/services/sufia/noid.rb +0 -22
  221. data/sufia-models/app/services/sufia/repository_audit_service.rb +0 -9
  222. data/sufia-models/config/locales/sufia.en.yml +0 -6
  223. data/sufia-models/lib/generators/sufia/models/abstract_migration_generator.rb +0 -30
  224. data/sufia-models/lib/generators/sufia/models/cached_stats_generator.rb +0 -24
  225. data/sufia-models/lib/generators/sufia/models/fulltext_generator.rb +0 -27
  226. data/sufia-models/lib/generators/sufia/models/install_generator.rb +0 -106
  227. data/sufia-models/lib/generators/sufia/models/orcid_field_generator.rb +0 -19
  228. data/sufia-models/lib/generators/sufia/models/proxies_generator.rb +0 -24
  229. data/sufia-models/lib/generators/sufia/models/templates/app/models/collection.rb +0 -2
  230. data/sufia-models/lib/generators/sufia/models/templates/config/analytics.yml +0 -9
  231. data/sufia-models/lib/generators/sufia/models/templates/config/clamav.rb +0 -1
  232. data/sufia-models/lib/generators/sufia/models/templates/config/mailboxer.rb +0 -17
  233. data/sufia-models/lib/generators/sufia/models/templates/config/mime_types.rb +0 -6
  234. data/sufia-models/lib/generators/sufia/models/templates/config/redis.yml +0 -9
  235. data/sufia-models/lib/generators/sufia/models/templates/config/redis_config.rb +0 -32
  236. data/sufia-models/lib/generators/sufia/models/templates/config/resque-pool.yml +0 -1
  237. data/sufia-models/lib/generators/sufia/models/templates/config/resque_config.rb +0 -5
  238. data/sufia-models/lib/generators/sufia/models/templates/config/setup_mail.rb +0 -3
  239. data/sufia-models/lib/generators/sufia/models/templates/config/solrconfig.xml +0 -223
  240. data/sufia-models/lib/generators/sufia/models/templates/config/sufia.rb +0 -144
  241. data/sufia-models/lib/generators/sufia/models/templates/migrations/acts_as_follower_migration.rb +0 -17
  242. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_avatars_to_users.rb +0 -15
  243. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_external_key_to_content_blocks.rb +0 -6
  244. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_groups_to_users.rb +0 -11
  245. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_ldap_attrs_to_user.rb +0 -27
  246. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_linkedin_to_users.rb +0 -5
  247. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_orcid_to_users.rb +0 -5
  248. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_social_to_users.rb +0 -13
  249. data/sufia-models/lib/generators/sufia/models/templates/migrations/change_audit_log_pid_to_generic_file_id.rb +0 -5
  250. data/sufia-models/lib/generators/sufia/models/templates/migrations/change_proxy_deposit_request_pid_to_generic_file_id.rb +0 -5
  251. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_checksum_audit_logs.rb +0 -19
  252. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_content_blocks.rb +0 -10
  253. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_featured_works.rb +0 -12
  254. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_file_download_stats.rb +0 -12
  255. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_file_view_stats.rb +0 -12
  256. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_local_authorities.rb +0 -50
  257. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_requests.rb +0 -16
  258. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_rights.rb +0 -11
  259. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_single_use_links.rb +0 -12
  260. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_tinymce_assets.rb +0 -8
  261. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_trophies.rb +0 -10
  262. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_user_stats.rb +0 -19
  263. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_version_committers.rb +0 -15
  264. data/sufia-models/lib/generators/sufia/models/update_content_blocks_generator.rb +0 -18
  265. data/sufia-models/lib/generators/sufia/models/upgrade400_generator.rb +0 -54
  266. data/sufia-models/lib/generators/sufia/models/upgrade600_generator.rb +0 -21
  267. data/sufia-models/lib/generators/sufia/models/usagestats_generator.rb +0 -19
  268. data/sufia-models/lib/generators/sufia/models/user_stats_generator.rb +0 -31
  269. data/sufia-models/lib/sufia/messages.rb +0 -66
  270. data/sufia-models/lib/sufia/models.rb +0 -34
  271. data/sufia-models/lib/sufia/models/active_fedora/redis.rb +0 -43
  272. data/sufia-models/lib/sufia/models/active_record/redis.rb +0 -56
  273. data/sufia-models/lib/sufia/models/engine.rb +0 -79
  274. data/sufia-models/lib/sufia/models/file_content.rb +0 -6
  275. data/sufia-models/lib/sufia/models/file_content/versions.rb +0 -21
  276. data/sufia-models/lib/sufia/models/resque.rb +0 -36
  277. data/sufia-models/lib/sufia/models/stats/user_stat_importer.rb +0 -108
  278. data/sufia-models/lib/sufia/models/user_local_directory_behavior.rb +0 -29
  279. data/sufia-models/lib/sufia/models/utils.rb +0 -22
  280. data/sufia-models/lib/sufia/models/version.rb +0 -5
  281. data/sufia-models/lib/sufia/models/virus_found_error.rb +0 -4
  282. data/sufia-models/lib/sufia/permissions.rb +0 -9
  283. data/sufia-models/lib/sufia/permissions/readable.rb +0 -20
  284. data/sufia-models/lib/sufia/permissions/writable.rb +0 -74
  285. data/sufia-models/lib/tasks/batch_cleanup.rake +0 -19
  286. data/sufia-models/lib/tasks/migrate.rake +0 -21
  287. data/sufia-models/lib/tasks/resque.rake +0 -13
  288. data/sufia-models/lib/tasks/stats_tasks.rake +0 -12
  289. data/sufia-models/lib/tasks/sufia-models_tasks.rake +0 -80
  290. data/sufia-models/sufia-models.gemspec +0 -52
@@ -1,11 +0,0 @@
1
- module Sufia
2
- module GenericFile
3
- module Featured
4
- extend ActiveSupport::Concern
5
-
6
- def featured?
7
- FeaturedWork.where(generic_file_id: id).exists?
8
- end
9
- end
10
- end
11
- end
@@ -1,43 +0,0 @@
1
- module Sufia
2
- module GenericFile
3
- module FullTextIndexing
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
- contains 'full_text'
8
- end
9
-
10
- def append_metadata
11
- super
12
- extract_content
13
- end
14
-
15
- private
16
-
17
- def extract_content
18
- uri = URI("#{connection_url}/update/extract?extractOnly=true&wt=json&extractFormat=text")
19
- req = Net::HTTP.new(uri.host, uri.port)
20
- resp = req.post(uri.to_s, self.content.content, {
21
- 'Content-type' => "#{self.mime_type};charset=utf-8",
22
- 'Content-Length' => self.content.content.size.to_s
23
- })
24
- raise "URL '#{uri}' returned code #{resp.code}" unless resp.code == "200"
25
- self.content.content.rewind if self.content.content.respond_to?(:rewind)
26
- extracted_text = JSON.parse(resp.body)[''].rstrip
27
- full_text.content = extracted_text if extracted_text.present?
28
- rescue => e
29
- logger.error("Error extracting content from #{self.id}: #{e.inspect}")
30
- end
31
-
32
- def connection_url
33
- case
34
- when Blacklight.connection_config[:url] then Blacklight.connection_config[:url]
35
- when Blacklight.connection_config["url"] then Blacklight.connection_config["url"]
36
- when Blacklight.connection_config[:fulltext] then Blacklight.connection_config[:fulltext]["url"]
37
- else Blacklight.connection_config[:default]["url"]
38
- end
39
- end
40
-
41
- end
42
- end
43
- end
@@ -1,14 +0,0 @@
1
- module Sufia
2
- module GenericFile
3
- module Indexing
4
- extend ActiveSupport::Concern
5
-
6
- module ClassMethods
7
- # override the default indexing service
8
- def indexer
9
- Sufia::GenericFileIndexingService
10
- end
11
- end
12
- end
13
- end
14
- end
@@ -1,98 +0,0 @@
1
- module Sufia
2
- module GenericFile
3
- module Metadata
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
-
8
- property :label, predicate: ActiveFedora::RDF::Fcrepo::Model.downloadFilename, multiple: false
9
-
10
- property :depositor, predicate: ::RDF::URI.new("http://id.loc.gov/vocabulary/relators/dpt"), multiple: false do |index|
11
- index.as :symbol, :stored_searchable
12
- end
13
-
14
- property :relative_path, predicate: ::RDF::URI.new('http://scholarsphere.psu.edu/ns#relativePath'), multiple: false
15
-
16
- property :import_url, predicate: ::RDF::URI.new('http://scholarsphere.psu.edu/ns#importUrl'), multiple: false do |index|
17
- index.as :symbol
18
- end
19
-
20
- property :part_of, predicate: ::RDF::DC.isPartOf
21
- property :resource_type, predicate: ::RDF::DC.type do |index|
22
- index.as :stored_searchable, :facetable
23
- end
24
- property :title, predicate: ::RDF::DC.title do |index|
25
- index.as :stored_searchable, :facetable
26
- end
27
- property :creator, predicate: ::RDF::DC.creator do |index|
28
- index.as :stored_searchable, :facetable
29
- end
30
- property :contributor, predicate: ::RDF::DC.contributor do |index|
31
- index.as :stored_searchable, :facetable
32
- end
33
- property :description, predicate: ::RDF::DC.description do |index|
34
- index.type :text
35
- index.as :stored_searchable
36
- end
37
- property :tag, predicate: ::RDF::DC.relation do |index|
38
- index.as :stored_searchable, :facetable
39
- end
40
- property :rights, predicate: ::RDF::DC.rights do |index|
41
- index.as :stored_searchable
42
- end
43
- property :publisher, predicate: ::RDF::DC.publisher do |index|
44
- index.as :stored_searchable, :facetable
45
- end
46
- property :date_created, predicate: ::RDF::DC.created do |index|
47
- index.as :stored_searchable
48
- end
49
-
50
- # We reserve date_uploaded for the original creation date of the record.
51
- # For example, when migrating data from a fedora3 repo to fedora4,
52
- # fedora's system created date will reflect the date when the record
53
- # was created in fedora4, but the date_uploaded will preserve the
54
- # original creation date from the old repository.
55
- property :date_uploaded, predicate: ::RDF::DC.dateSubmitted, multiple: false do |index|
56
- index.type :date
57
- index.as :stored_sortable
58
- end
59
-
60
- property :date_modified, predicate: ::RDF::DC.modified, multiple: false do |index|
61
- index.type :date
62
- index.as :stored_sortable
63
- end
64
- property :subject, predicate: ::RDF::DC.subject do |index|
65
- index.as :stored_searchable, :facetable
66
- end
67
- property :language, predicate: ::RDF::DC.language do |index|
68
- index.as :stored_searchable, :facetable
69
- end
70
- property :identifier, predicate: ::RDF::DC.identifier do |index|
71
- index.as :stored_searchable
72
- end
73
- property :based_near, predicate: ::RDF::FOAF.based_near do |index|
74
- index.as :stored_searchable, :facetable
75
- end
76
- property :related_url, predicate: ::RDF::RDFS.seeAlso do |index|
77
- index.as :stored_searchable
78
- end
79
- property :bibliographic_citation, predicate: ::RDF::DC.bibliographicCitation do |index|
80
- index.as :stored_searchable
81
- end
82
- property :source, predicate: ::RDF::DC.source do |index|
83
- index.as :stored_searchable
84
- end
85
-
86
- # TODO: Move this somewhere more appropriate
87
- begin
88
- LocalAuthority.register_vocabulary(self, "subject", "lc_subjects")
89
- LocalAuthority.register_vocabulary(self, "language", "lexvo_languages")
90
- LocalAuthority.register_vocabulary(self, "tag", "lc_genres")
91
- rescue
92
- puts "tables for vocabularies missing"
93
- end
94
- end
95
-
96
- end
97
- end
98
- end
@@ -1,69 +0,0 @@
1
- module Sufia
2
- module GenericFile
3
- module MimeTypes
4
- extend ActiveSupport::Concern
5
-
6
- def pdf?
7
- self.class.pdf_mime_types.include? self.mime_type
8
- end
9
-
10
- def image?
11
- self.class.image_mime_types.include? self.mime_type
12
- end
13
-
14
- def video?
15
- self.class.video_mime_types.include? self.mime_type
16
- end
17
-
18
- def audio?
19
- self.class.audio_mime_types.include? self.mime_type
20
- end
21
-
22
- def office_document?
23
- self.class.office_document_mime_types.include? self.mime_type
24
- end
25
-
26
- def collection?
27
- false
28
- end
29
-
30
- def file_format
31
- return nil if self.mime_type.blank? and self.format_label.blank?
32
- return self.mime_type.split('/')[1]+ " ("+self.format_label.join(", ")+")" unless self.mime_type.blank? or self.format_label.blank?
33
- return self.mime_type.split('/')[1] unless self.mime_type.blank?
34
- return self.format_label
35
- end
36
-
37
- module ClassMethods
38
- def image_mime_types
39
- ['image/png', 'image/jpeg', 'image/jpg', 'image/jp2', 'image/bmp', 'image/gif', 'image/tiff']
40
- end
41
-
42
- def pdf_mime_types
43
- ['application/pdf']
44
- end
45
-
46
- def video_mime_types
47
- ['video/mpeg', 'video/mp4', 'video/webm', 'video/x-msvideo', 'video/avi', 'video/quicktime', 'application/mxf']
48
- end
49
-
50
- def audio_mime_types
51
- # audio/x-wave is the mime type that fits 0.6.0 returns for a wav file.
52
- # audio/mpeg is the mime type that fits 0.6.0 returns for an mp3 file.
53
- ['audio/mp3', 'audio/mpeg', 'audio/wav', 'audio/x-wave', 'audio/x-wav', 'audio/ogg']
54
- end
55
-
56
- def office_document_mime_types
57
- ['text/rtf',
58
- 'application/msword',
59
- 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
60
- 'application/vnd.oasis.opendocument.text',
61
- 'application/vnd.ms-excel',
62
- 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
63
- 'application/vnd.ms-powerpoint',
64
- 'application/vnd.openxmlformats-officedocument.presentationml.presentation']
65
- end
66
- end
67
- end
68
- end
69
- end
@@ -1,11 +0,0 @@
1
- module Sufia
2
- module GenericFile
3
- module Permissions
4
- extend ActiveSupport::Concern
5
-
6
- include Sufia::Permissions::Writable
7
- include Sufia::Permissions::Readable
8
-
9
- end
10
- end
11
- end
@@ -1,31 +0,0 @@
1
- module Sufia
2
- module GenericFile
3
- module ProxyDeposit
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
- property :proxy_depositor, predicate: ::RDF::URI.new('http://scholarsphere.psu.edu/ns#proxyDepositor'), multiple: false do |index|
8
- index.as :symbol
9
- end
10
-
11
- # This value is set when a user indicates they are depositing this for someone else
12
- property :on_behalf_of, predicate: ::RDF::URI.new('http://scholarsphere.psu.edu/ns#onBehalfOf'), multiple: false do |index|
13
- index.as :symbol
14
- end
15
-
16
- after_create :create_transfer_request
17
- end
18
-
19
-
20
- def create_transfer_request
21
- Sufia.queue.push(ContentDepositorChangeEventJob.new(id, on_behalf_of)) if on_behalf_of.present?
22
- end
23
-
24
- def request_transfer_to(target)
25
- raise ArgumentError, "Must provide a target" unless target
26
- deposit_user = ::User.find_by_user_key(depositor)
27
- ProxyDepositRequest.create!(generic_file_id: id, receiving_user: target, sending_user: deposit_user)
28
- end
29
- end
30
- end
31
- end
@@ -1,14 +0,0 @@
1
- module Sufia
2
- module GenericFile
3
- module Trophies
4
- extend ActiveSupport::Concern
5
- included do
6
- before_destroy :cleanup_trophies
7
- end
8
-
9
- def cleanup_trophies
10
- Trophy.destroy_all(generic_file_id: self.id)
11
- end
12
- end
13
- end
14
- end
@@ -1,16 +0,0 @@
1
- module Sufia
2
- module GenericFile
3
- module Versions
4
- @@count = 0
5
- def record_version_committer(user)
6
- version = content.latest_version
7
- # content datastream not (yet?) present
8
- return if version.nil?
9
- @@count += 1
10
- # raise "Recording #{@@count} #{version.uri} for #{user.user_key}" if @@count == 3
11
- VersionCommitter.create(version_id: version.uri, committer_login: user.user_key)
12
- end
13
-
14
- end
15
- end
16
- end
@@ -1,37 +0,0 @@
1
- module Sufia
2
- module GenericFile
3
- module VirusCheck
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
- validate :detect_viruses
8
- end
9
-
10
- # Default behavior is to raise a validation error and halt the save if a virus is found
11
- def detect_viruses
12
- return unless content.changed?
13
- Sufia::GenericFile::Actor.virus_check(local_path_for_content)
14
- true
15
- rescue Sufia::VirusFoundError => virus
16
- logger.warn(virus.message)
17
- errors.add(:base, virus.message)
18
- false
19
- end
20
-
21
- private
22
-
23
- def local_path_for_content
24
- if content.content.respond_to?(:path)
25
- content.content.path
26
- else
27
- Tempfile.open('') do |t|
28
- t.binmode
29
- t.write(content.content)
30
- t.close
31
- t.path
32
- end
33
- end
34
- end
35
- end
36
- end
37
- end
@@ -1,20 +0,0 @@
1
- module Sufia
2
- module ModelMethods
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
- include Hydra::WithDepositor
7
- end
8
-
9
- def to_s
10
- if title.present?
11
- Array(title).join(" | ")
12
- elsif label.present?
13
- Array(label).join(" | ")
14
- else
15
- "No Title"
16
- end
17
- end
18
-
19
- end
20
- end
@@ -1,137 +0,0 @@
1
- module Sufia::User
2
- extend ActiveSupport::Concern
3
-
4
- included do
5
- # Adds acts_as_messageable for user mailboxes
6
- include Mailboxer::Models::Messageable
7
- # Connects this user object to Blacklight's Bookmarks and Folders.
8
- include Blacklight::User
9
- include Hydra::User
10
-
11
- delegate :can?, :cannot?, to: :ability
12
-
13
- # set this up as a messageable object
14
- acts_as_messageable
15
-
16
- # Users should be able to follow things
17
- acts_as_follower
18
- # Users should be followable
19
- acts_as_followable
20
-
21
- # Set up proxy-related relationships
22
- has_many :proxy_deposit_requests, foreign_key: 'receiving_user_id'
23
- has_many :deposit_rights_given, foreign_key: 'grantor_id', class_name: 'ProxyDepositRights', dependent: :destroy
24
- has_many :can_receive_deposits_from, through: :deposit_rights_given, source: :grantee
25
- has_many :deposit_rights_received, foreign_key: 'grantee_id', class_name: 'ProxyDepositRights', dependent: :destroy
26
- has_many :can_make_deposits_for, through: :deposit_rights_received, source: :grantor
27
-
28
- # Validate and normalize ORCIDs
29
- validates_with OrcidValidator
30
- after_validation :normalize_orcid
31
-
32
- # Set up user profile avatars
33
- mount_uploader :avatar, AvatarUploader, mount_on: :avatar_file_name
34
- validates_with AvatarValidator
35
-
36
- has_many :trophies
37
- attr_accessor :update_directory
38
- end
39
-
40
- # Coerce the ORCID into URL format
41
- def normalize_orcid
42
- # Skip normalization if:
43
- # 1. validation has already flagged the ORCID as invalid
44
- # 2. the orcid field is blank
45
- # 3. the orcid is already in its normalized form
46
- return if self.errors[:orcid].first.present? || self.orcid.blank? || self.orcid.starts_with?('http://orcid.org/')
47
- bare_orcid = Sufia::OrcidValidator.match(self.orcid).string
48
- self.orcid = "http://orcid.org/#{bare_orcid}"
49
- end
50
-
51
- # Format the json for select2 which requires just an id and a field called text.
52
- # If we need an alternate format we should probably look at a json template gem
53
- def as_json(opts = nil)
54
- { id: user_key, text: display_name ? "#{display_name} (#{user_key})" : user_key }
55
- end
56
-
57
- # Populate user instance with attributes from remote system (e.g., LDAP)
58
- # There is no default implementation -- override this in your application
59
- def populate_attributes
60
- end
61
-
62
- def email_address
63
- self.email
64
- end
65
-
66
- def name
67
- self.display_name.titleize || raise
68
- rescue
69
- self.user_key
70
- end
71
-
72
- # Redefine this for more intuitive keys in Redis
73
- def to_param
74
- # hack because rails doesn't like periods in urls.
75
- user_key.gsub(/\./, '-dot-')
76
- end
77
-
78
- def trophy_files
79
- trophies.map do |t|
80
- ::GenericFile.load_instance_from_solr(t.generic_file_id)
81
- end
82
- end
83
-
84
- # method needed for messaging
85
- def mailboxer_email(obj=nil)
86
- nil
87
- end
88
-
89
- # The basic groups method, override or will fallback to Sufia::Ldap::User
90
- def groups
91
- @groups ||= self.group_list ? self.group_list.split(";?;") : []
92
- end
93
-
94
- def ability
95
- @ability ||= ::Ability.new(self)
96
- end
97
-
98
- def get_all_user_activity( since = DateTime.now.to_i - 8640)
99
- events = self.events.reverse.collect { |event| event if event[:timestamp].to_i > since }.compact
100
- profile_events = self.profile_events.reverse.collect { |event| event if event[:timestamp].to_i > since }.compact
101
- events.concat(profile_events).sort { |a, b| b[:timestamp].to_i <=> a[:timestamp].to_i }
102
- end
103
-
104
- module ClassMethods
105
- def current
106
- Thread.current[:user]
107
- end
108
-
109
- def current=(user)
110
- Thread.current[:user] = user
111
- end
112
-
113
- # Override this method if you aren't using email/password
114
- def audituser
115
- User.find_by_user_key(audituser_key) || User.create!(Devise.authentication_keys.first => audituser_key, password: Devise.friendly_token[0,20])
116
- end
117
-
118
- # Override this method if you aren't using email as the userkey
119
- def audituser_key
120
- 'audituser@example.com'
121
- end
122
-
123
- # Override this method if you aren't using email/password
124
- def batchuser
125
- User.find_by_user_key(batchuser_key) || User.create!(Devise.authentication_keys.first => batchuser_key, password: Devise.friendly_token[0,20])
126
- end
127
-
128
- # Override this method if you aren't using email as the userkey
129
- def batchuser_key
130
- 'batchuser@example.com'
131
- end
132
-
133
- def from_url_component(component)
134
- User.find_by_user_key(component.gsub(/-dot-/, '.'))
135
- end
136
- end
137
- end