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.
- checksums.yaml +4 -4
- data/.travis.yml +2 -5
- data/CONTRIBUTING.md +4 -4
- data/Gemfile +2 -1
- data/History.md +69 -0
- data/README.md +84 -4
- data/SUFIA_VERSION +1 -1
- data/app/assets/images/zotero.png +0 -0
- data/app/assets/javascripts/sufia/featured_works.js +20 -3
- data/app/assets/stylesheets/generic_files.css.erb +2 -2
- data/app/assets/stylesheets/sufia.css.scss +2 -2
- data/app/assets/stylesheets/sufia/_buttons.scss +2 -2
- data/app/assets/stylesheets/sufia/_collections.scss +4 -4
- data/app/assets/stylesheets/sufia/_dashboard.scss +1 -1
- data/app/assets/stylesheets/sufia/_file-listing.scss +3 -0
- data/app/assets/stylesheets/sufia/_modal.scss +4 -0
- data/app/assets/stylesheets/sufia/_settings.scss +4 -3
- data/app/assets/stylesheets/sufia/_styles.scss +4 -0
- data/app/controllers/admin/stats_controller.rb +68 -0
- data/app/controllers/api/items_controller.rb +78 -0
- data/app/controllers/api/zotero_controller.rb +70 -0
- data/app/controllers/authorities_controller.rb +6 -5
- data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +2 -1
- data/app/controllers/concerns/sufia/breadcrumbs.rb +1 -1
- data/app/controllers/concerns/sufia/depositors_controller_behavior.rb +11 -0
- data/app/controllers/concerns/sufia/files_controller/browse_everything.rb +1 -1
- data/app/controllers/concerns/sufia/files_controller/local_ingest_behavior.rb +1 -1
- data/app/controllers/concerns/sufia/files_controller_behavior.rb +23 -11
- data/app/controllers/concerns/sufia/my_controller_behavior.rb +1 -7
- data/app/controllers/concerns/sufia/users_controller_behavior.rb +1 -2
- data/app/controllers/my/collections_controller.rb +1 -0
- data/app/controllers/my/files_controller.rb +1 -1
- data/app/helpers/sufia/sufia_helper_behavior.rb +28 -16
- data/app/models/my_search_builder.rb +4 -0
- data/app/search_builders/sufia/my_search_builder_behavior.rb +20 -0
- data/app/search_builders/sufia/search_builder.rb +1 -1
- data/app/views/admin/stats/index.html.erb +68 -0
- data/app/views/collections/_action_menu.html.erb +22 -20
- data/app/views/collections/_collection.html.erb +1 -1
- data/app/views/collections/_form_for_select_collection.html.erb +5 -3
- data/app/views/generic_files/_show_actions.html.erb +4 -2
- data/app/views/generic_files/show.html.erb +1 -1
- data/app/views/layouts/sufia-dashboard.html.erb +5 -4
- data/app/views/layouts/sufia-one-column.html.erb +2 -0
- data/app/views/layouts/sufia-two-column.html.erb +6 -4
- data/app/views/my/_facet_layout.html.erb +2 -2
- data/app/views/my/_facets.html.erb +4 -6
- data/app/views/my/index.html.erb +4 -3
- data/app/views/users/_edit_primary.html.erb +18 -17
- data/app/views/users/_follower_modal.html.erb +5 -1
- data/app/views/users/_following_modal.html.erb +5 -1
- data/app/views/users/_user_info.html.erb +6 -1
- data/app/views/users/_zotero.html.erb +12 -0
- data/config/locales/sufia.en.yml +10 -1
- data/config/routes.rb +23 -1
- data/lib/generators/sufia/admin_stat_generator.rb +17 -0
- data/lib/generators/sufia/install_generator.rb +8 -3
- data/{sufia-models/lib/generators/sufia/models/templates/config/resque_admin.rb → lib/generators/sufia/templates/sufia/stats_admin.rb} +3 -3
- data/lib/generators/sufia/upgrade400_generator.rb +2 -2
- data/lib/sufia.rb +3 -0
- data/lib/sufia/arkivo.rb +11 -0
- data/lib/sufia/arkivo/actor.rb +95 -0
- data/lib/sufia/arkivo/config.rb +11 -0
- data/lib/sufia/arkivo/create_subscription_job.rb +67 -0
- data/lib/sufia/arkivo/metadata_munger.rb +51 -0
- data/lib/sufia/arkivo/schema_validator.rb +55 -0
- data/lib/sufia/form_builder.rb +1 -1
- data/lib/sufia/inflections.rb +3 -0
- data/lib/sufia/version.rb +1 -1
- data/lib/sufia/zotero.rb +6 -0
- data/lib/sufia/zotero/config.rb +15 -0
- data/solr_conf/conf/solrconfig.xml +11 -0
- data/spec/controllers/admin_stats_controller_spec.rb +73 -0
- data/spec/controllers/api/items_controller_spec.rb +476 -0
- data/spec/controllers/api/zotero_controller_spec.rb +178 -0
- data/spec/controllers/batch_edits_controller_spec.rb +7 -0
- data/spec/controllers/collections_controller_spec.rb +1 -1
- data/spec/controllers/dashboard_controller_spec.rb +1 -1
- data/spec/controllers/depositors_controller_spec.rb +9 -5
- data/spec/controllers/generic_files_controller_spec.rb +5 -4
- data/spec/controllers/mailbox_controller_spec.rb +2 -2
- data/spec/controllers/my/collections_controller_spec.rb +1 -2
- data/spec/controllers/my/files_controller_spec.rb +5 -5
- data/spec/controllers/my/shares_controller_spec.rb +15 -3
- data/spec/controllers/pages_controller_spec.rb +1 -1
- data/spec/controllers/users_controller_spec.rb +10 -9
- data/spec/factories/api_items.rb +91 -0
- data/spec/factories/generic_files.rb +4 -0
- data/spec/factories/users.rb +4 -4
- data/spec/features/featured_item_spec.rb +26 -0
- data/spec/features/ingest_upload_files_spec.rb +2 -3
- data/spec/features/proxy_spec.rb +0 -1
- data/spec/helpers/permissions_helper_spec.rb +2 -2
- data/spec/helpers/sufia_helper_spec.rb +11 -5
- data/spec/inputs/select_with_help_input_spec.rb +2 -2
- data/spec/javascripts/helpers/.gitkeep +0 -0
- data/spec/javascripts/helpers/jasmine-jquery.js +832 -0
- data/spec/javascripts/jasmine_spec.rb +31 -0
- data/spec/javascripts/notify_update_link_spec.js +8 -0
- data/spec/javascripts/single_use_link_spec.js.coffee +23 -0
- data/spec/javascripts/support/jasmine.yml +124 -0
- data/spec/javascripts/support/jasmine_helper.rb +15 -0
- data/spec/javascripts/terms_of_service_spec.js.coffee +32 -0
- data/spec/javascripts/toggle_icon_spec.js +11 -0
- data/spec/jobs/active_fedora_id_based_job_spec.rb +3 -3
- data/spec/jobs/import_url_job_spec.rb +0 -2
- data/spec/lib/sufia/arkivo/actor_spec.rb +139 -0
- data/spec/lib/sufia/arkivo/create_subscription_job_spec.rb +54 -0
- data/spec/lib/sufia/arkivo/metadata_munger_spec.rb +48 -0
- data/spec/lib/sufia/arkivo/schema_validator_spec.rb +65 -0
- data/spec/lib/sufia/upload_complete_behavior_spec.rb +1 -1
- data/spec/lib/sufia/user_stat_importer_spec.rb +60 -0
- data/spec/lib/sufia/zotero/config_spec.rb +30 -0
- data/spec/models/collection_spec.rb +36 -7
- data/spec/models/file_download_stat_spec.rb +5 -5
- data/spec/models/file_usage_spec.rb +23 -0
- data/spec/models/file_view_stat_spec.rb +6 -6
- data/spec/models/fits_datastream_spec.rb +0 -5
- data/spec/models/generic_file_spec.rb +49 -14
- data/spec/models/local_authority_spec.rb +1 -1
- data/spec/models/proxy_deposit_request_spec.rb +1 -1
- data/spec/models/trophy_spec.rb +8 -8
- data/spec/models/user_spec.rb +33 -0
- data/spec/presenters/sufia/collection_presenter_spec.rb +1 -1
- data/spec/routing/api_route_spec.rb +91 -0
- data/spec/routing/route_spec.rb +1 -1
- data/spec/services/generic_file_audit_service_spec.rb +44 -8
- data/spec/spec_helper.rb +18 -3
- data/spec/support/features.rb +0 -2
- data/spec/support/locations.rb +0 -21
- data/spec/support/rake.rb +41 -0
- data/spec/support/selectors.rb +0 -50
- data/spec/tasks/rake_spec.rb +33 -12
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +12 -0
- data/spec/views/admin/stats/index.html.erb_spec.rb +45 -0
- data/spec/views/catalog/sort_and_per_page.html.erb_spec.rb +0 -1
- data/spec/views/dashboard/index_spec.rb +1 -1
- data/spec/views/generic_file/edit.html.erb_spec.rb +1 -1
- data/spec/views/generic_file/show.html.erb_spec.rb +1 -3
- data/spec/views/users/_follower_modal.html.erb_spec.rb +44 -7
- data/spec/views/users/_following_modal.html.erb_spec.rb +49 -7
- data/spec/views/users/edit.html.erb_spec.rb +72 -0
- data/spec/views/users/show.html.erb_spec.rb +1 -1
- data/sufia.gemspec +6 -2
- data/tasks/sufia-user.rake +14 -0
- metadata +130 -156
- data/spec/lib/sufia/id_service_spec.rb +0 -32
- data/spec/services/noid_spec.rb +0 -9
- data/spec/support/poltergeist.rb +0 -11
- data/spec/support/rake_output.rb +0 -20
- data/sufia-models/.gitignore +0 -17
- data/sufia-models/Gemfile +0 -4
- data/sufia-models/LICENSE.md +0 -177
- data/sufia-models/README.md +0 -39
- data/sufia-models/Rakefile +0 -1
- data/sufia-models/app/actors/sufia/generic_file/actor.rb +0 -137
- data/sufia-models/app/jobs/active_fedora_id_based_job.rb +0 -22
- data/sufia-models/app/jobs/active_fedora_pid_based_job.rb +0 -7
- data/sufia-models/app/jobs/audit_job.rb +0 -62
- data/sufia-models/app/jobs/batch_update_job.rb +0 -72
- data/sufia-models/app/jobs/characterize_job.rb +0 -10
- data/sufia-models/app/jobs/create_derivatives_job.rb +0 -14
- data/sufia-models/app/jobs/import_url_job.rb +0 -52
- data/sufia-models/app/jobs/ingest_local_file_job.rb +0 -46
- data/sufia-models/app/jobs/resolrize_job.rb +0 -9
- data/sufia-models/app/models/batch.rb +0 -36
- data/sufia-models/app/models/checksum_audit_log.rb +0 -21
- data/sufia-models/app/models/concerns/sufia/ability.rb +0 -61
- data/sufia-models/app/models/concerns/sufia/collection_behavior.rb +0 -24
- data/sufia-models/app/models/concerns/sufia/file_stat_utils.rb +0 -35
- data/sufia-models/app/models/concerns/sufia/generic_file.rb +0 -25
- data/sufia-models/app/models/concerns/sufia/generic_file/batches.rb +0 -28
- data/sufia-models/app/models/concerns/sufia/generic_file/characterization.rb +0 -89
- data/sufia-models/app/models/concerns/sufia/generic_file/content.rb +0 -13
- data/sufia-models/app/models/concerns/sufia/generic_file/derivatives.rb +0 -26
- data/sufia-models/app/models/concerns/sufia/generic_file/export.rb +0 -343
- data/sufia-models/app/models/concerns/sufia/generic_file/featured.rb +0 -11
- data/sufia-models/app/models/concerns/sufia/generic_file/full_text_indexing.rb +0 -43
- data/sufia-models/app/models/concerns/sufia/generic_file/indexing.rb +0 -14
- data/sufia-models/app/models/concerns/sufia/generic_file/metadata.rb +0 -98
- data/sufia-models/app/models/concerns/sufia/generic_file/mime_types.rb +0 -69
- data/sufia-models/app/models/concerns/sufia/generic_file/permissions.rb +0 -11
- data/sufia-models/app/models/concerns/sufia/generic_file/proxy_deposit.rb +0 -31
- data/sufia-models/app/models/concerns/sufia/generic_file/trophies.rb +0 -14
- data/sufia-models/app/models/concerns/sufia/generic_file/versions.rb +0 -16
- data/sufia-models/app/models/concerns/sufia/generic_file/virus_check.rb +0 -37
- data/sufia-models/app/models/concerns/sufia/model_methods.rb +0 -20
- data/sufia-models/app/models/concerns/sufia/user.rb +0 -137
- data/sufia-models/app/models/concerns/sufia/user_usage_stats.rb +0 -15
- data/sufia-models/app/models/datastreams/file_content_datastream.rb +0 -4
- data/sufia-models/app/models/datastreams/fits_datastream.rb +0 -152
- data/sufia-models/app/models/domain_term.rb +0 -5
- data/sufia-models/app/models/featured_work.rb +0 -22
- data/sufia-models/app/models/file_download_stat.rb +0 -18
- data/sufia-models/app/models/file_usage.rb +0 -34
- data/sufia-models/app/models/file_view_stat.rb +0 -18
- data/sufia-models/app/models/follow.rb +0 -12
- data/sufia-models/app/models/generic_file.rb +0 -3
- data/sufia-models/app/models/geo_names_resource.rb +0 -18
- data/sufia-models/app/models/group.rb +0 -8
- data/sufia-models/app/models/local_authority.rb +0 -86
- data/sufia-models/app/models/local_authority_entry.rb +0 -3
- data/sufia-models/app/models/proxy_deposit_request.rb +0 -85
- data/sufia-models/app/models/proxy_deposit_rights.rb +0 -4
- data/sufia-models/app/models/single_use_link.rb +0 -42
- data/sufia-models/app/models/subject_local_authority_entry.rb +0 -2
- data/sufia-models/app/models/sufia/avatar_uploader.rb +0 -20
- data/sufia-models/app/models/sufia/avatar_validator.rb +0 -8
- data/sufia-models/app/models/sufia/collection.rb +0 -5
- data/sufia-models/app/models/sufia/download.rb +0 -9
- data/sufia-models/app/models/sufia/orcid_validator.rb +0 -12
- data/sufia-models/app/models/sufia/pageview.rb +0 -9
- data/sufia-models/app/models/trophy.rb +0 -10
- data/sufia-models/app/models/user_stat.rb +0 -2
- data/sufia-models/app/models/version_committer.rb +0 -2
- data/sufia-models/app/services/sufia/analytics.rb +0 -50
- data/sufia-models/app/services/sufia/generic_file_audit_service.rb +0 -83
- data/sufia-models/app/services/sufia/generic_file_indexing_service.rb +0 -12
- data/sufia-models/app/services/sufia/id_service.rb +0 -45
- data/sufia-models/app/services/sufia/noid.rb +0 -22
- data/sufia-models/app/services/sufia/repository_audit_service.rb +0 -9
- data/sufia-models/config/locales/sufia.en.yml +0 -6
- data/sufia-models/lib/generators/sufia/models/abstract_migration_generator.rb +0 -30
- data/sufia-models/lib/generators/sufia/models/cached_stats_generator.rb +0 -24
- data/sufia-models/lib/generators/sufia/models/fulltext_generator.rb +0 -27
- data/sufia-models/lib/generators/sufia/models/install_generator.rb +0 -106
- data/sufia-models/lib/generators/sufia/models/orcid_field_generator.rb +0 -19
- data/sufia-models/lib/generators/sufia/models/proxies_generator.rb +0 -24
- data/sufia-models/lib/generators/sufia/models/templates/app/models/collection.rb +0 -2
- data/sufia-models/lib/generators/sufia/models/templates/config/analytics.yml +0 -9
- data/sufia-models/lib/generators/sufia/models/templates/config/clamav.rb +0 -1
- data/sufia-models/lib/generators/sufia/models/templates/config/mailboxer.rb +0 -17
- data/sufia-models/lib/generators/sufia/models/templates/config/mime_types.rb +0 -6
- data/sufia-models/lib/generators/sufia/models/templates/config/redis.yml +0 -9
- data/sufia-models/lib/generators/sufia/models/templates/config/redis_config.rb +0 -32
- data/sufia-models/lib/generators/sufia/models/templates/config/resque-pool.yml +0 -1
- data/sufia-models/lib/generators/sufia/models/templates/config/resque_config.rb +0 -5
- data/sufia-models/lib/generators/sufia/models/templates/config/setup_mail.rb +0 -3
- data/sufia-models/lib/generators/sufia/models/templates/config/solrconfig.xml +0 -223
- data/sufia-models/lib/generators/sufia/models/templates/config/sufia.rb +0 -144
- data/sufia-models/lib/generators/sufia/models/templates/migrations/acts_as_follower_migration.rb +0 -17
- data/sufia-models/lib/generators/sufia/models/templates/migrations/add_avatars_to_users.rb +0 -15
- data/sufia-models/lib/generators/sufia/models/templates/migrations/add_external_key_to_content_blocks.rb +0 -6
- data/sufia-models/lib/generators/sufia/models/templates/migrations/add_groups_to_users.rb +0 -11
- data/sufia-models/lib/generators/sufia/models/templates/migrations/add_ldap_attrs_to_user.rb +0 -27
- data/sufia-models/lib/generators/sufia/models/templates/migrations/add_linkedin_to_users.rb +0 -5
- data/sufia-models/lib/generators/sufia/models/templates/migrations/add_orcid_to_users.rb +0 -5
- data/sufia-models/lib/generators/sufia/models/templates/migrations/add_social_to_users.rb +0 -13
- data/sufia-models/lib/generators/sufia/models/templates/migrations/change_audit_log_pid_to_generic_file_id.rb +0 -5
- data/sufia-models/lib/generators/sufia/models/templates/migrations/change_proxy_deposit_request_pid_to_generic_file_id.rb +0 -5
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_checksum_audit_logs.rb +0 -19
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_content_blocks.rb +0 -10
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_featured_works.rb +0 -12
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_file_download_stats.rb +0 -12
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_file_view_stats.rb +0 -12
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_local_authorities.rb +0 -50
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_requests.rb +0 -16
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_rights.rb +0 -11
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_single_use_links.rb +0 -12
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_tinymce_assets.rb +0 -8
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_trophies.rb +0 -10
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_user_stats.rb +0 -19
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_version_committers.rb +0 -15
- data/sufia-models/lib/generators/sufia/models/update_content_blocks_generator.rb +0 -18
- data/sufia-models/lib/generators/sufia/models/upgrade400_generator.rb +0 -54
- data/sufia-models/lib/generators/sufia/models/upgrade600_generator.rb +0 -21
- data/sufia-models/lib/generators/sufia/models/usagestats_generator.rb +0 -19
- data/sufia-models/lib/generators/sufia/models/user_stats_generator.rb +0 -31
- data/sufia-models/lib/sufia/messages.rb +0 -66
- data/sufia-models/lib/sufia/models.rb +0 -34
- data/sufia-models/lib/sufia/models/active_fedora/redis.rb +0 -43
- data/sufia-models/lib/sufia/models/active_record/redis.rb +0 -56
- data/sufia-models/lib/sufia/models/engine.rb +0 -79
- data/sufia-models/lib/sufia/models/file_content.rb +0 -6
- data/sufia-models/lib/sufia/models/file_content/versions.rb +0 -21
- data/sufia-models/lib/sufia/models/resque.rb +0 -36
- data/sufia-models/lib/sufia/models/stats/user_stat_importer.rb +0 -108
- data/sufia-models/lib/sufia/models/user_local_directory_behavior.rb +0 -29
- data/sufia-models/lib/sufia/models/utils.rb +0 -22
- data/sufia-models/lib/sufia/models/version.rb +0 -5
- data/sufia-models/lib/sufia/models/virus_found_error.rb +0 -4
- data/sufia-models/lib/sufia/permissions.rb +0 -9
- data/sufia-models/lib/sufia/permissions/readable.rb +0 -20
- data/sufia-models/lib/sufia/permissions/writable.rb +0 -74
- data/sufia-models/lib/tasks/batch_cleanup.rake +0 -19
- data/sufia-models/lib/tasks/migrate.rake +0 -21
- data/sufia-models/lib/tasks/resque.rake +0 -13
- data/sufia-models/lib/tasks/stats_tasks.rake +0 -12
- data/sufia-models/lib/tasks/sufia-models_tasks.rake +0 -80
- data/sufia-models/sufia-models.gemspec +0 -52
|
@@ -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,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,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,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
|