sufia 4.0.1 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +247 -215
  3. data/README.md +7 -3
  4. data/SUFIA_VERSION +1 -1
  5. data/app/assets/javascripts/sufia.js +5 -2
  6. data/app/assets/javascripts/sufia/proxy_rights.js +68 -0
  7. data/app/assets/javascripts/sufia/transfers.js +3 -0
  8. data/app/assets/javascripts/sufia/user_search.js +31 -0
  9. data/app/assets/stylesheets/jquery-ui.css +17 -17
  10. data/app/assets/stylesheets/sufia.css.scss +3 -2
  11. data/app/assets/stylesheets/sufia/_proxy-rights.scss +10 -0
  12. data/app/controllers/concerns/sufia/contact_form_controller_behavior.rb +22 -23
  13. data/app/controllers/concerns/sufia/depositors_controller_behavior.rb +41 -0
  14. data/app/controllers/concerns/sufia/files_controller_behavior.rb +1 -0
  15. data/app/controllers/concerns/sufia/transfers_controller_behavior.rb +76 -0
  16. data/app/controllers/concerns/sufia/users_controller_behavior.rb +9 -11
  17. data/app/controllers/depositors_controller.rb +3 -0
  18. data/app/controllers/transfers_controller.rb +3 -0
  19. data/app/helpers/sufia/dashboard_helper_behavior.rb +15 -0
  20. data/app/helpers/sufia/sufia_helper_behavior.rb +24 -2
  21. data/app/jobs/content_depositor_change_event_job.rb +50 -0
  22. data/app/views/dashboard/_index_partials/_contents.html.erb +18 -0
  23. data/app/views/dashboard/_index_partials/_proxy_rights.html.erb +23 -0
  24. data/app/views/dashboard/_index_partials/_transfers.html.erb +14 -0
  25. data/app/views/generic_files/proxy.html.erb +5 -0
  26. data/app/views/generic_files/upload/_form.html.erb +7 -2
  27. data/app/views/my/_action_menu.html.erb +3 -1
  28. data/app/views/records/edit_fields/_default.html.erb +1 -1
  29. data/app/views/transfers/_received.html.erb +58 -0
  30. data/app/views/transfers/_sent.html.erb +38 -0
  31. data/app/views/transfers/index.html.erb +7 -0
  32. data/app/views/transfers/new.html.erb +23 -0
  33. data/app/views/users/_proxies.html.erb +8 -0
  34. data/app/views/users/_user_util_links_extra.html.erb +1 -0
  35. data/app/views/users/edit.html.erb +6 -1
  36. data/config/locales/sufia.en.yml +9 -4
  37. data/config/routes.rb +14 -3
  38. data/lib/sufia.rb +7 -5
  39. data/lib/sufia/version.rb +1 -1
  40. data/spec/controllers/authorities_controller_spec.rb +6 -6
  41. data/spec/controllers/batch_controller_spec.rb +29 -29
  42. data/spec/controllers/batch_edits_controller_spec.rb +7 -7
  43. data/spec/controllers/catalog_controller_spec.rb +9 -9
  44. data/spec/controllers/collections_controller_spec.rb +28 -28
  45. data/spec/controllers/content_blocks_controller_spec.rb +3 -3
  46. data/spec/controllers/dashboard_controller_spec.rb +1 -1
  47. data/spec/controllers/depositors_controller_spec.rb +50 -0
  48. data/spec/controllers/downloads_controller_spec.rb +22 -22
  49. data/spec/controllers/featured_work_lists_controller_spec.rb +1 -1
  50. data/spec/controllers/featured_works_controller_spec.rb +1 -1
  51. data/spec/controllers/generic_files_controller_spec.rb +98 -90
  52. data/spec/controllers/homepage_controller_spec.rb +1 -1
  53. data/spec/controllers/mailbox_controller_spec.rb +10 -10
  54. data/spec/controllers/my/collections_controller_spec.rb +1 -1
  55. data/spec/controllers/my/files_controller_spec.rb +1 -1
  56. data/spec/controllers/my/highlights_controller_spec.rb +1 -1
  57. data/spec/controllers/my/shares_controller_spec.rb +1 -1
  58. data/spec/controllers/my_controller_spec.rb +1 -1
  59. data/spec/controllers/pages_controller_spec.rb +1 -1
  60. data/spec/controllers/single_use_links_controller_spec.rb +46 -50
  61. data/spec/controllers/single_use_links_viewer_controller_spec.rb +16 -16
  62. data/spec/controllers/static_controller_spec.rb +9 -9
  63. data/spec/controllers/tinymce_assets_controller_spec.rb +1 -1
  64. data/spec/controllers/transfers_controller_spec.rb +212 -0
  65. data/spec/controllers/users_controller_spec.rb +1 -1
  66. data/spec/factories/generic_files.rb +4 -4
  67. data/spec/factories/proxy_deposit_requests.rb +6 -0
  68. data/spec/features/browse_dashboard_files_spec.rb +25 -36
  69. data/spec/features/browse_files_spec.rb +18 -13
  70. data/spec/features/catalog_search_spec.rb +3 -6
  71. data/spec/features/cloud_upload_spec.rb +5 -7
  72. data/spec/features/collection_spec.rb +28 -35
  73. data/spec/features/contact_form_spec.rb +24 -24
  74. data/spec/features/display_dashboard_spec.rb +11 -11
  75. data/spec/features/ingest_upload_files_spec.rb +10 -10
  76. data/spec/features/notifications_spec.rb +11 -11
  77. data/spec/features/ownership_transfer_spec.rb +111 -0
  78. data/spec/features/proxy_spec.rb +52 -0
  79. data/spec/features/search_spec.rb +1 -1
  80. data/spec/features/single_use_links_spec.rb +28 -18
  81. data/spec/features/users_spec.rb +3 -3
  82. data/spec/helpers/batch_edits_helper_spec.rb +1 -1
  83. data/spec/helpers/content_block_helper_spec.rb +1 -1
  84. data/spec/helpers/dashboard_helper_spec.rb +1 -1
  85. data/spec/helpers/generic_file_helper_spec.rb +1 -1
  86. data/spec/helpers/records_helper_spec.rb +1 -1
  87. data/spec/helpers/sufia_helper_spec.rb +8 -8
  88. data/spec/helpers/trophy_helper_spec.rb +1 -1
  89. data/spec/jobs/audit_job_spec.rb +5 -5
  90. data/spec/jobs/batch_update_job_spec.rb +14 -14
  91. data/spec/jobs/content_depositor_change_event_job_spec.rb +22 -0
  92. data/spec/jobs/event_jobs_spec.rb +104 -104
  93. data/spec/jobs/import_url_job_spec.rb +2 -2
  94. data/spec/jobs/ingest_local_file_job_spec.rb +1 -1
  95. data/spec/lib/sufia/breadcrumbs_spec.rb +3 -3
  96. data/spec/lib/sufia/id_service_spec.rb +1 -1
  97. data/spec/lib/sufia/upload_complete_behavior_spec.rb +4 -4
  98. data/spec/models/ability_spec.rb +59 -15
  99. data/spec/models/batch_spec.rb +16 -16
  100. data/spec/models/characterization_spec.rb +1 -1
  101. data/spec/models/checksum_audit_log_spec.rb +34 -26
  102. data/spec/models/collection_spec.rb +1 -1
  103. data/spec/models/download_spec.rb +1 -1
  104. data/spec/models/featured_work_list_spec.rb +1 -1
  105. data/spec/models/featured_work_spec.rb +15 -4
  106. data/spec/models/file_content_datastream_spec.rb +14 -14
  107. data/spec/models/file_usage_spec.rb +1 -1
  108. data/spec/models/fits_datastream_spec.rb +1 -1
  109. data/spec/models/generic_file/reload_on_save_spec.rb +4 -4
  110. data/spec/models/generic_file/visibility_spec.rb +1 -1
  111. data/spec/models/generic_file/web_form_spec.rb +6 -5
  112. data/spec/models/generic_file_rdf_datastream_spec.rb +1 -1
  113. data/spec/models/generic_file_spec.rb +254 -220
  114. data/spec/models/geo_names_resource_spec.rb +2 -2
  115. data/spec/models/local_authority_spec.rb +60 -59
  116. data/spec/models/pageview_spec.rb +1 -1
  117. data/spec/models/properties_datastream_spec.rb +29 -10
  118. data/spec/models/proxy_deposit_request_spec.rb +107 -0
  119. data/spec/models/single_use_link_spec.rb +13 -13
  120. data/spec/models/solr_document_spec.rb +1 -1
  121. data/spec/models/trophy_spec.rb +6 -6
  122. data/spec/models/user_spec.rb +38 -22
  123. data/spec/routing/featured_works_route_spec.rb +1 -1
  124. data/spec/routing/ownership_transfers_route_spec.rb +45 -0
  125. data/spec/routing/route_spec.rb +42 -42
  126. data/spec/services/noid_spec.rb +2 -2
  127. data/spec/spec_helper.rb +10 -5
  128. data/spec/support/cleaner.rb +12 -0
  129. data/spec/support/features.rb +5 -0
  130. data/spec/support/features/session_helpers.rb +3 -17
  131. data/spec/support/locations.rb +36 -0
  132. data/spec/support/poltergeist.rb +11 -0
  133. data/spec/support/proxies.rb +14 -0
  134. data/spec/support/selectors.rb +122 -0
  135. data/spec/views/batch/edit.html.erb_spec.rb +1 -1
  136. data/spec/views/batch_edits/check_all_spec.rb +4 -4
  137. data/spec/views/catalog/index.html.erb_spec.rb +1 -1
  138. data/spec/views/catalog/sort_and_per_page.html.erb_spec.rb +1 -1
  139. data/spec/views/collections/_form.html.erb_spec.rb +3 -1
  140. data/spec/views/collections/_show_descriptions.html.erb_spec.rb +1 -1
  141. data/spec/views/dashboard/index_spec.rb +3 -6
  142. data/spec/views/generic_file/edit.html.erb_spec.rb +1 -1
  143. data/spec/views/generic_file/show.html.erb_spec.rb +1 -1
  144. data/spec/views/generic_file/stats.html.erb_spec.rb +1 -1
  145. data/spec/views/my/facet.html.erb_spec.rb +2 -2
  146. data/spec/views/users/_follower_modal.html.erb_spec.rb +1 -1
  147. data/spec/views/users/_following_modal.html.erb_spec.rb +1 -1
  148. data/spec/views/users/_notify_number.html.erb_spec.rb +1 -1
  149. data/spec/views/users/_user_util_links.html.erb_spec.rb +1 -1
  150. data/spec/views/users/index.html.erb_spec.rb +2 -2
  151. data/spec/views/users/show.html.erb_spec.rb +2 -2
  152. data/sufia-models/app/models/concerns/sufia/ability.rb +22 -0
  153. data/sufia-models/app/models/concerns/sufia/generic_file.rb +1 -0
  154. data/sufia-models/app/models/concerns/sufia/generic_file/proxy_deposit.rb +22 -0
  155. data/sufia-models/app/models/concerns/sufia/properties_datastream_behavior.rb +3 -0
  156. data/sufia-models/app/models/concerns/sufia/user.rb +9 -0
  157. data/sufia-models/app/models/proxy_deposit_request.rb +85 -0
  158. data/sufia-models/app/models/proxy_deposit_rights.rb +4 -0
  159. data/sufia-models/app/models/sufia/avatar_uploader.rb +2 -3
  160. data/sufia-models/lib/generators/sufia/models/install_generator.rb +9 -1
  161. data/sufia-models/lib/generators/sufia/models/proxies_generator.rb +53 -0
  162. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_requests.rb +16 -0
  163. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_rights.rb +11 -0
  164. data/sufia-models/lib/sufia/models/engine.rb +1 -1
  165. data/sufia-models/lib/sufia/models/version.rb +1 -1
  166. data/sufia.gemspec +2 -1
  167. data/tasks/sufia-dev.rake +5 -0
  168. metadata +82 -6
  169. data/tasks/sufia-db.rake +0 -21
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'users/show.html.erb' do
3
+ describe 'users/show.html.erb', :type => :view do
4
4
 
