sufia 6.0.0 → 6.1.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 (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