sufia 6.0.0.rc2 → 6.0.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (198) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +5 -5
  3. data/History.md +14 -0
  4. data/LICENSE +15 -0
  5. data/SUFIA_VERSION +1 -1
  6. data/app/assets/javascripts/sufia/batch_edit.js +1 -1
  7. data/app/assets/javascripts/sufia/permissions.js +8 -12
  8. data/app/assets/stylesheets/sufia.css.scss +1 -1
  9. data/app/assets/stylesheets/sufia/_multi_value_fields.css.scss +67 -0
  10. data/app/assets/stylesheets/sufia/_settings.scss +1 -0
  11. data/app/assets/stylesheets/sufia/_styles.scss +4 -0
  12. data/app/assets/stylesheets/sufia/_tinymce.scss +14 -0
  13. data/app/controllers/batch_controller.rb +11 -2
  14. data/app/controllers/concerns/sufia/breadcrumbs.rb +2 -3
  15. data/app/controllers/concerns/sufia/collections_controller_behavior.rb +0 -1
  16. data/app/controllers/concerns/sufia/contact_form_controller_behavior.rb +1 -2
  17. data/app/controllers/concerns/sufia/controller.rb +1 -7
  18. data/app/controllers/concerns/sufia/downloads_controller_behavior.rb +3 -8
  19. data/app/controllers/concerns/sufia/files_controller/local_ingest_behavior.rb +2 -3
  20. data/app/controllers/concerns/sufia/files_controller/upload_complete_behavior.rb +1 -2
  21. data/app/controllers/concerns/sufia/files_controller_behavior.rb +27 -14
  22. data/app/controllers/concerns/sufia/homepage_controller.rb +3 -2
  23. data/app/controllers/content_blocks_controller.rb +17 -1
  24. data/app/controllers/downloads_controller.rb +0 -1
  25. data/app/controllers/my/shares_controller.rb +1 -0
  26. data/app/controllers/single_use_links_controller.rb +0 -1
  27. data/app/controllers/single_use_links_viewer_controller.rb +3 -8
  28. data/app/forms/sufia/forms/generic_file_edit_form.rb +1 -8
  29. data/app/helpers/content_block_helper.rb +30 -10
  30. data/app/helpers/generic_file_helper.rb +4 -4
  31. data/app/helpers/sufia/dashboard_helper_behavior.rb +2 -2
  32. data/app/helpers/sufia/sufia_helper_behavior.rb +4 -4
  33. data/app/helpers/trophy_helper.rb +3 -3
  34. data/app/jobs/content_delete_event_job.rb +1 -2
  35. data/app/jobs/content_deposit_event_job.rb +1 -1
  36. data/app/jobs/content_depositor_change_event_job.rb +1 -1
  37. data/app/jobs/content_new_version_event_job.rb +1 -1
  38. data/app/jobs/content_restored_version_event_job.rb +1 -1
  39. data/app/jobs/content_update_event_job.rb +1 -1
  40. data/app/models/concerns/sufia/solr_document_behavior.rb +5 -9
  41. data/app/models/content_block.rb +20 -0
  42. data/app/models/featured_work_list.rb +4 -0
  43. data/app/presenters/sufia/collection_presenter.rb +14 -2
  44. data/app/presenters/sufia/generic_file_presenter.rb +16 -0
  45. data/app/presenters/sufia/version_list_presenter.rb +1 -1
  46. data/app/views/batch/_metadata.html.erb +4 -4
  47. data/app/views/batch_edits/edit.html.erb +1 -1
  48. data/app/views/collections/_action_menu.html.erb +4 -5
  49. data/app/views/collections/_show_descriptions.html.erb +1 -5
  50. data/app/views/collections/_show_document_list.html.erb +0 -2
  51. data/app/views/collections/_show_document_list_menu.html.erb +5 -6
  52. data/app/views/collections/_show_document_list_row.html.erb +9 -9
  53. data/app/views/collections/_sort_and_per_page.html.erb +1 -1
  54. data/app/views/collections/_view_type_group.html.erb +1 -1
  55. data/app/views/collections/show.html.erb +3 -3
  56. data/app/views/generic_files/_asset_permissions_denial_flash.html.erb +1 -1
  57. data/app/views/generic_files/_asset_saved_flash.html.erb +1 -1
  58. data/app/views/generic_files/_asset_updated_flash.html.erb +1 -1
  59. data/app/views/generic_files/_browse_everything.html.erb +4 -4
  60. data/app/views/generic_files/_media_display.html.erb +9 -9
  61. data/app/views/generic_files/_permission_form.html.erb +1 -1
  62. data/app/views/generic_files/_show_actions.html.erb +1 -1
  63. data/app/views/generic_files/_show_collections.html.erb +2 -2
  64. data/app/views/generic_files/_show_details.html.erb +1 -1
  65. data/app/views/generic_files/_versioning.html.erb +9 -5
  66. data/app/views/generic_files/jq_upload.json.jbuilder +1 -1
  67. data/app/views/generic_files/new.html.erb +2 -3
  68. data/app/views/generic_files/show.html.erb +13 -16
  69. data/app/views/generic_files/upload/_alerts.html.erb +2 -2
  70. data/app/views/generic_files/upload/_form_fields.html.erb +1 -1
  71. data/app/views/generic_files/upload/_local_file_import_chooser.html.erb +1 -1
  72. data/app/views/generic_files/upload/_script_templates.html.erb +2 -2
  73. data/app/views/homepage/_featured.html.erb +2 -4
  74. data/app/views/homepage/_featured_researcher.html.erb +1 -1
  75. data/app/views/homepage/_featured_works.html.erb +5 -3
  76. data/app/views/homepage/_home_content.html.erb +1 -1
  77. data/app/views/homepage/_recent_document.html.erb +2 -2
  78. data/app/views/homepage/_sortable_featured.html.erb +1 -2
  79. data/app/views/my/_action_menu.html.erb +8 -8
  80. data/app/views/my/_collection_action_menu.html.erb +4 -4
  81. data/app/views/my/_index_partials/_list_collections.html.erb +9 -12
  82. data/app/views/my/_index_partials/_list_files.html.erb +9 -9
  83. data/app/views/my/index.html.erb +0 -1
  84. data/app/views/records/_rights_modal.html.erb +1 -0
  85. data/app/views/users/_contributions.html.erb +2 -3
  86. data/app/views/users/_edit_primary.html.erb +68 -0
  87. data/app/views/users/_edit_secondary.html.erb +1 -0
  88. data/app/views/users/_trophy_edit.html.erb +1 -3
  89. data/app/views/users/edit.html.erb +4 -78
  90. data/config/initializers/simple_form.rb +167 -0
  91. data/config/initializers/simple_form_bootstrap.rb +137 -0
  92. data/config/locales/simple_form.en.yml +31 -0
  93. data/config/locales/sufia.en.yml +7 -4
  94. data/config/routes.rb +1 -1
  95. data/lib/generators/sufia/templates/catalog_controller.rb +1 -1
  96. data/lib/sufia/single_use_error.rb +1 -1
  97. data/lib/sufia/version.rb +1 -1
  98. data/spec/actors/generic_file/actor_spec.rb +5 -5
  99. data/spec/controllers/batch_controller_spec.rb +15 -0
  100. data/spec/controllers/collections_controller_spec.rb +1 -1
  101. data/spec/controllers/content_blocks_controller_spec.rb +23 -3
  102. data/spec/controllers/downloads_controller_spec.rb +5 -5
  103. data/spec/controllers/generic_files_controller_spec.rb +12 -12
  104. data/spec/controllers/homepage_controller_spec.rb +19 -6
  105. data/spec/controllers/my/files_controller_spec.rb +8 -10
  106. data/spec/controllers/my/shares_controller_spec.rb +34 -23
  107. data/spec/controllers/single_use_links_controller_spec.rb +2 -3
  108. data/spec/controllers/single_use_links_viewer_controller_spec.rb +19 -20
  109. data/spec/controllers/users_controller_spec.rb +8 -8
  110. data/spec/factories/generic_files.rb +4 -4
  111. data/spec/factories/users.rb +2 -3
  112. data/spec/features/browse_dashboard_files_spec.rb +8 -8
  113. data/spec/features/collection_spec.rb +15 -8
  114. data/spec/features/edit_file_spec.rb +26 -0
  115. data/spec/features/single_use_links_spec.rb +3 -3
  116. data/spec/forms/generic_file_edit_form_spec.rb +8 -1
  117. data/spec/helpers/content_block_helper_spec.rb +10 -0
  118. data/spec/helpers/dashboard_helper_spec.rb +42 -0
  119. data/spec/helpers/sufia_helper_spec.rb +34 -7
  120. data/spec/helpers/trophy_helper_spec.rb +6 -6
  121. data/spec/inputs/select_with_help_input_spec.rb +16 -0
  122. data/spec/jobs/audit_job_spec.rb +1 -1
  123. data/spec/jobs/characterize_job_spec.rb +2 -7
  124. data/spec/jobs/create_derivatives_job_spec.rb +27 -38
  125. data/spec/jobs/import_url_job_spec.rb +2 -2
  126. data/spec/jobs/ingest_local_file_job_spec.rb +6 -8
  127. data/spec/lib/sufia/id_service_spec.rb +0 -7
  128. data/spec/lib/sufia/messages_spec.rb +16 -13
  129. data/spec/models/ability_spec.rb +3 -0
  130. data/spec/models/checksum_audit_log_spec.rb +1 -1
  131. data/spec/models/content_block_spec.rb +41 -0
  132. data/spec/models/featured_work_list_spec.rb +23 -9
  133. data/spec/models/file_content_datastream_spec.rb +4 -4
  134. data/spec/models/file_usage_spec.rb +1 -1
  135. data/spec/models/fits_datastream_spec.rb +4 -4
  136. data/spec/models/generic_file_spec.rb +31 -15
  137. data/spec/models/single_use_link_spec.rb +2 -2
  138. data/spec/models/solr_document_spec.rb +8 -5
  139. data/spec/models/user_spec.rb +3 -3
  140. data/spec/presenters/sufia/collection_presenter_spec.rb +34 -0
  141. data/spec/presenters/sufia/generic_file_presenter_spec.rb +41 -1
  142. data/spec/presenters/sufia/version_list_presenter_spec.rb +12 -2
  143. data/spec/services/generic_file_audit_service_spec.rb +3 -3
  144. data/spec/services/noid_spec.rb +4 -11
  145. data/spec/services/repository_audit_service_spec.rb +1 -1
  146. data/spec/spec_helper.rb +1 -0
  147. data/spec/support/fixture_helpers.rb +2 -3
  148. data/spec/support/selectors.rb +7 -7
  149. data/spec/test_app_templates/Gemfile.extra +1 -0
  150. data/spec/views/batch/edit.html.erb_spec.rb +14 -17
  151. data/spec/views/collections/_show_descriptions.html.erb_spec.rb +1 -1
  152. data/spec/views/generic_file/_permission_form.html.erb_spec.rb +29 -7
  153. data/spec/views/generic_file/edit.html.erb_spec.rb +1 -1
  154. data/spec/views/generic_file/show.html.erb_spec.rb +69 -151
  155. data/spec/views/generic_file/stats.html.erb_spec.rb +1 -1
  156. data/spec/views/homepage/_featured_works.html.erb_spec.rb +29 -0
  157. data/spec/views/users/show.html.erb_spec.rb +1 -1
  158. data/sufia-models/app/actors/sufia/generic_file/actor.rb +12 -8
  159. data/sufia-models/app/jobs/batch_update_job.rb +2 -2
  160. data/sufia-models/app/jobs/import_url_job.rb +5 -3
  161. data/sufia-models/app/jobs/ingest_local_file_job.rb +46 -0
  162. data/sufia-models/app/jobs/resolrize_job.rb +1 -8
  163. data/sufia-models/app/models/batch.rb +0 -7
  164. data/sufia-models/app/models/concerns/sufia/ability.rb +1 -1
  165. data/sufia-models/app/models/concerns/sufia/{collection.rb → collection_behavior.rb} +1 -13
  166. data/sufia-models/app/models/concerns/sufia/generic_file/batches.rb +3 -4
  167. data/sufia-models/app/models/concerns/sufia/generic_file/export.rb +1 -1
  168. data/sufia-models/app/models/concerns/sufia/generic_file/featured.rb +1 -4
  169. data/sufia-models/app/models/concerns/sufia/generic_file/metadata.rb +7 -7
  170. data/sufia-models/app/models/concerns/sufia/generic_file/trophies.rb +1 -2
  171. data/sufia-models/app/models/concerns/sufia/generic_file/virus_check.rb +16 -11
  172. data/sufia-models/app/models/concerns/sufia/model_methods.rb +1 -14
  173. data/sufia-models/app/models/concerns/sufia/user.rb +5 -0
  174. data/sufia-models/app/models/file_usage.rb +1 -1
  175. data/sufia-models/app/models/file_view_stat.rb +1 -1
  176. data/sufia-models/app/models/sufia/collection.rb +5 -0
  177. data/sufia-models/app/services/sufia/generic_file_indexing_service.rb +1 -1
  178. data/sufia-models/app/services/sufia/id_service.rb +1 -2
  179. data/sufia-models/app/services/sufia/noid.rb +4 -24
  180. data/sufia-models/lib/generators/sufia/models/install_generator.rb +6 -1
  181. data/sufia-models/lib/generators/sufia/models/templates/app/models/collection.rb +2 -0
  182. data/sufia-models/lib/generators/sufia/models/templates/config/resque_config.rb +1 -1
  183. data/sufia-models/lib/generators/sufia/models/templates/config/solrconfig.xml +46 -0
  184. data/sufia-models/lib/generators/sufia/models/templates/config/sufia.rb +9 -5
  185. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_external_key_to_content_blocks.rb +6 -0
  186. data/sufia-models/lib/generators/sufia/models/update_content_blocks_generator.rb +18 -0
  187. data/sufia-models/lib/sufia/messages.rb +11 -12
  188. data/sufia-models/lib/sufia/models/engine.rb +2 -1
  189. data/sufia-models/lib/sufia/models/stats/user_stat_importer.rb +9 -5
  190. data/sufia-models/lib/sufia/models/version.rb +1 -1
  191. data/sufia-models/sufia-models.gemspec +5 -5
  192. data/sufia.gemspec +15 -15
  193. data/tasks/sufia-dev.rake +0 -16
  194. metadata +86 -64
  195. data/LICENSE.md +0 -14
  196. data/app/jobs/ingest_local_file_job.rb +0 -39
  197. data/sufia-models/app/models/collection.rb +0 -3
  198. data/sufia-models/app/services/sufia/indexing_service.rb +0 -15
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe 'generic_files/stats.html.erb', :type => :view do
4
4
  describe 'usage statistics' do
