sufia-models 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.
- checksums.yaml +4 -4
- data/app/models/concerns/sufia/ability.rb +22 -0
- data/app/models/concerns/sufia/generic_file/proxy_deposit.rb +22 -0
- data/app/models/concerns/sufia/generic_file.rb +1 -0
- data/app/models/concerns/sufia/properties_datastream_behavior.rb +3 -0
- data/app/models/concerns/sufia/user.rb +9 -0
- data/app/models/proxy_deposit_request.rb +85 -0
- data/app/models/proxy_deposit_rights.rb +4 -0
- data/app/models/sufia/avatar_uploader.rb +2 -3
- data/lib/generators/sufia/models/install_generator.rb +9 -1
- data/lib/generators/sufia/models/proxies_generator.rb +53 -0
- data/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_requests.rb +16 -0
- data/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_rights.rb +11 -0
- data/lib/sufia/models/engine.rb +1 -1
- data/lib/sufia/models/version.rb +1 -1
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 77e86bd02adbf9fa79ab2de87508dc843d402376
|
4
|
+
data.tar.gz: 0c8fab48b8fce691fd8973a3839b4e0c7c556138
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e1bfec2d18baea1222f4913180e4c20dd58bb1ca6db08de6867c8f1cb802a48ceeb71859d16457aa5662e685df5ab7195c7659e3ed7b69442a10c55bb37b3312
|
7
|
+
data.tar.gz: f9800b7407df366242d621e8316af5db16533dd1e9c2030480ded54514243069827e662de6239c3acfe8a30e04e45548d4d7546c1db4c9ba8abc12aeca3bb5a5
|
@@ -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
|
@@ -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
|
@@ -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
|
-
"
|
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
|
data/lib/sufia/models/engine.rb
CHANGED
@@ -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
|
data/lib/sufia/models/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sufia-models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0
|
4
|
+
version: 4.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Friesen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -296,6 +296,7 @@ files:
|
|
296
296
|
- app/models/concerns/sufia/generic_file/metadata.rb
|
297
297
|
- app/models/concerns/sufia/generic_file/mime_types.rb
|
298
298
|
- app/models/concerns/sufia/generic_file/permissions.rb
|
299
|
+
- app/models/concerns/sufia/generic_file/proxy_deposit.rb
|
299
300
|
- app/models/concerns/sufia/generic_file/reload_on_save.rb
|
300
301
|
- app/models/concerns/sufia/generic_file/trophies.rb
|
301
302
|
- app/models/concerns/sufia/generic_file/versions.rb
|
@@ -319,6 +320,8 @@ files:
|
|
319
320
|
- app/models/group.rb
|
320
321
|
- app/models/local_authority.rb
|
321
322
|
- app/models/local_authority_entry.rb
|
323
|
+
- app/models/proxy_deposit_request.rb
|
324
|
+
- app/models/proxy_deposit_rights.rb
|
322
325
|
- app/models/single_use_link.rb
|
323
326
|
- app/models/subject_local_authority_entry.rb
|
324
327
|
- app/models/sufia/avatar_uploader.rb
|
@@ -333,6 +336,7 @@ files:
|
|
333
336
|
- config/locales/sufia.en.yml
|
334
337
|
- lib/generators/sufia/models/fulltext_generator.rb
|
335
338
|
- lib/generators/sufia/models/install_generator.rb
|
339
|
+
- lib/generators/sufia/models/proxies_generator.rb
|
336
340
|
- lib/generators/sufia/models/templates/config/analytics.yml
|
337
341
|
- lib/generators/sufia/models/templates/config/clamav.rb
|
338
342
|
- lib/generators/sufia/models/templates/config/mailboxer.rb
|
@@ -355,6 +359,8 @@ files:
|
|
355
359
|
- lib/generators/sufia/models/templates/migrations/create_content_blocks.rb
|
356
360
|
- lib/generators/sufia/models/templates/migrations/create_featured_works.rb
|
357
361
|
- lib/generators/sufia/models/templates/migrations/create_local_authorities.rb
|
362
|
+
- lib/generators/sufia/models/templates/migrations/create_proxy_deposit_requests.rb
|
363
|
+
- lib/generators/sufia/models/templates/migrations/create_proxy_deposit_rights.rb
|
358
364
|
- lib/generators/sufia/models/templates/migrations/create_single_use_links.rb
|
359
365
|
- lib/generators/sufia/models/templates/migrations/create_tinymce_assets.rb
|
360
366
|
- lib/generators/sufia/models/templates/migrations/create_trophies.rb
|
@@ -399,7 +405,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
399
405
|
version: '0'
|
400
406
|
requirements: []
|
401
407
|
rubyforge_project:
|
402
|
-
rubygems_version: 2.
|
408
|
+
rubygems_version: 2.4.2
|
403
409
|
signing_key:
|
404
410
|
specification_version: 4
|
405
411
|
summary: Models and services for sufia
|