5
5
  let(:join_date) { 5.days.ago }
6
6
  before do
@@ -26,7 +26,7 @@ describe 'users/show.html.erb' do
26
26
 
27
27
  it "should have the vitals" do
28
28
  render
29
- rendered.should match /Joined on #{join_date.strftime("%b %d, %Y")}/
29
+ expect(rendered).to match /Joined on #{join_date.strftime("%b %d, %Y")}/
30
30
  end
31
31
 
32
32
  context "with trophy" do
@@ -1,6 +1,7 @@
1
1
  module Sufia
2
2
  module Ability
3
3
  extend ActiveSupport::Concern
4
+
4
5
  included do
5
6
  self.ability_logic += [:sufia_abilities]
6
7
  end
@@ -10,6 +11,19 @@ module Sufia
10
11
  featured_work_abilities
11
12
  editor_abilities
12
13
  stats_abilities
14
+ proxy_deposit_abilities
15
+ end
16
+
17
+ def proxy_deposit_abilities
18
+ can :transfer, String do |pid|
19
+ get_depositor_from_pid(pid) == current_user.user_key
20
+ end
21
+ can :create, ProxyDepositRequest if user_groups.include? 'registered'
22
+ can :accept, ProxyDepositRequest, receiving_user_id: current_user.id, status: 'pending'
23
+ can :reject, ProxyDepositRequest, receiving_user_id: current_user.id, status: 'pending'
24
+ # a user who sent a proxy deposit request can cancel it if it's pending.
25
+ can :destroy, ProxyDepositRequest, sending_user_id: current_user.id, status: 'pending'
26
+ can :edit, ::User, id: current_user.id
13
27
  end