5
5
  let(:generic_file) {
6
- stub_model(GenericFile, noid: '123',
6
+ stub_model(GenericFile, id: '123',
7
7
  title: ['file1.txt'])
8
8
  }
9
9
 
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe "homepage/_featured_works.html.erb" do
4
+ let(:list) { FeaturedWorkList.new }
5
+ subject { rendered }
6
+ before { assign(:featured_work_list, list) }
7
+
8
+ context "without featured works" do
9
+ before { render }
10
+ it {
11
+ is_expected.to have_content 'No works have been featured'
12
+ is_expected.not_to have_selector('form')
13
+ }
14
+ end
15
+
16
+ context "with featured works" do
17
+ before do
18
+ allow(view).to receive(:can?).with(:update, FeaturedWork).and_return(false)
19
+ allow(list).to receive(:empty?).and_return(false)
20
+ render
21
+ end
22
+
23
+ it {
24
+ is_expected.not_to have_content 'No works have been featured'
25
+ is_expected.not_to have_selector('form')
26
+ is_expected.to have_selector('ol#featured_works')
27
+ }
28
+ end
29
+ end
@@ -43,7 +43,7 @@ describe 'users/show.html.erb', :type => :view do
43
43
  render
44
44
  page = Capybara::Node::Simple.new(rendered)
45
45
  expect(page).to have_selector(".tab-content > div#contributions.tab-pane")
46
- expect(page).to have_selector("#trophyrow_#{generic_file.noid}")
46
+ expect(page).to have_selector("#trophyrow_#{generic_file.id}")
47
47
 
48
48
  end
49
49
  end
@@ -15,8 +15,9 @@ module Sufia::GenericFile
15
15
  # create_metadata(batch_id) { |gf| gf.save }
16
16
  def create_metadata(batch_id)
17
17
  generic_file.apply_depositor_metadata(user)
18
- generic_file.date_uploaded = Date.today
19
- generic_file.date_modified = Date.today
18
+ time_in_utc = DateTime.now.new_offset(0)
19
+ generic_file.date_uploaded = time_in_utc
20
+ generic_file.date_modified = time_in_utc
20
21
  generic_file.creator = [user.name]
21
22
 
22
23
  if batch_id
@@ -27,8 +28,10 @@ module Sufia::GenericFile
27
28
  yield(generic_file) if block_given?
28
29
  end
29
30
 
30
- def create_content(file, file_name, dsid)
31
- generic_file.add_file(file, dsid, file_name.truncate(255))
31
+ def create_content(file, file_name, path, mime_type)
32
+ generic_file.add_file(file, path: path, original_name: file_name, mime_type: mime_type)
33
+ generic_file.label ||= file_name
34
+ generic_file.title = [file_name] if generic_file.title.blank?
32
35
  save_characterize_and_record_committer do
33
36
  if Sufia.config.respond_to?(:after_create_content)
34
37
  Sufia.config.after_create_content.call(generic_file, user)
@@ -46,8 +49,8 @@ module Sufia::GenericFile
46
49
  end
47
50
  end
48
51
 
49
- def update_content(file, datastream_id)
50
- generic_file.add_file(file, datastream_id, file.original_filename)
52
+ def update_content(file, path)
53
+ generic_file.add_file(file, path: path, original_name: file.original_filename, mime_type: file.content_type)
51
54
  save_characterize_and_record_committer do
52
55
  if Sufia.config.respond_to?(:after_update_content)
53
56
  Sufia.config.after_update_content.call(generic_file, user)
@@ -83,6 +86,7 @@ module Sufia::GenericFile
83
86
  end
84
87
 
85
88
  # Takes an optional block and executes the block if the save was successful.
89
+ # returns false if the save was unsuccessful
86
90
  def save_and_record_committer
87
91
  save_tries = 0
88
92
  begin
@@ -124,10 +128,10 @@ module Sufia::GenericFile
124
128
  end
125
129
 
126
130
  private
131
+
127
132
  def remove_from_feature_works
128
- featured_work = FeaturedWork.find_by_generic_file_id(generic_file.noid)
133
+ featured_work = FeaturedWork.find_by_generic_file_id(generic_file.id)
129
134
  featured_work.destroy unless featured_work.nil?
130
135
  end
131
-
132
136
  end
133
137
  end
@@ -61,12 +61,12 @@ class BatchUpdateJob
61
61
  end
62
62
 
63
63
  def send_user_success_message user, batch
64
- message = saved.count > 1 ? multiple_success(batch.noid, saved) : single_success(batch.noid, saved.first)
64
+ message = saved.count > 1 ? multiple_success(batch.id, saved) : single_success(batch.id, saved.first)
65
65
  User.batchuser.send_message(user, message, success_subject, sanitize_text = false)
66
66
  end
67
67
 
68
68
  def send_user_failure_message user, batch
69
- message = denied.count > 1 ? multiple_failure(batch.noid, denied) : single_failure(batch.noid, denied.first)
69
+ message = denied.count > 1 ? multiple_failure(batch.id, denied) : single_failure(batch.id, denied.first)
70
70
  User.batchuser.send_message(user, message, failure_subject, sanitize_text = false)
71
71
  end
72
72
  end
@@ -12,9 +12,9 @@ class ImportUrlJob < ActiveFedoraPidBasedJob
12
12
  user = User.find_by_user_key(generic_file.depositor)
13
13
 
14
14
  Tempfile.open(pid.gsub('/', '_')) do |f|
15
- path = copy_remote_file(generic_file.import_url, f)
15
+ path, mime_type = copy_remote_file(generic_file.import_url, f)
16
16
  # attach downloaded file to generic file stubbed out
17
- if Sufia::GenericFile::Actor.new(generic_file, user).create_content(f, path, 'content')
17
+ if Sufia::GenericFile::Actor.new(generic_file, user).create_content(f, path, 'content', mime_type)
18
18
  # add message to user for downloaded file
19
19
  message = "The file (#{generic_file.label}) was successfully imported."
20
20
  job_user.send_message(user, message, 'File Import')
@@ -31,9 +31,11 @@ class ImportUrlJob < ActiveFedoraPidBasedJob
31
31
  http = Net::HTTP.new(uri.host, uri.port)
32
32
  http.use_ssl = uri.scheme == "https" # enable SSL/TLS
33
33
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
34
+ mime_type = nil
34
35
 
35
36
  http.start do
36
37
  http.request_get(uri.request_uri) do |resp|
38
+ mime_type = resp.content_type
37
39
  resp.read_body do |segment|
38
40
  f.write(segment)
39
41
  end
@@ -41,7 +43,7 @@ class ImportUrlJob < ActiveFedoraPidBasedJob
41
43
  end
42
44
 
43
45
  f.rewind
44
- uri.path
46
+ return uri.path, mime_type
45
47
  end
46
48
 
47
49
  def job_user
@@ -0,0 +1,46 @@
1
+ class IngestLocalFileJob
2
+ attr_accessor :directory, :filename, :user_key, :generic_file_id
3
+
4
+ def queue_name
5
+ :ingest
6
+ end
7
+
8
+ def initialize(generic_file_id, directory, filename, user_key)
9
+ self.generic_file_id = generic_file_id
10
+ self.directory = directory
11
+ self.filename = filename
12
+ self.user_key = user_key
13
+ end
14
+
15
+ #TODO this should use Actor#create_content
16
+ def run
17
+ user = User.find_by_user_key(user_key)
18
+ raise "Unable to find user for #{user_key}" unless user
19
+ generic_file = GenericFile.find(generic_file_id)
20
+ path = File.join(directory, filename)
21
+
22
+ actor = Sufia::GenericFile::Actor.new(generic_file, user)
23
+
24
+ if actor.create_content(File.open(path), filename, 'content', mime_type(filename))
25
+ FileUtils.rm(path)
26
+ Sufia.queue.push(ContentDepositEventJob.new(generic_file.id, user_key))
27
+
28
+ message = "The file (#{File.basename(filename)}) was successfully deposited."
29
+ subject = 'Local file ingest'
30
+ else
31
+ message = "There was a problem depositing #{File.basename(filename)}. Please contact a system admin."
32
+ subject = 'Local file ingest error'
33
+ end
34
+
35
+ job_user.send_message(user, message, subject)
36
+ end
37
+
38
+ def job_user
39
+ User.batchuser
40
+ end
41
+
42
+ def mime_type(file_name)
43
+ mime_types = MIME::Types.of(file_name)
44
+ mime_types.empty? ? "application/octet-stream" : mime_types.first.content_type
45
+ end
46
+ end
@@ -4,13 +4,6 @@ class ResolrizeJob
4
4
  end
5
5
 
6
6
  def run
7
- require 'active_fedora/version'
8
- active_fedora_version = Gem::Version.new(ActiveFedora::VERSION)
9
- minimum_feature_version = Gem::Version.new('6.4.4')
10
- if active_fedora_version >= minimum_feature_version
11
- ActiveFedora::Base.reindex_everything("pid~#{Sufia.config.id_namespace}:*")
12
- else
13
- ActiveFedora::Base.reindex_everything
14
- end
7
+ ActiveFedora::Base.reindex_everything
15
8
  end
16
9
  end
@@ -19,11 +19,4 @@ class Batch < ActiveFedora::Base
19
19
  Batch.create(id: id)
20
20
  end
21
21
  end
22
-
23
- class << self
24
- # override the default indexing service
25
- def indexer
26
- Sufia::IndexingService
27
- end
28
- end
29
22
  end
@@ -37,7 +37,7 @@ module Sufia
37
37
  def editor_abilities
38
38
  if user_groups.include? 'admin'
39
39
  can :create, TinymceAsset
40
- can :update, ContentBlock
40
+ can [:create, :update], ContentBlock
41
41
  end
42
42
  end
43
43
 
@@ -1,5 +1,5 @@
1
1
  module Sufia
2
- module Collection
2
+ module CollectionBehavior
3
3
  extend ActiveSupport::Concern
4
4
  include Hydra::Collection
5
5
  include Sufia::ModelMethods
@@ -11,10 +11,6 @@ module Sufia
11
11
  validates :title, presence: true
12
12
  end
13
13
 
14
- def to_param
15
- noid
16
- end
17
-
18
14
  def update_permissions
19
15
  self.visibility = "open"
20
16
  end
@@ -24,13 +20,5 @@ module Sufia
24
20
  def bytes
25
21
  members.reduce(0) { |sum, gf| sum + gf.file_size.first.to_i }
26
22
  end
27
-
28
- module ClassMethods
29
- # override the default indexing service
30
- def indexer
31
- Sufia::IndexingService
32
- end
33
- end
34
-
35
23
  end
36
24
  end
@@ -11,16 +11,15 @@ module Sufia
11
11
  # to each file when it is done uploading. The Batch object is not created
12
12
  # until all objects are done uploading and the user is redirected to
13
13
  # BatchController#edit. Therefore, we must handle the case where
14
- # self.batch_id is set but self.batch returns nil.
14
+ # batch_id is set but batch returns nil.
15
15
  def related_files
16
- return [] if batch.nil?
16
+ return [] unless batch
17
17
  batch.generic_files.reject { |sibling| sibling.id == id }
18
18
  end
19
19
 
20
20
  # Is this file in the middle of being processed by a batch?
21
21
  def processing?
22
- return false if self.batch.blank? || !self.batch.methods.include?(:status)
23
- (!self.batch.status.empty?) && (self.batch.status.count == 1) && (self.batch.status[0] == "processing")
22
+ try(:batch).try(:status) == ['processing'.freeze]
24
23
  end
25
24
 
26
25
  end
@@ -42,7 +42,7 @@ module Sufia
42
42
  end
43
43
 
44
44
  def persistent_url
45
- "#{Sufia.config.persistent_hostpath}#{noid}"
45
+ "#{Sufia.config.persistent_hostpath}#{id}"
46
46
  end
47
47
 
48
48
  # MIME type: 'application/x-openurl-ctx-kev'
@@ -3,12 +3,9 @@ module Sufia
3
3
  module Featured
4
4
  extend ActiveSupport::Concern
5
5
 
6
-
7
6
  def featured?
8
- FeaturedWork.where(generic_file_id: noid).exists?
7
+ FeaturedWork.where(generic_file_id: id).exists?
9
8
  end
10
-
11
9
  end
12
10
  end
13
11
  end
14
-
@@ -46,10 +46,17 @@ module Sufia
46
46
  property :date_created, predicate: ::RDF::DC.created do |index|
47
47
  index.as :stored_searchable
48
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.
49
55
  property :date_uploaded, predicate: ::RDF::DC.dateSubmitted, multiple: false do |index|
50
56
  index.type :date
51
57
  index.as :stored_sortable
52
58
  end
59
+
53
60
  property :date_modified, predicate: ::RDF::DC.modified, multiple: false do |index|
54
61
  index.type :date
55
62
  index.as :stored_sortable
@@ -86,13 +93,6 @@ module Sufia
86
93
  end
87
94
  end
88
95
 
89
- # Add a schema.org itemtype
90
- def itemtype
91
- # Look up the first non-empty resource type value in a hash from the config
92
- Sufia.config.resource_types_to_schema[resource_type.to_a.reject { |type| type.empty? }.first] || 'http://schema.org/CreativeWork'
93
- rescue
94
- 'http://schema.org/CreativeWork'
95
- end
96
96
  end
97
97
  end
98
98
  end
@@ -7,9 +7,8 @@ module Sufia
7
7
  end
8
8
 
9
9
  def cleanup_trophies
10
- Trophy.destroy_all(generic_file_id: self.noid)
10
+ Trophy.destroy_all(generic_file_id: self.id)
11
11
  end
12
-
13
12
  end
14
13
  end
15
14
  end
@@ -10,23 +10,28 @@ module Sufia
10
10
  # Default behavior is to raise a validation error and halt the save if a virus is found
11
11
  def detect_viruses
12
12
  return unless content.changed?
13
- path = if content.content.respond_to?(:path)
14
- content.content.path
15
- else
16
- Tempfile.open('') do |t|
17
- t.binmode
18
- t.write(content.content)
19
- t.close
20
- t.path
21
- end
22
- end
23
- Sufia::GenericFile::Actor.virus_check(path)
13
+ Sufia::GenericFile::Actor.virus_check(local_path_for_content)
24
14
  true
25
15
  rescue Sufia::VirusFoundError => virus
26
16
  logger.warn(virus.message)
27
17
  errors.add(:base, virus.message)
28
18
  false
29
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
30
35
  end
31
36
  end
32
37
  end
@@ -3,20 +3,7 @@ module Sufia
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
- include Hydra::ModelMethods
7
- end
8
-
9
- # OVERRIDE to support Hydra::Datastream::Properties which does not
10
- # respond to :depositor_values but :depositor
11
- # Adds metadata about the depositor to the asset and ads +depositor_id+ to
12
- # its individual edit permissions.
13
- def apply_depositor_metadata(depositor)
14
- depositor_id = depositor.respond_to?(:user_key) ? depositor.user_key : depositor
15
-
16
- self.edit_users += [depositor_id]
17
- self.depositor = depositor_id
18
-
19
- return true
6
+ include Hydra::WithDepositor
20
7
  end
21
8
 
22
9
  def to_s
@@ -54,6 +54,11 @@ module Sufia::User
54
54
  { id: user_key, text: display_name ? "#{display_name} (#{user_key})" : user_key }
55
55
  end
56
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
+
57
62
  def email_address
58
63
  self.email
59
64
  end
@@ -8,7 +8,7 @@ class FileUsage
8
8
  user_id = user ? user.id : nil
9
9
 
10
10
  self.id = id
11
- self.path = Sufia::Engine.routes.url_helpers.generic_file_path(Sufia::Noid.noidify(id))
11
+ self.path = Sufia::Engine.routes.url_helpers.generic_file_path(id)
12
12
  earliest = Sufia.config.analytic_start_date
13
13
  self.created = ::GenericFile.find(id).create_date
14
14
  self.created = earliest > created ? earliest : created unless earliest.blank?