sufia 4.0.1 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.md +247 -215
- data/README.md +7 -3
- data/SUFIA_VERSION +1 -1
- data/app/assets/javascripts/sufia.js +5 -2
- data/app/assets/javascripts/sufia/proxy_rights.js +68 -0
- data/app/assets/javascripts/sufia/transfers.js +3 -0
- data/app/assets/javascripts/sufia/user_search.js +31 -0
- data/app/assets/stylesheets/jquery-ui.css +17 -17
- data/app/assets/stylesheets/sufia.css.scss +3 -2
- data/app/assets/stylesheets/sufia/_proxy-rights.scss +10 -0
- data/app/controllers/concerns/sufia/contact_form_controller_behavior.rb +22 -23
- data/app/controllers/concerns/sufia/depositors_controller_behavior.rb +41 -0
- data/app/controllers/concerns/sufia/files_controller_behavior.rb +1 -0
- data/app/controllers/concerns/sufia/transfers_controller_behavior.rb +76 -0
- data/app/controllers/concerns/sufia/users_controller_behavior.rb +9 -11
- data/app/controllers/depositors_controller.rb +3 -0
- data/app/controllers/transfers_controller.rb +3 -0
- data/app/helpers/sufia/dashboard_helper_behavior.rb +15 -0
- data/app/helpers/sufia/sufia_helper_behavior.rb +24 -2
- data/app/jobs/content_depositor_change_event_job.rb +50 -0
- data/app/views/dashboard/_index_partials/_contents.html.erb +18 -0
- data/app/views/dashboard/_index_partials/_proxy_rights.html.erb +23 -0
- data/app/views/dashboard/_index_partials/_transfers.html.erb +14 -0
- data/app/views/generic_files/proxy.html.erb +5 -0
- data/app/views/generic_files/upload/_form.html.erb +7 -2
- data/app/views/my/_action_menu.html.erb +3 -1
- data/app/views/records/edit_fields/_default.html.erb +1 -1
- data/app/views/transfers/_received.html.erb +58 -0
- data/app/views/transfers/_sent.html.erb +38 -0
- data/app/views/transfers/index.html.erb +7 -0
- data/app/views/transfers/new.html.erb +23 -0
- data/app/views/users/_proxies.html.erb +8 -0
- data/app/views/users/_user_util_links_extra.html.erb +1 -0
- data/app/views/users/edit.html.erb +6 -1
- data/config/locales/sufia.en.yml +9 -4
- data/config/routes.rb +14 -3
- data/lib/sufia.rb +7 -5
- data/lib/sufia/version.rb +1 -1
- data/spec/controllers/authorities_controller_spec.rb +6 -6
- data/spec/controllers/batch_controller_spec.rb +29 -29
- data/spec/controllers/batch_edits_controller_spec.rb +7 -7
- data/spec/controllers/catalog_controller_spec.rb +9 -9
- data/spec/controllers/collections_controller_spec.rb +28 -28
- data/spec/controllers/content_blocks_controller_spec.rb +3 -3
- data/spec/controllers/dashboard_controller_spec.rb +1 -1
- data/spec/controllers/depositors_controller_spec.rb +50 -0
- data/spec/controllers/downloads_controller_spec.rb +22 -22
- data/spec/controllers/featured_work_lists_controller_spec.rb +1 -1
- data/spec/controllers/featured_works_controller_spec.rb +1 -1
- data/spec/controllers/generic_files_controller_spec.rb +98 -90
- data/spec/controllers/homepage_controller_spec.rb +1 -1
- data/spec/controllers/mailbox_controller_spec.rb +10 -10
- data/spec/controllers/my/collections_controller_spec.rb +1 -1
- data/spec/controllers/my/files_controller_spec.rb +1 -1
- data/spec/controllers/my/highlights_controller_spec.rb +1 -1
- data/spec/controllers/my/shares_controller_spec.rb +1 -1
- data/spec/controllers/my_controller_spec.rb +1 -1
- data/spec/controllers/pages_controller_spec.rb +1 -1
- data/spec/controllers/single_use_links_controller_spec.rb +46 -50
- data/spec/controllers/single_use_links_viewer_controller_spec.rb +16 -16
- data/spec/controllers/static_controller_spec.rb +9 -9
- data/spec/controllers/tinymce_assets_controller_spec.rb +1 -1
- data/spec/controllers/transfers_controller_spec.rb +212 -0
- data/spec/controllers/users_controller_spec.rb +1 -1
- data/spec/factories/generic_files.rb +4 -4
- data/spec/factories/proxy_deposit_requests.rb +6 -0
- data/spec/features/browse_dashboard_files_spec.rb +25 -36
- data/spec/features/browse_files_spec.rb +18 -13
- data/spec/features/catalog_search_spec.rb +3 -6
- data/spec/features/cloud_upload_spec.rb +5 -7
- data/spec/features/collection_spec.rb +28 -35
- data/spec/features/contact_form_spec.rb +24 -24
- data/spec/features/display_dashboard_spec.rb +11 -11
- data/spec/features/ingest_upload_files_spec.rb +10 -10
- data/spec/features/notifications_spec.rb +11 -11
- data/spec/features/ownership_transfer_spec.rb +111 -0
- data/spec/features/proxy_spec.rb +52 -0
- data/spec/features/search_spec.rb +1 -1
- data/spec/features/single_use_links_spec.rb +28 -18
- data/spec/features/users_spec.rb +3 -3
- data/spec/helpers/batch_edits_helper_spec.rb +1 -1
- data/spec/helpers/content_block_helper_spec.rb +1 -1
- data/spec/helpers/dashboard_helper_spec.rb +1 -1
- data/spec/helpers/generic_file_helper_spec.rb +1 -1
- data/spec/helpers/records_helper_spec.rb +1 -1
- data/spec/helpers/sufia_helper_spec.rb +8 -8
- data/spec/helpers/trophy_helper_spec.rb +1 -1
- data/spec/jobs/audit_job_spec.rb +5 -5
- data/spec/jobs/batch_update_job_spec.rb +14 -14
- data/spec/jobs/content_depositor_change_event_job_spec.rb +22 -0
- data/spec/jobs/event_jobs_spec.rb +104 -104
- data/spec/jobs/import_url_job_spec.rb +2 -2
- data/spec/jobs/ingest_local_file_job_spec.rb +1 -1
- data/spec/lib/sufia/breadcrumbs_spec.rb +3 -3
- data/spec/lib/sufia/id_service_spec.rb +1 -1
- data/spec/lib/sufia/upload_complete_behavior_spec.rb +4 -4
- data/spec/models/ability_spec.rb +59 -15
- data/spec/models/batch_spec.rb +16 -16
- data/spec/models/characterization_spec.rb +1 -1
- data/spec/models/checksum_audit_log_spec.rb +34 -26
- data/spec/models/collection_spec.rb +1 -1
- data/spec/models/download_spec.rb +1 -1
- data/spec/models/featured_work_list_spec.rb +1 -1
- data/spec/models/featured_work_spec.rb +15 -4
- data/spec/models/file_content_datastream_spec.rb +14 -14
- data/spec/models/file_usage_spec.rb +1 -1
- data/spec/models/fits_datastream_spec.rb +1 -1
- data/spec/models/generic_file/reload_on_save_spec.rb +4 -4
- data/spec/models/generic_file/visibility_spec.rb +1 -1
- data/spec/models/generic_file/web_form_spec.rb +6 -5
- data/spec/models/generic_file_rdf_datastream_spec.rb +1 -1
- data/spec/models/generic_file_spec.rb +254 -220
- data/spec/models/geo_names_resource_spec.rb +2 -2
- data/spec/models/local_authority_spec.rb +60 -59
- data/spec/models/pageview_spec.rb +1 -1
- data/spec/models/properties_datastream_spec.rb +29 -10
- data/spec/models/proxy_deposit_request_spec.rb +107 -0
- data/spec/models/single_use_link_spec.rb +13 -13
- data/spec/models/solr_document_spec.rb +1 -1
- data/spec/models/trophy_spec.rb +6 -6
- data/spec/models/user_spec.rb +38 -22
- data/spec/routing/featured_works_route_spec.rb +1 -1
- data/spec/routing/ownership_transfers_route_spec.rb +45 -0
- data/spec/routing/route_spec.rb +42 -42
- data/spec/services/noid_spec.rb +2 -2
- data/spec/spec_helper.rb +10 -5
- data/spec/support/cleaner.rb +12 -0
- data/spec/support/features.rb +5 -0
- data/spec/support/features/session_helpers.rb +3 -17
- data/spec/support/locations.rb +36 -0
- data/spec/support/poltergeist.rb +11 -0
- data/spec/support/proxies.rb +14 -0
- data/spec/support/selectors.rb +122 -0
- data/spec/views/batch/edit.html.erb_spec.rb +1 -1
- data/spec/views/batch_edits/check_all_spec.rb +4 -4
- data/spec/views/catalog/index.html.erb_spec.rb +1 -1
- data/spec/views/catalog/sort_and_per_page.html.erb_spec.rb +1 -1
- data/spec/views/collections/_form.html.erb_spec.rb +3 -1
- data/spec/views/collections/_show_descriptions.html.erb_spec.rb +1 -1
- data/spec/views/dashboard/index_spec.rb +3 -6
- data/spec/views/generic_file/edit.html.erb_spec.rb +1 -1
- data/spec/views/generic_file/show.html.erb_spec.rb +1 -1
- data/spec/views/generic_file/stats.html.erb_spec.rb +1 -1
- data/spec/views/my/facet.html.erb_spec.rb +2 -2
- data/spec/views/users/_follower_modal.html.erb_spec.rb +1 -1
- data/spec/views/users/_following_modal.html.erb_spec.rb +1 -1
- data/spec/views/users/_notify_number.html.erb_spec.rb +1 -1
- data/spec/views/users/_user_util_links.html.erb_spec.rb +1 -1
- data/spec/views/users/index.html.erb_spec.rb +2 -2
- data/spec/views/users/show.html.erb_spec.rb +2 -2
- data/sufia-models/app/models/concerns/sufia/ability.rb +22 -0
- data/sufia-models/app/models/concerns/sufia/generic_file.rb +1 -0
- data/sufia-models/app/models/concerns/sufia/generic_file/proxy_deposit.rb +22 -0
- data/sufia-models/app/models/concerns/sufia/properties_datastream_behavior.rb +3 -0
- data/sufia-models/app/models/concerns/sufia/user.rb +9 -0
- data/sufia-models/app/models/proxy_deposit_request.rb +85 -0
- data/sufia-models/app/models/proxy_deposit_rights.rb +4 -0
- data/sufia-models/app/models/sufia/avatar_uploader.rb +2 -3
- data/sufia-models/lib/generators/sufia/models/install_generator.rb +9 -1
- data/sufia-models/lib/generators/sufia/models/proxies_generator.rb +53 -0
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_requests.rb +16 -0
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_rights.rb +11 -0
- data/sufia-models/lib/sufia/models/engine.rb +1 -1
- data/sufia-models/lib/sufia/models/version.rb +1 -1
- data/sufia.gemspec +2 -1
- data/tasks/sufia-dev.rake +5 -0
- metadata +82 -6
- data/tasks/sufia-db.rake +0 -21
@@ -24,14 +24,14 @@ module Sufia::UsersControllerBehavior
|
|
24
24
|
format.html
|
25
25
|
format.json { render json: @users.to_json }
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
end
|
29
29
|
|
30
30
|
# Display user profile
|
31
31
|
def show
|
32
32
|
if @user.respond_to? :profile_events
|
33
|
-
@events = @user.profile_events(100)
|
34
|
-
else
|
33
|
+
@events = @user.profile_events(100)
|
34
|
+
else
|
35
35
|
@events = []
|
36
36
|
end
|
37
37
|
@trophies = @user.trophy_files
|
@@ -65,7 +65,7 @@ module Sufia::UsersControllerBehavior
|
|
65
65
|
redirect_to sufia.profile_path(@user.to_param), notice: "Your profile has been updated"
|
66
66
|
end
|
67
67
|
|
68
|
-
def toggle_trophy
|
68
|
+
def toggle_trophy
|
69
69
|
id = Sufia::Noid.namespaceize params[:file_id]
|
70
70
|
unless current_user.can? :edit, id
|
71
71
|
redirect_to root_path, alert: "You do not have permissions to the file"
|
@@ -73,17 +73,16 @@ module Sufia::UsersControllerBehavior
|
|
73
73
|
end
|
74
74
|
# TODO make sure current user has access to file
|
75
75
|
t = current_user.trophies.where(generic_file_id: params[:file_id]).first
|
76
|
-
if t
|
77
|
-
t.destroy
|
76
|
+
if t
|
77
|
+
t.destroy
|
78
78
|
#TODO do this better says Mike
|
79
|
-
return false if t.persisted?
|
79
|
+
return false if t.persisted?
|
80
80
|
else
|
81
81
|
t = current_user.trophies.create(generic_file_id: params[:file_id])
|
82
82
|
return false unless t.persisted?
|
83
83
|
end
|
84
84
|
render json: t
|
85
|
-
end
|
86
|
-
|
85
|
+
end
|
87
86
|
|
88
87
|
# Follow a user
|
89
88
|
def follow
|
@@ -105,7 +104,7 @@ module Sufia::UsersControllerBehavior
|
|
105
104
|
|
106
105
|
protected
|
107
106
|
|
108
|
-
# You can override base_query to return a list of arguments
|
107
|
+
# You can override base_query to return a list of arguments
|
109
108
|
def base_query
|
110
109
|
[nil]
|
111
110
|
end
|
@@ -133,4 +132,3 @@ module Sufia::UsersControllerBehavior
|
|
133
132
|
return sort_val
|
134
133
|
end
|
135
134
|
end
|
136
|
-
|
@@ -1,5 +1,20 @@
|
|
1
1
|
module Sufia
|
2
2
|
module DashboardHelperBehavior
|
3
|
+
def render_sent_transfers
|
4
|
+
if @outgoing.present?
|
5
|
+
render partial: 'transfers/sent'
|
6
|
+
else
|
7
|
+
t('sufia.dashboard.no_transfers')
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def render_received_transfers
|
12
|
+
if @incoming.present?
|
13
|
+
render partial: 'transfers/received'
|
14
|
+
else
|
15
|
+
t('sufia.dashboard.no_transfer_requests')
|
16
|
+
end
|
17
|
+
end
|
3
18
|
|
4
19
|
def render_recent_activity
|
5
20
|
if @activity.empty?
|
@@ -1,5 +1,27 @@
|
|
1
1
|
module Sufia
|
2
2
|
module SufiaHelperBehavior
|
3
|
+
def error_messages_for(object)
|
4
|
+
if object.try(:errors) and object.errors.full_messages.any?
|
5
|
+
content_tag(:div, class: 'alert alert-block alert-error validation-errors') do
|
6
|
+
content_tag(:h4, I18n.t('sufia.errors.header', model: object.class.model_name.human.downcase), class: 'alert-heading') +
|
7
|
+
content_tag(:ul) do
|
8
|
+
object.errors.full_messages.map do |message|
|
9
|
+
content_tag(:li, message)
|
10
|
+
end.join('').html_safe
|
11
|
+
end
|
12
|
+
end
|
13
|
+
else
|
14
|
+
'' # return empty string
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def show_transfer_request_title(req)
|
19
|
+
if req.deleted_file?
|
20
|
+
req.title
|
21
|
+
else
|
22
|
+
link_to(req.title, sufia.generic_file_path(req['pid'].split(':').last))
|
23
|
+
end
|
24
|
+
end
|
3
25
|
|
4
26
|
# You can configure blacklight to use this as the thumbnail
|
5
27
|
# example:
|
@@ -122,7 +144,7 @@ module Sufia
|
|
122
144
|
def search_form_action
|
123
145
|
if on_the_dashboard?
|
124
146
|
search_action_for_dashboard
|
125
|
-
else
|
147
|
+
else
|
126
148
|
catalog_index_path
|
127
149
|
end
|
128
150
|
end
|
@@ -156,7 +178,7 @@ module Sufia
|
|
156
178
|
sufia.dashboard_highlights_path
|
157
179
|
else
|
158
180
|
sufia.dashboard_files_path
|
159
|
-
end
|
181
|
+
end
|
160
182
|
end
|
161
183
|
|
162
184
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
class ContentDepositorChangeEventJob < EventJob
|
2
|
+
|
3
|
+
def queue_name
|
4
|
+
:proxy_deposit
|
5
|
+
end
|
6
|
+
|
7
|
+
attr_accessor :pid, :login, :reset
|
8
|
+
|
9
|
+
# @param [String] pid identifier of the file to be transfered
|
10
|
+
# @param [String] login the user key of the user the file is being transfered to.
|
11
|
+
# @param [Boolean] reset (false) should the access controls be reset. This means revoking edit access from the depositor
|
12
|
+
def initialize(pid, login, reset=false)
|
13
|
+
self.pid = pid
|
14
|
+
self.login = login
|
15
|
+
self.reset = reset
|
16
|
+
end
|
17
|
+
|
18
|
+
def run
|
19
|
+
# TODO: This should be in its own job, not this event job
|
20
|
+
file = ::GenericFile.find(pid)
|
21
|
+
file.proxy_depositor = file.depositor
|
22
|
+
file.rightsMetadata.clear_permissions! if reset
|
23
|
+
file.apply_depositor_metadata(login)
|
24
|
+
file.save!
|
25
|
+
|
26
|
+
action = "User #{link_to_profile file.proxy_depositor} has transferred #{link_to file.title.first, Sufia::Engine.routes.url_helpers.generic_file_path(file.noid)} to User #{link_to_profile login}"
|
27
|
+
timestamp = Time.now.to_i
|
28
|
+
depositor = ::User.find_by_user_key(file.depositor)
|
29
|
+
proxy_depositor = ::User.find_by_user_key(file.proxy_depositor)
|
30
|
+
# Create the event
|
31
|
+
event = proxy_depositor.create_event(action, timestamp)
|
32
|
+
# Log the event to the GF's stream
|
33
|
+
file.log_event(event)
|
34
|
+
|
35
|
+
#log the event to the depositor
|
36
|
+
log_depositor_event(event, depositor, file)
|
37
|
+
|
38
|
+
#log the event to the proxy_depositor
|
39
|
+
log_depositor_event(event, proxy_depositor, file)
|
40
|
+
end
|
41
|
+
|
42
|
+
def log_depositor_event(event, depositor, gf)
|
43
|
+
# Log the event to the depositor's profile stream
|
44
|
+
depositor.log_profile_event(event)
|
45
|
+
# Fan out the event to all followers who have access
|
46
|
+
depositor.followers.select { |user| user.can? :read, gf }.each do |follower|
|
47
|
+
follower.log_event(event)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -16,3 +16,21 @@
|
|
16
16
|
<%= link_to_additional_notifications %>
|
17
17
|
</div>
|
18
18
|
</div>
|
19
|
+
|
20
|
+
<div class="panel panel-default" id="proxy_management">
|
21
|
+
<div class="panel-heading dashboard-panel">
|
22
|
+
<h3 class="panel-title ">Manage Proxies</h3>
|
23
|
+
</div>
|
24
|
+
<div class="panel-body">
|
25
|
+
<%= render partial: 'dashboard/_index_partials/proxy_rights' %>
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
|
29
|
+
<div class="panel panel-default" id="transfers">
|
30
|
+
<div class="panel-heading dashboard-panel">
|
31
|
+
<h3 class="panel-title "><%= t("sufia.dashboard.transfer_of_ownership") %></h3>
|
32
|
+
</div>
|
33
|
+
<div class="panel-body">
|
34
|
+
<%= render partial: 'dashboard/_index_partials/transfers' %>
|
35
|
+
</div>
|
36
|
+
</div>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<div class="clearfix proxy-rights">
|
2
|
+
|
3
|
+
<div class="col-xs-6 proxy-search">
|
4
|
+
<h3 class="panel-title">Authorize Proxy</h3>
|
5
|
+
<label class="sr-only" for="user">Proxy User</label>
|
6
|
+
<%= hidden_field_tag :user, nil, data: { grantor: current_user.to_param } %>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<div class="col-xs-6">
|
10
|
+
<h3 class="panel-title">Current Proxies</h3>
|
11
|
+
<table class="table table-condensed table-striped" id="authorizedProxies">
|
12
|
+
<tbody>
|
13
|
+
<% @user.can_receive_deposits_from.each do |depositor| %>
|
14
|
+
<tr><td class="depositor-name"><%= depositor.name %></td>
|
15
|
+
<td><%= link_to(sufia.user_depositor_path(@user, depositor), method: :delete, class: "remove-proxy-button") do %>
|
16
|
+
<i class="glyphicon glyphicon-remove"></i><% end %>
|
17
|
+
</td></tr>
|
18
|
+
<% end %>
|
19
|
+
</tbody>
|
20
|
+
</table>
|
21
|
+
</div>
|
22
|
+
|
23
|
+
</div>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<div class="row">
|
2
|
+
<div class="col-xs-12 col-sm-9">
|
3
|
+
<h4>Sent</h4>
|
4
|
+
</div>
|
5
|
+
<div class="col-xs-12 col-sm-3 transfer_link">
|
6
|
+
<%= link_to sufia.dashboard_files_path do %>
|
7
|
+
<%= t("sufia.dashboard.transfer_files_link") %>
|
8
|
+
<% end %>
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
<%= render_sent_transfers %>
|
12
|
+
|
13
|
+
<h4>Received</h4>
|
14
|
+
<%= render_received_transfers %>
|
@@ -1,6 +1,11 @@
|
|
1
|
-
<%= form_for(@generic_file, url: sufia.generic_files_path, html: {multipart: true, id: 'fileupload'}) do |f| %>
|
1
|
+
<%= form_for(@generic_file, url: sufia.generic_files_path, html: { multipart: true, id: 'fileupload' }) do |f| %>
|
2
|
+
<% unless current_user.can_make_deposits_for.empty? %>
|
3
|
+
<div class="controls">
|
4
|
+
<%= label_tag :on_behalf_of, 'On Behalf of' %>
|
5
|
+
<%= select_tag :on_behalf_of, options_for_select(current_user.can_make_deposits_for), prompt: "Yourself" %>
|
6
|
+
</div>
|
7
|
+
<% end %>
|
2
8
|
<div class="well">
|
3
9
|
<%= render partial: 'generic_files/upload/form_fields' %>
|
4
10
|
</div>
|
5
11
|
<% end %>
|
6
|
-
|
@@ -27,6 +27,8 @@
|
|
27
27
|
<i aria-hidden="true" class='glyphicon glyphicon-star'></i> <%= text %>
|
28
28
|
<% end %>
|
29
29
|
</li>
|
30
|
+
<li>
|
31
|
+
<%= link_to raw('<i class="glyphicon glyphicon-transfer" aria-hidden="true"></i> Transfer Ownership of File'), sufia.new_generic_file_transfer_path(noid), class: 'itemicon itemtransfer', title: 'Transfer Ownership of File' if gf.depositor == @user.user_key %>
|
32
|
+
</li>
|
30
33
|
</ul>
|
31
34
|
</div>
|
32
|
-
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<div <% if index == 0 %> id="additional_<%= key.to_s %>_clone" <% end %>>
|
2
2
|
<% required = render_req && (index == 0) && record.required?(key) %>
|
3
3
|
<%= f.text_field :title, name: "#{ActiveModel::Naming.singular(f.object)}[#{key.to_s}][]", id: "#{ActiveModel::Naming.singular(f.object)}_#{key.to_s}", value: v, class: "input-large", required: required %>
|
4
|
-
<%= render partial: "records/edit_fields/suffix", locals: { key: key, index: index } %>
|
4
|
+
<%= render partial: "records/edit_fields/suffix", locals: { key: key, index: index, single: f.object.class.unique?(key) } %>
|
5
5
|
</div>
|
6
6
|
<div id="additional_<%= key %>_elements"></div>
|
@@ -0,0 +1,58 @@
|
|
1
|
+
<table class="table table-striped" id="incoming-transfers">
|
2
|
+
<thead>
|
3
|
+
<tr>
|
4
|
+
<th>Title</th>
|
5
|
+
<th>Date</th>
|
6
|
+
<th>From</th>
|
7
|
+
<th>Status</th>
|
8
|
+
<th>Comments</th>
|
9
|
+
</tr>
|
10
|
+
</thead>
|
11
|
+
<tbody>
|
12
|
+
<% @incoming.each do |req| %>
|
13
|
+
<% unless req.sending_user.blank? %>
|
14
|
+
<tr>
|
15
|
+
<td> <%= show_transfer_request_title(req) %> </td>
|
16
|
+
<td class="sorts-dash">
|
17
|
+
<% if req.created_at > Time.now.beginning_of_day %>
|
18
|
+
<%= "#{time_ago_in_words(req.created_at)} ago"%>
|
19
|
+
<% else %>
|
20
|
+
<%= req.created_at.strftime("%b %d %Y") %>
|
21
|
+
<% end %>
|
22
|
+
</td>
|
23
|
+
<td><%= link_to req.sending_user.name, sufia.profile_path(req.sending_user) %></td>
|
24
|
+
<td>
|
25
|
+
<% if req.pending? %>
|
26
|
+
<div class="btn-group">
|
27
|
+
<button class="btn btn-primary" href="#">Accept</button>
|
28
|
+
<button class="btn btn-small dropdown-toggle accept" data-toggle="dropdown" href="#"><span class="caret"></span></button>
|
29
|
+
<ul class="dropdown-menu">
|
30
|
+
<li>
|
31
|
+
<%= link_to 'Allow depositor to retain edit access', sufia.accept_transfer_path(req), method: :put, class: 'accept-retain', title: 'Accept the file and allow the original depositor to retain access to edit the file and metadat' %>
|
32
|
+
</li>
|
33
|
+
<li>
|
34
|
+
<%= link_to 'Remove depositor access', sufia.accept_transfer_path(req, reset: true), method: :put, class: 'accept-reset', title: 'Accept the file remove access from the original depositor.' %>
|
35
|
+
</li>
|
36
|
+
<li>
|
37
|
+
<%= link_to 'Authorize depositor as proxy', sufia.accept_transfer_path(req, sticky: true), method: :put, class: 'accept-stick', title: 'Accept the file and allow the original depositor to retain access and authorize the original depositor as a proxy to deposit file on your behalf.' %>
|
38
|
+
</li>
|
39
|
+
</ul>
|
40
|
+
</div>
|
41
|
+
|
42
|
+
<%#= button_to "Accept and allow depositor to retain edit access", sufia.accept_transfer_path(req), method: :put, class: 'btn btn-primary' %>
|
43
|
+
<%#= button_to "Accept and reset access", sufia.accept_transfer_path(req, reset: true), method: :put, class: 'btn btn-primary' %>
|
44
|
+
<%#= button_to "Accept & Authorize Proxy", sufia.accept_transfer_path(req, sticky: true), method: :put, class: 'btn btn-primary' %>
|
45
|
+
<%= button_to "Reject", sufia.reject_transfer_path(req), method: :put, class: 'btn btn-danger', data: {confirm: "Are you sure you want to reject this request?"} %>
|
46
|
+
<% else %>
|
47
|
+
<%= req.status.capitalize %>
|
48
|
+
<% end %>
|
49
|
+
</td>
|
50
|
+
|
51
|
+
<td><%= req.sender_comment %></td>
|
52
|
+
</tr>
|
53
|
+
<% else %>
|
54
|
+
<% Rails.logger.error "A proxy request has no sender: #{req.inspect}" %>
|
55
|
+
<% end %>
|
56
|
+
<% end %>
|
57
|
+
</tbody>
|
58
|
+
</table>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<table class="table table-striped" id="outgoing-transfers">
|
2
|
+
<thead>
|
3
|
+
<tr>
|
4
|
+
<th>Title</th>
|
5
|
+
<th>Date</th>
|
6
|
+
<th>To</th>
|
7
|
+
<th>Status</th>
|
8
|
+
<th>Comments</th>
|
9
|
+
</tr>
|
10
|
+
</thead>
|
11
|
+
<tbody>
|
12
|
+
<% @outgoing.each do |req| %>
|
13
|
+
<% unless req.receiving_user.blank? %>
|
14
|
+
<tr>
|
15
|
+
<td> <%= show_transfer_request_title(req) %> </td>
|
16
|
+
<td class="sorts-dash">
|
17
|
+
<% if req.created_at > Time.now.beginning_of_day %>
|
18
|
+
<%= "#{time_ago_in_words(req.created_at)} ago"%>
|
19
|
+
<% else %>
|
20
|
+
<%= req.created_at.strftime("%b %d %Y") %>
|
21
|
+
<% end %>
|
22
|
+
</td>
|
23
|
+
<td><%= link_to req.receiving_user.name, sufia.profile_path(req.receiving_user) %></td>
|
24
|
+
<td>
|
25
|
+
<% if req.pending? %>
|
26
|
+
<%= button_to "Cancel", sufia.transfer_path(req), method: :delete, class:'btn btn-danger', data: {confirm: "Are you sure you want to cancel this request?"} %>
|
27
|
+
<% else %>
|
28
|
+
<%= req.status.capitalize %>
|
29
|
+
<% end %>
|
30
|
+
</td>
|
31
|
+
<td><%= req.sender_comment %></td>
|
32
|
+
</tr>
|
33
|
+
<% else %>
|
34
|
+
<% Rails.logger.error "A proxy request has no receiver: #{req.inspect}" %>
|
35
|
+
<% end %>
|
36
|
+
<% end %>
|
37
|
+
</tbody>
|
38
|
+
</table>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<h1>Transfer ownership of "<%= @proxy_deposit_request.title %>"</h1>
|
2
|
+
<span class="sr-only">Select a user to transfer <%= @proxy_deposit_request.title %> to, add optional comments and then press transfer.</span>
|
3
|
+
<%= form_for @proxy_deposit_request, url: sufia.generic_file_transfers_path(@generic_file), html: {class: 'form-horizontal', id: 'new_transfer'} do |f| %>
|
4
|
+
<div class="well">
|
5
|
+
<%= error_messages_for(f.object) %>
|
6
|
+
<div class="control-group">
|
7
|
+
<%= f.label :transfer_to, "User", class: 'control-label' %>
|
8
|
+
<div class="controls">
|
9
|
+
<%= f.text_field :transfer_to, "aria-hidden" => true %>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
<div class="control-group">
|
13
|
+
<%= f.label :sender_comment, "Comments", class: 'control-label' %>
|
14
|
+
<div class="controls">
|
15
|
+
<%= f.text_area :sender_comment %>
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
|
20
|
+
<div class="form-actions">
|
21
|
+
<%= f.submit "Transfer", class: 'btn btn-primary', data: {confirm: "Are you sure you want to transfer ownership of this file to another user? Click Ok to transfer or Cancel to return to the transfer screen"} %>
|
22
|
+
</div>
|
23
|
+
<% end %>
|
@@ -2,3 +2,4 @@
|
|
2
2
|
<% # render on the user utility button using the sample HTML shown below %>
|
3
3
|
<% # %>
|
4
4
|
<% # <li><%= link_to 'text', 'path', id: 'extra_nav_link' </li> %>
|
5
|
+
<li><%= link_to raw('<i class="glyphicon glyphicon-transfer"></i> transfer requests'), sufia.transfers_path, id: 'transfer_nav_link' %></li>
|
@@ -1,5 +1,6 @@
|
|
1
1
|
<h1>Edit Profile</h1>
|
2
|
-
<div class="col-xs-12 col-sm-5
|
2
|
+
<div class="col-xs-12 col-sm-5">
|
3
|
+
<div class="well">
|
3
4
|
<%= form_for @user, url: sufia.profile_path(@user.to_param), html: {multipart: true, class: 'form-horizontal' } do |f| %>
|
4
5
|
<div class="form-group">
|
5
6
|
<%= f.label :avatar, '<i class="glyphicon glyphicon-camera"></i> Change picture'.html_safe, class: "col-xs-4 control-label" %>
|
@@ -53,6 +54,10 @@
|
|
53
54
|
|
54
55
|
<%= f.button '<i class="glyphicon glyphicon-save"></i> Save Profile'.html_safe, type: 'submit', class: "btn btn-primary" %>
|
55
56
|
<% end %>
|
57
|
+
</div>
|
58
|
+
<div class="well">
|
59
|
+
<%= render partial: 'dashboard/_index_partials/proxy_rights' %>
|
60
|
+
</div>
|
56
61
|
</div><!-- .col-xs-5 /well-->
|
57
62
|
|
58
63
|
<div class="col-xs-12 col-sm-offset-1 col-sm-6 well">
|