14
28
 
15
29
  def featured_work_abilities
@@ -30,5 +44,13 @@ module Sufia
30
44
  def stats_abilities
31
45
  alias_action :stats, to: :read
32
46
  end
47
+
48
+ private
49
+
50
+ def get_depositor_from_pid(pid)
51
+ ::GenericFile.load_instance_from_solr(pid).depositor
52
+ rescue
53
+ nil
54
+ end
33
55
  end
34
56
  end
@@ -19,6 +19,7 @@ module Sufia
19
19
  include Sufia::GenericFile::VirusCheck
20
20
  include Sufia::GenericFile::ReloadOnSave
21
21
  include Sufia::GenericFile::FullTextIndexing
22
+ include Sufia::GenericFile::ProxyDeposit
22
23
  include Hydra::Collections::Collectible
23
24
 
24
25
  included do
@@ -0,0 +1,22 @@
1
+ module Sufia
2
+ module GenericFile
3
+ module ProxyDeposit
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ has_attributes :proxy_depositor, :on_behalf_of, datastream: :properties, multiple: false
8
+ after_create :create_transfer_request
9
+ end
10
+
11
+ def create_transfer_request
12
+ Sufia.queue.push(ContentDepositorChangeEventJob.new(pid, on_behalf_of)) if on_behalf_of.present?
13
+ end
14
+
15
+ def request_transfer_to(target)
16
+ raise ArgumentError, "Must provide a target" unless target
17
+ deposit_user = ::User.find_by_user_key(depositor)
18
+ ProxyDepositRequest.create!(pid: pid, receiving_user: target, sending_user: deposit_user)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -10,6 +10,9 @@ module Sufia
10
10
  # This is where we put the relative path of the file if submitted as a folder
11
11
  t.relative_path
12
12
  t.import_url path: 'importUrl', index_as: :symbol
13
+ t.proxy_depositor path: 'proxyDepositor', index_as: :symbol
14
+ # This value is set when a user indicates they are depositing this for someone else
15
+ t.on_behalf_of path: 'onBehalfOf', index_as: :symbol
13
16
  end
14
17
  end
15
18
 
@@ -18,6 +18,15 @@ module Sufia::User
18
18
  # Users should be followable
19
19
  acts_as_followable
20
20
 
21
+ # Setup accessible (or protected) attributes for your model
22
+ has_many :proxy_deposit_requests, foreign_key: 'receiving_user_id'
23
+
24
+ has_many :deposit_rights_given, foreign_key: 'grantor_id', class_name: 'ProxyDepositRights', dependent: :destroy
25
+ has_many :can_receive_deposits_from, through: :deposit_rights_given, source: :grantee
26
+
27
+ has_many :deposit_rights_received, foreign_key: 'grantee_id', class_name: 'ProxyDepositRights', dependent: :destroy
28
+ has_many :can_make_deposits_for, through: :deposit_rights_received, source: :grantor
29
+
21
30
  mount_uploader :avatar, AvatarUploader, mount_on: :avatar_file_name
22
31
  validates_with AvatarValidator
23
32
  has_many :trophies
