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