@@ -0,0 +1,85 @@
1
+ class ProxyDepositRequest < ActiveRecord::Base
2
+ include Blacklight::SolrHelper
3
+ include ActionView::Helpers::UrlHelper
4
+
5
+ belongs_to :receiving_user, class_name: 'User'
6
+ belongs_to :sending_user, class_name: 'User'
7
+
8
+ validates :sending_user, :pid, presence: true
9
+ validate :transfer_to_should_be_a_valid_username
10
+ validate :sending_user_should_not_be_receiving_user
11
+ validate :should_not_be_already_part_of_a_transfer
12
+
13
+ after_save :send_request_transfer_message
14
+
15
+ attr_reader :transfer_to
16
+
17
+ def transfer_to=(key)
18
+ @transfer_to = key
19
+ self.receiving_user = User.find_by_user_key(key)
20
+ end
21
+
22
+ def transfer_to_should_be_a_valid_username
23
+ errors.add(:transfer_to, "must be an existing user") unless receiving_user
24
+ end
25
+
26
+ def sending_user_should_not_be_receiving_user
27
+ errors.add(:sending_user, 'must specify another user to receive the file') if receiving_user and receiving_user.user_key == sending_user.user_key
28
+ end
29
+
30
+ def should_not_be_already_part_of_a_transfer
31
+ transfers = ProxyDepositRequest.where(pid: pid)
32
+ errors.add(:open_transfer, 'must close open transfer on the file before creating a new one') unless transfers.blank? || ( transfers.count == 1 && transfers[0].id == self.id)
33
+ end
34
+
35
+ def send_request_transfer_message
36
+ if self.updated_at == self.created_at
37
+ message = "#{link_to(sending_user.name, Sufia::Engine.routes.url_helpers.profile_path(sending_user.user_key))} wants to transfer a file to you. Review all <a href='#{Sufia::Engine.routes.url_helpers.transfers_path}'>transfer requests</a>"
38
+ User.batchuser.send_message(receiving_user, message, "Ownership Change Request")
39
+ else
40
+ message = "Your transfer request was #{status}."
41
+ message = message + " Comments: #{receiver_comment}" if !receiver_comment.blank?
42
+ User.batchuser.send_message(sending_user, message, "Ownership Change #{status}")
43
+ end
44
+ end
45
+
46
+ def pending?
47
+ self.status == 'pending'
48
+ end
49
+
50
+ def accepted?
51
+ self.status == 'accepted'
52
+ end
53
+
54
+ # @param [Boolean] reset (false) should the access controls be reset. This means revoking edit access from the depositor
55
+ def transfer!(reset = false)
56
+ Sufia.queue.push(ContentDepositorChangeEventJob.new(pid, receiving_user.user_key, reset))
57
+ self.status = 'accepted'
58
+ self.fulfillment_date = Time.now
59
+ save!
60
+ end
61
+
62
+ def reject!(comment = nil)
63
+ self.receiver_comment = comment if comment
64
+ self.status = 'rejected'
65
+ self.fulfillment_date = Time.now
66
+ save!
67
+ end
68
+
69
+ def cancel!
70
+ self.status = 'canceled'
71
+ self.fulfillment_date = Time.now
72
+ save!
73
+ end
74
+
75
+ def deleted_file?
76
+ !GenericFile.exists?(pid)
77
+ end
78
+
79
+ def title
80
+ return 'file not found' if deleted_file?
81
+ query = ActiveFedora::SolrService.construct_query_for_pids([pid])
82
+ solr_response = ActiveFedora::SolrService.query(query, raw: true)
83
+ SolrDocument.new(solr_response['response']['docs'].first, solr_response).title
84
+ end
85
+ end
@@ -0,0 +1,4 @@
1
+ class ProxyDepositRights < ActiveRecord::Base
2
+ belongs_to :grantor, class_name: "User"
3
+ belongs_to :grantee, class_name: "User"
4
+ end
@@ -1,7 +1,7 @@
1
1
  class Sufia::AvatarUploader < CarrierWave::Uploader::Base
2
2
  include CarrierWave::MiniMagick
3
3
  include CarrierWave::Compatibility::Paperclip
4
-
4
+
5
5
  version :medium do
6
6
  process resize_to_limit: [300, 300]
7
7
  end
@@ -11,11 +11,10 @@ class Sufia::AvatarUploader < CarrierWave::Uploader::Base
11
11
  end
12
12
 
13
13
  def default_url
14
- "/assets/missing_#{version_name}.png"
14
+ "missing_#{version_name}.png"
15
15
  end
16
16
 
17
17
  def extension_white_list
18
18
  %w(jpg jpeg png gif bmp tif tiff)
19
19
  end
20
-
21
20
  end
@@ -17,6 +17,7 @@ This generator makes the following changes to your application:
17
17
  5. Generates usage stats config
18
18
  6. Installs Blacklight gallery
19
19
  7. Runs full-text generator
20
+ 8. Runs proxies generator
20
21
  """
21
22
 
22
23
  # Implement the required interface for Rails::Generators::Migration.
@@ -55,7 +56,9 @@ This generator makes the following changes to your application:
55
56
  'add_linkedin_to_users.rb',
56
57
  'create_tinymce_assets.rb',
57
58
  'create_content_blocks.rb',
58
- 'create_featured_works.rb'
59
+ 'create_featured_works.rb',
60
+ 'create_proxy_deposit_requests.rb',
61
+ 'create_proxy_deposit_rights.rb'
59
62
  ].each do |file|
60
63
  better_migration_template file
61
64
  end
@@ -102,6 +105,11 @@ This generator makes the following changes to your application:
102
105
  generate "sufia:models:fulltext"
103
106
  end
104
107
 
108
+ # Sets up proxies and transfers
109
+ def full_text_indexing
110
+ generate "sufia:models:proxies"
111
+ end
112
+
105
113
  private
106
114
 
107
115
  def better_migration_template(file)
@@ -0,0 +1,53 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'rails/generators'
3
+ require 'rails/generators/migration'
4
+
5
+ class Sufia::Models::ProxiesGenerator < Rails::Generators::Base
6
+ include Rails::Generators::Migration
7
+
8
+ source_root File.expand_path('../templates', __FILE__)
9
+
10
+ desc """
11
+ This generator adds proxies and transfers to your application:
12
+ 1. Creates several database migrations if they do not exist in /db/migrate
13
+ """
14
+ # Implement the required interface for Rails::Generators::Migration.
15
+ # taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
16
+ def self.next_migration_number(path)
17
+ if @prev_migration_nr
18
+ @prev_migration_nr += 1
19
+ else
20
+ if last_migration = Dir[File.join(path, '*.rb')].sort.last
21
+ @prev_migration_nr = last_migration.sub(File.join(path, '/'), '').to_i + 1
22
+ else
23
+ @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
24
+ end
25
+ end
26
+ @prev_migration_nr.to_s
27
+ end
28
+
29
+ def banner
30
+ say_status("warning", "ADDING PROXY/TRANSFER-RELATED SUFIA MODELS", :yellow)
31
+ end
32
+
33
+ # Setup the database migrations
34
+ def copy_migrations
35
+ # Can't get this any more DRY, because we need this order.
36
+ [
37
+ 'create_proxy_deposit_rights.rb',
38
+ 'create_proxy_deposit_requests.rb'
39
+ ].each do |file|
40
+ better_migration_template file
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def better_migration_template(file)
47
+ begin
48
+ migration_template "migrations/#{file}", "db/migrate/#{file}"
49
+ rescue Rails::Generators::Error => e
50
+ say_status("warning", e.message, :yellow)
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,16 @@
1
+ class CreateProxyDepositRequests < ActiveRecord::Migration
2
+ def change
3
+ create_table :proxy_deposit_requests do |t|
4
+ t.string :pid, null: false
5
+ t.references :sending_user, null: false
6
+ t.references :receiving_user, null: false
7
+ t.datetime :fulfillment_date
8
+ t.string :status, null: false, default: 'pending'
9
+ t.text :sender_comment
10
+ t.text :receiver_comment
11
+ t.timestamps
12
+ end
13
+ add_index :proxy_deposit_requests, :receiving_user_id
14
+ add_index :proxy_deposit_requests, :sending_user_id
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ class CreateProxyDepositRights < ActiveRecord::Migration
2
+ def change
3
+ create_table :proxy_deposit_rights do |t|
4
+ t.references :grantor
5
+ t.references :grantee
6
+ t.timestamps
7
+ end
8
+ add_index :proxy_deposit_rights, :grantor_id
9
+ add_index :proxy_deposit_rights, :grantee_id
10
+ end
11
+ end
@@ -1,4 +1,3 @@
1
- require 'sufia/models/resque'
2
1
  module Sufia
3
2
  module Models
4
3
  def self.config(&block)
@@ -10,6 +9,7 @@ module Sufia
10
9
  end
11
10
 
12
11
  class Engine < ::Rails::Engine
12
+ require 'sufia/models/resque'
13
13
 
14
14
  # Set some configuration defaults
15
15
  config.enable_ffmpeg = false
@@ -1,5 +1,5 @@
1
1
  module Sufia
2
2
  module Models
3
- VERSION = "4.0.1"
3
+ VERSION = "4.1.0"
4
4
  end
5
5
  end
@@ -42,6 +42,7 @@ Gem::Specification.new do |gem|
42
42
  gem.add_dependency 'bootstrap-sass', '< 3.2'
43
43
  gem.add_dependency 'blacklight-gallery'
44
44
  gem.add_dependency 'breadcrumbs_on_rails', '~>2.3.0'
45
+ gem.add_dependency 'select2-rails'
45
46
 
46
47
  gem.add_development_dependency 'engine_cart'
47
48
  gem.add_development_dependency 'mida'
@@ -51,5 +52,5 @@ Gem::Specification.new do |gem|
51
52
  gem.add_development_dependency "capybara"
52
53
  gem.add_development_dependency "poltergeist", "~> 1.5"
53
54
  gem.add_development_dependency "factory_girl_rails"
54
-
55
+ gem.add_development_dependency "equivalent-xml"
55
56
  end
@@ -15,3 +15,8 @@ task ci: ['engine_cart:generate', 'jetty:clean', 'sufia:jetty:config'] do
15
15
  end
16
16
  raise "test failures: #{error}" if error
17
17
  end
18
+
19
+ namespace 'engine_cart' do
20
+ desc 'Regenerate embedded app for testing'
21
+ task regenerate: ['engine_cart:clean', 'engine_cart:generate']
22
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sufia
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.1
4
+ version: 4.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Coyne
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-10-28 00:00:00.000000000 Z
12
+ date: 2014-10-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sufia-models
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - '='
19
19
  - !ruby/object:Gem::Version
20
- version: 4.0.1
20
+ version: 4.1.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - '='
26
26
  - !ruby/object:Gem::Version
27
- version: 4.0.1
27
+ version: 4.1.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: blacklight_advanced_search
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -283,6 +283,20 @@ dependencies:
283
283
  - - "~>"
284
284
  - !ruby/object:Gem::Version
285
285
  version: 2.3.0
286
+ - !ruby/object:Gem::Dependency
287
+ name: select2-rails
288
+ requirement: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - ">="
291
+ - !ruby/object:Gem::Version
292
+ version: '0'
293
+ type: :runtime
294
+ prerelease: false
295
+ version_requirements: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - ">="
298
+ - !ruby/object:Gem::Version
299
+ version: '0'
286
300
  - !ruby/object:Gem::Dependency
287
301
  name: engine_cart
288
302
  requirement: !ruby/object:Gem::Requirement
@@ -395,6 +409,20 @@ dependencies:
395
409
  - - ">="
396
410
  - !ruby/object:Gem::Version
397
411
  version: '0'
412
+ - !ruby/object:Gem::Dependency
413
+ name: equivalent-xml
414
+ requirement: !ruby/object:Gem::Requirement
415
+ requirements:
416
+ - - ">="
417
+ - !ruby/object:Gem::Version
418
+ version: '0'
419
+ type: :development
420
+ prerelease: false
421
+ version_requirements: !ruby/object:Gem::Requirement
422
+ requirements:
423
+ - - ">="
424
+ - !ruby/object:Gem::Version
425
+ version: '0'
398
426
  description: Sufia is a Rails engine for creating a self-deposit institutional repository
399
427
  email:
400
428
  - justin@curationexperts.com
@@ -489,12 +517,15 @@ files:
489
517
  - app/assets/javascripts/sufia/ga_events.js
490
518
  - app/assets/javascripts/sufia/multiForm.js
491
519
  - app/assets/javascripts/sufia/permissions.js
520
+ - app/assets/javascripts/sufia/proxy_rights.js
492
521
  - app/assets/javascripts/sufia/search.js
493
522
  - app/assets/javascripts/sufia/single_use_link.js.erb
494
523
  - app/assets/javascripts/sufia/tabs.js
495
524
  - app/assets/javascripts/sufia/tagcloud.js
525
+ - app/assets/javascripts/sufia/transfers.js
496
526
  - app/assets/javascripts/sufia/trophy.js
497
527
  - app/assets/javascripts/sufia/uploader.js
528
+ - app/assets/javascripts/sufia/user_search.js
498
529
  - app/assets/javascripts/terms_of_service.js
499
530
  - app/assets/stylesheets/fileupload/application.css
500
531
  - app/assets/stylesheets/fileupload/jquery.fileupload-ui.css.erb
@@ -515,6 +546,7 @@ files:
515
546
  - app/assets/stylesheets/sufia/_file-listing.scss
516
547
  - app/assets/stylesheets/sufia/_header.scss
517
548
  - app/assets/stylesheets/sufia/_home-page.scss
549
+ - app/assets/stylesheets/sufia/_proxy-rights.scss
518
550
  - app/assets/stylesheets/sufia/_settings.scss
519
551
  - app/assets/stylesheets/sufia/_styles.scss
520
552
  - app/assets/stylesheets/sufia/_tagcloud.scss
@@ -530,6 +562,7 @@ files:
530
562
  - app/controllers/concerns/sufia/contact_form_controller_behavior.rb
531
563
  - app/controllers/concerns/sufia/controller.rb
532
564
  - app/controllers/concerns/sufia/dashboard_controller_behavior.rb
565
+ - app/controllers/concerns/sufia/depositors_controller_behavior.rb
533
566
  - app/controllers/concerns/sufia/downloads_controller_behavior.rb
534
567
  - app/controllers/concerns/sufia/files_controller/browse_everything.rb
535
568
  - app/controllers/concerns/sufia/files_controller/local_ingest_behavior.rb
@@ -537,10 +570,12 @@ files:
537
570
  - app/controllers/concerns/sufia/files_controller_behavior.rb
538
571
  - app/controllers/concerns/sufia/homepage_controller.rb
539
572
  - app/controllers/concerns/sufia/my_controller_behavior.rb
573
+ - app/controllers/concerns/sufia/transfers_controller_behavior.rb
540
574
  - app/controllers/concerns/sufia/users_controller_behavior.rb
541
575
  - app/controllers/contact_form_controller.rb
542
576
  - app/controllers/content_blocks_controller.rb
543
577
  - app/controllers/dashboard_controller.rb
578
+ - app/controllers/depositors_controller.rb
544
579
  - app/controllers/directory_controller.rb
545
580
  - app/controllers/downloads_controller.rb
546
581
  - app/controllers/errors_controller.rb
@@ -559,6 +594,7 @@ files:
559
594
  - app/controllers/single_use_links_viewer_controller.rb
560
595
  - app/controllers/static_controller.rb
561
596
  - app/controllers/tinymce_assets_controller.rb
597
+ - app/controllers/transfers_controller.rb
562
598
  - app/controllers/users_controller.rb
563
599
  - app/helpers/batch_edits_helper.rb
564
600
  - app/helpers/contact_form_helper.rb
@@ -573,6 +609,7 @@ files:
573
609
  - app/helpers/trophy_helper.rb
574
610
  - app/jobs/content_delete_event_job.rb
575
611
  - app/jobs/content_deposit_event_job.rb
612
+ - app/jobs/content_depositor_change_event_job.rb
576
613
  - app/jobs/content_new_version_event_job.rb
577
614
  - app/jobs/content_restored_version_event_job.rb
578
615
  - app/jobs/content_update_event_job.rb
@@ -651,7 +688,9 @@ files:
651
688
  - app/views/dashboard/_index_partials/_contents.html.erb
652
689
  - app/views/dashboard/_index_partials/_heading_actions.html.erb
653
690
  - app/views/dashboard/_index_partials/_heading_greetings.html.erb
691
+ - app/views/dashboard/_index_partials/_proxy_rights.html.erb
654
692
  - app/views/dashboard/_index_partials/_stats.html.erb
693
+ - app/views/dashboard/_index_partials/_transfers.html.erb
655
694
  - app/views/dashboard/_index_partials/_user_info.html.erb
656
695
  - app/views/dashboard/index.html.erb
657
696
  - app/views/error/401.html.erb
@@ -686,6 +725,7 @@ files:
686
725
  - app/views/generic_files/citation.html.erb
687
726
  - app/views/generic_files/edit.html.erb
688
727
  - app/views/generic_files/new.html.erb
728
+ - app/views/generic_files/proxy.html.erb
689
729
  - app/views/generic_files/show.html.erb
690
730
  - app/views/generic_files/stats.html.erb
691
731
  - app/views/generic_files/upload/_agreement.html.erb
@@ -777,6 +817,10 @@ files:
777
817
  - app/views/static/subject_libraries.html.erb
778
818
  - app/views/static/terms.html.erb
779
819
  - app/views/static/zotero.html.erb
820
+ - app/views/transfers/_received.html.erb
821
+ - app/views/transfers/_sent.html.erb
822
+ - app/views/transfers/index.html.erb
823
+ - app/views/transfers/new.html.erb
780
824
  - app/views/users/_activity.html.erb
781
825
  - app/views/users/_activity_log.html.erb
782
826
  - app/views/users/_contributions.html.erb
@@ -788,6 +832,7 @@ files:
788
832
  - app/views/users/_profile.html.erb
789
833
  - app/views/users/_profile_actions.html.erb
790
834
  - app/views/users/_profile_tabs.html.erb
835
+ - app/views/users/_proxies.html.erb
791
836
  - app/views/users/_search_form.html.erb
792
837
  - app/views/users/_social_media_info.html.erb
793
838
  - app/views/users/_trophy_edit.html.erb
@@ -831,6 +876,7 @@ files:
831
876
  - spec/controllers/collections_controller_spec.rb
832
877
  - spec/controllers/content_blocks_controller_spec.rb
833
878
  - spec/controllers/dashboard_controller_spec.rb
879
+ - spec/controllers/depositors_controller_spec.rb
834
880
  - spec/controllers/downloads_controller_spec.rb
835
881
  - spec/controllers/featured_work_lists_controller_spec.rb
836
882
  - spec/controllers/featured_works_controller_spec.rb
@@ -847,11 +893,13 @@ files:
847
893
  - spec/controllers/single_use_links_viewer_controller_spec.rb
848
894
  - spec/controllers/static_controller_spec.rb
849
895
  - spec/controllers/tinymce_assets_controller_spec.rb
896
+ - spec/controllers/transfers_controller_spec.rb
850
897
  - spec/controllers/users_controller_spec.rb
851
898
  - spec/factories/checksum_audit_logs.rb
852
899
  - spec/factories/content_blocks.rb
853
900
  - spec/factories/featured_works.rb
854
901
  - spec/factories/generic_files.rb
902
+ - spec/factories/proxy_deposit_requests.rb
855
903
  - spec/factories/single_use_links.rb
856
904
  - spec/factories/users.rb
857
905
  - spec/features/browse_dashboard_files_spec.rb
@@ -863,6 +911,8 @@ files:
863
911
  - spec/features/display_dashboard_spec.rb
864
912
  - spec/features/ingest_upload_files_spec.rb
865
913
  - spec/features/notifications_spec.rb
914
+ - spec/features/ownership_transfer_spec.rb
915
+ - spec/features/proxy_spec.rb
866
916
  - spec/features/search_spec.rb
867
917
  - spec/features/single_use_links_spec.rb
868
918
  - spec/features/users_spec.rb
@@ -906,6 +956,7 @@ files:
906
956
  - spec/jobs/audit_job_spec.rb
907
957
  - spec/jobs/batch_update_job_spec.rb
908
958
  - spec/jobs/characterize_job_spec.rb
959
+ - spec/jobs/content_depositor_change_event_job_spec.rb
909
960
  - spec/jobs/create_derivatives_job_spec.rb
910
961
  - spec/jobs/event_jobs_spec.rb
911
962
  - spec/jobs/import_url_job_spec.rb
@@ -937,18 +988,25 @@ files:
937
988
  - spec/models/local_authority_spec.rb
938
989
  - spec/models/pageview_spec.rb
939
990
  - spec/models/properties_datastream_spec.rb
991
+ - spec/models/proxy_deposit_request_spec.rb
940
992
  - spec/models/single_use_link_spec.rb
941
993
  - spec/models/solr_document_spec.rb
942
994
  - spec/models/trophy_spec.rb
943
995
  - spec/models/user_spec.rb
944
996
  - spec/routing/featured_works_route_spec.rb
997
+ - spec/routing/ownership_transfers_route_spec.rb
945
998
  - spec/routing/route_spec.rb
946
999
  - spec/services/noid_spec.rb
947
1000
  - spec/spec_helper.rb
1001
+ - spec/support/cleaner.rb
948
1002
  - spec/support/features.rb
949
1003
  - spec/support/features/session_helpers.rb
950
1004
  - spec/support/fedora_conf/fedora.fcfg
951
1005
  - spec/support/fixture_helpers.rb
1006
+ - spec/support/locations.rb
1007
+ - spec/support/poltergeist.rb
1008
+ - spec/support/proxies.rb
1009
+ - spec/support/selectors.rb
952
1010
  - spec/support/uploaded_file_monkeypatch.rb
953
1011
  - spec/test_app_templates/lib/generators/test_app_generator.rb
954
1012
  - spec/views/batch/edit.html.erb_spec.rb
@@ -997,6 +1055,7 @@ files:
997
1055
  - sufia-models/app/models/concerns/sufia/generic_file/metadata.rb
998
1056
  - sufia-models/app/models/concerns/sufia/generic_file/mime_types.rb
999
1057
  - sufia-models/app/models/concerns/sufia/generic_file/permissions.rb
1058
+ - sufia-models/app/models/concerns/sufia/generic_file/proxy_deposit.rb
1000
1059
  - sufia-models/app/models/concerns/sufia/generic_file/reload_on_save.rb
1001
1060
  - sufia-models/app/models/concerns/sufia/generic_file/trophies.rb
1002
1061
  - sufia-models/app/models/concerns/sufia/generic_file/versions.rb
@@ -1020,6 +1079,8 @@ files:
1020
1079
  - sufia-models/app/models/group.rb
1021
1080
  - sufia-models/app/models/local_authority.rb
1022
1081
  - sufia-models/app/models/local_authority_entry.rb
1082
+ - sufia-models/app/models/proxy_deposit_request.rb
1083
+ - sufia-models/app/models/proxy_deposit_rights.rb
1023
1084
  - sufia-models/app/models/single_use_link.rb
1024
1085
  - sufia-models/app/models/subject_local_authority_entry.rb
1025
1086
  - sufia-models/app/models/sufia/avatar_uploader.rb
@@ -1034,6 +1095,7 @@ files:
1034
1095
  - sufia-models/config/locales/sufia.en.yml
1035
1096
  - sufia-models/lib/generators/sufia/models/fulltext_generator.rb
1036
1097
  - sufia-models/lib/generators/sufia/models/install_generator.rb
1098
+ - sufia-models/lib/generators/sufia/models/proxies_generator.rb
1037
1099
  - sufia-models/lib/generators/sufia/models/templates/config/analytics.yml
1038
1100
  - sufia-models/lib/generators/sufia/models/templates/config/clamav.rb
1039
1101
  - sufia-models/lib/generators/sufia/models/templates/config/mailboxer.rb
@@ -1056,6 +1118,8 @@ files:
1056
1118
  - sufia-models/lib/generators/sufia/models/templates/migrations/create_content_blocks.rb
1057
1119
  - sufia-models/lib/generators/sufia/models/templates/migrations/create_featured_works.rb
1058
1120
  - sufia-models/lib/generators/sufia/models/templates/migrations/create_local_authorities.rb
1121
+ - sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_requests.rb
1122
+ - sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_rights.rb
1059
1123
  - sufia-models/lib/generators/sufia/models/templates/migrations/create_single_use_links.rb
1060
1124
  - sufia-models/lib/generators/sufia/models/templates/migrations/create_tinymce_assets.rb
1061
1125
  - sufia-models/lib/generators/sufia/models/templates/migrations/create_trophies.rb
@@ -1083,7 +1147,6 @@ files:
1083
1147
  - sufia.gemspec
1084
1148
  - tasks/jetty.rake
1085
1149
  - tasks/release.rake
1086
- - tasks/sufia-db.rake
1087
1150
  - tasks/sufia-dev.rake
1088
1151
  - vendor/assets/fonts/Lato-Light.eot
1089
1152
  - vendor/assets/fonts/Lato-Light.ttf
@@ -1143,7 +1206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1143
1206
  version: '0'
1144
1207
  requirements: []
1145
1208
  rubyforge_project:
1146
- rubygems_version: 2.2.2
1209
+ rubygems_version: 2.4.2
1147
1210
  signing_key:
1148
1211
  specification_version: 4
1149
1212
  summary: Sufia was extracted from ScholarSphere developed by Penn State University
@@ -1157,6 +1220,7 @@ test_files:
1157
1220
  - spec/controllers/collections_controller_spec.rb
1158
1221
  - spec/controllers/content_blocks_controller_spec.rb
1159
1222
  - spec/controllers/dashboard_controller_spec.rb
1223
+ - spec/controllers/depositors_controller_spec.rb
1160
1224
  - spec/controllers/downloads_controller_spec.rb
1161
1225
  - spec/controllers/featured_work_lists_controller_spec.rb
1162
1226
  - spec/controllers/featured_works_controller_spec.rb
@@ -1173,11 +1237,13 @@ test_files:
1173
1237
  - spec/controllers/single_use_links_viewer_controller_spec.rb
1174
1238
  - spec/controllers/static_controller_spec.rb
1175
1239
  - spec/controllers/tinymce_assets_controller_spec.rb
1240
+ - spec/controllers/transfers_controller_spec.rb
1176
1241
  - spec/controllers/users_controller_spec.rb
1177
1242
  - spec/factories/checksum_audit_logs.rb
1178
1243
  - spec/factories/content_blocks.rb
1179
1244
  - spec/factories/featured_works.rb
1180
1245
  - spec/factories/generic_files.rb
1246
+ - spec/factories/proxy_deposit_requests.rb
1181
1247
  - spec/factories/single_use_links.rb
1182
1248
  - spec/factories/users.rb
1183
1249
  - spec/features/browse_dashboard_files_spec.rb
@@ -1189,6 +1255,8 @@ test_files:
1189
1255
  - spec/features/display_dashboard_spec.rb
1190
1256
  - spec/features/ingest_upload_files_spec.rb
1191
1257
  - spec/features/notifications_spec.rb
1258
+ - spec/features/ownership_transfer_spec.rb
1259
+ - spec/features/proxy_spec.rb
1192
1260
  - spec/features/search_spec.rb
1193
1261
  - spec/features/single_use_links_spec.rb
1194
1262
  - spec/features/users_spec.rb
@@ -1232,6 +1300,7 @@ test_files:
1232
1300
  - spec/jobs/audit_job_spec.rb
1233
1301
  - spec/jobs/batch_update_job_spec.rb
1234
1302
  - spec/jobs/characterize_job_spec.rb
1303
+ - spec/jobs/content_depositor_change_event_job_spec.rb
1235
1304
  - spec/jobs/create_derivatives_job_spec.rb
1236
1305
  - spec/jobs/event_jobs_spec.rb
1237
1306
  - spec/jobs/import_url_job_spec.rb
@@ -1263,18 +1332,25 @@ test_files:
1263
1332
  - spec/models/local_authority_spec.rb
1264
1333
  - spec/models/pageview_spec.rb
1265
1334
  - spec/models/properties_datastream_spec.rb
1335
+ - spec/models/proxy_deposit_request_spec.rb
1266
1336
  - spec/models/single_use_link_spec.rb
1267
1337
  - spec/models/solr_document_spec.rb
1268
1338
  - spec/models/trophy_spec.rb
1269
1339
  - spec/models/user_spec.rb
1270
1340
  - spec/routing/featured_works_route_spec.rb
1341
+ - spec/routing/ownership_transfers_route_spec.rb
1271
1342
  - spec/routing/route_spec.rb
1272
1343
  - spec/services/noid_spec.rb
1273
1344
  - spec/spec_helper.rb
1345
+ - spec/support/cleaner.rb
1274
1346
  - spec/support/features.rb
1275
1347
  - spec/support/features/session_helpers.rb
1276
1348
  - spec/support/fedora_conf/fedora.fcfg
1277
1349
  - spec/support/fixture_helpers.rb
1350
+ - spec/support/locations.rb
1351
+ - spec/support/poltergeist.rb
1352
+ - spec/support/proxies.rb
1353
+ - spec/support/selectors.rb
1278
1354
  - spec/support/uploaded_file_monkeypatch.rb
1279
1355
  - spec/test_app_templates/lib/generators/test_app_generator.rb
1280
1356
  - spec/views/batch/edit.html.erb_spec.rb