blacklight-spotlight 0.27.0 → 0.28.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/assets/stylesheets/spotlight/typeahead.css +1 -0
- data/app/controllers/spotlight/admin_users_controller.rb +1 -5
- data/app/controllers/spotlight/roles_controller.rb +0 -2
- data/app/mailers/spotlight/invitation_mailer.rb +19 -0
- data/app/models/spotlight/role.rb +3 -1
- data/app/models/spotlight/solr_document_sidecar.rb +1 -2
- data/app/views/spotlight/admin_users/index.html.erb +1 -4
- data/app/views/spotlight/invitation_mailer/exhibit_invitation_notification.html.erb +12 -0
- data/app/views/spotlight/roles/_edit_fields.html.erb +1 -5
- data/app/views/spotlight/roles/index.html.erb +1 -1
- data/config/locales/spotlight.en.yml +10 -5
- data/config/routes.rb +2 -14
- data/db/migrate/20160816165432_add_index_status_to_solr_document_sidecar.rb +5 -0
- data/lib/spotlight/version.rb +1 -1
- data/spec/controllers/spotlight/admin_users_controller_spec.rb +4 -50
- data/spec/controllers/spotlight/roles_controller_spec.rb +0 -50
- data/spec/features/javascript/roles_admin_spec.rb +1 -13
- data/spec/features/site_admin_management_spec.rb +3 -6
- data/spec/models/spotlight/role_spec.rb +7 -4
- metadata +5 -5
- data/app/assets/javascripts/spotlight/check_user_existence.js +0 -84
- data/app/controllers/spotlight/concerns/user_existable.rb +0 -24
- data/app/controllers/spotlight/concerns/user_invitable.rb +0 -38
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 00bc8950c632e97a365418053a379016e111b937
|
|
4
|
+
data.tar.gz: 4eb7a348e011e9e0fc646946b91126a0e017269d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9b6ce0ffe5fe536bbc4b73e845e3ccbe2ae48c01f43789463e6cab7e9454a9eaac5289b7c21da19ec4b66be634440adf1a460d02352c7baafee637c5e2761da3
|
|
7
|
+
data.tar.gz: 4ba852983e8568cc516e0a3e7cabfa7cd15b46c132ddb8d34bbd2fa2fde94625c411c7a76674632f16283f4f95947f6cd1609811450251546de4a7e7b335525a
|
|
@@ -2,9 +2,6 @@ module Spotlight
|
|
|
2
2
|
##
|
|
3
3
|
# A controller to handle the adminstration of site admin users
|
|
4
4
|
class AdminUsersController < Spotlight::ApplicationController
|
|
5
|
-
include Spotlight::Concerns::UserExistable
|
|
6
|
-
include Spotlight::Concerns::UserInvitable
|
|
7
|
-
|
|
8
5
|
before_action :authenticate_user!
|
|
9
6
|
before_action :load_site
|
|
10
7
|
load_and_authorize_resource :site, class: 'Spotlight::Site'
|
|
@@ -42,8 +39,7 @@ module Spotlight
|
|
|
42
39
|
end
|
|
43
40
|
|
|
44
41
|
def update_roles
|
|
45
|
-
|
|
46
|
-
Spotlight::Role.create(user: user, role: 'admin', resource: @site).save
|
|
42
|
+
Spotlight::Role.create(user_key: create_params[:email], role: 'admin', resource: @site).save
|
|
47
43
|
end
|
|
48
44
|
end
|
|
49
45
|
end
|
|
@@ -3,8 +3,6 @@ module Spotlight
|
|
|
3
3
|
# CRUD actions for assigning exhibit roles to
|
|
4
4
|
# existing users
|
|
5
5
|
class RolesController < Spotlight::ApplicationController
|
|
6
|
-
include Spotlight::Concerns::UserExistable
|
|
7
|
-
include Spotlight::Concerns::UserInvitable
|
|
8
6
|
before_action :authenticate_user!
|
|
9
7
|
load_and_authorize_resource :exhibit, class: Spotlight::Exhibit
|
|
10
8
|
load_and_authorize_resource through: :exhibit, except: [:update_all]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Spotlight
|
|
2
|
+
# Mailer for contacting new exhibit curators or administrators
|
|
3
|
+
class InvitationMailer < ActionMailer::Base
|
|
4
|
+
include Devise::Mailers::Helpers
|
|
5
|
+
|
|
6
|
+
def exhibit_invitation_notification(role)
|
|
7
|
+
initialize_from_record(role.user)
|
|
8
|
+
@role = role
|
|
9
|
+
@key = if @role.resource.is_a?(Spotlight::Site)
|
|
10
|
+
'exhibits_admin_invitation_mailer'
|
|
11
|
+
else
|
|
12
|
+
'invitation_mailer'
|
|
13
|
+
end
|
|
14
|
+
mail(to: role.user.email,
|
|
15
|
+
from: mailer_sender(devise_mapping),
|
|
16
|
+
subject: I18n.t("spotlight.#{@key}.invitation_instructions.subject", exhibit_name: @role.resource.title))
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -28,7 +28,9 @@ module Spotlight
|
|
|
28
28
|
protected
|
|
29
29
|
|
|
30
30
|
def user_must_exist
|
|
31
|
-
|
|
31
|
+
return if user.present?
|
|
32
|
+
|
|
33
|
+
self.user ||= Spotlight::Engine.user_class.invite!(email: user_key, skip_invitation: true)
|
|
32
34
|
end
|
|
33
35
|
|
|
34
36
|
# This is just like
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
<% end %>
|
|
23
23
|
<tr data-edit-for='new'>
|
|
24
24
|
<td>
|
|
25
|
-
<%= f.email_field :email, hide_label: true
|
|
25
|
+
<%= f.email_field :email, hide_label: true %>
|
|
26
26
|
<span data-user-role='admin'></span>
|
|
27
27
|
</td>
|
|
28
28
|
<td>
|
|
@@ -36,9 +36,6 @@
|
|
|
36
36
|
</tr>
|
|
37
37
|
<tr data-edit-for='new'>
|
|
38
38
|
<td colspan='2'>
|
|
39
|
-
<span style='display:none' class='help-block' data-behavior='no-user-note'>
|
|
40
|
-
<%= t('spotlight.roles.edit_fields.invite_html', link: link_to(t('spotlight.roles.edit_fields.invite_link'), 'javascript:;', data: { method: 'post', 'invite-url': spotlight. invite_admin_users_path })) %>
|
|
41
|
-
</span>
|
|
42
39
|
</td>
|
|
43
40
|
</tr>
|
|
44
41
|
</tbody>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<p><%= t("spotlight.#{@key}.invitation_instructions.hello", email: @role.user.email) %></p>
|
|
2
|
+
|
|
3
|
+
<p><%= t("spotlight.#{@key}.invitation_instructions.someone_invited_you", role: @role, exhibit_name: @role.resource.title) %></p>
|
|
4
|
+
|
|
5
|
+
<% if @role.user.invite_pending? %>
|
|
6
|
+
<p><%= t("spotlight.#{@key}.invitation_instructions.accept_invitation") %></p>
|
|
7
|
+
<p><%= link_to t("spotlight.#{@key}.invitation_instructions.accept"), accept_invitation_url(@role.user, invitation_token: @role.user.invitation_token) %></p>
|
|
8
|
+
<% elsif @role.resource.is_a? Spotlight::Exhibit %>
|
|
9
|
+
<p><%= link_to t("spotlight.#{@key}.invitation_instructions.visit"), url: spotlight.exhibit_home_page_url(@role.resource) %></p>
|
|
10
|
+
<% end %>
|
|
11
|
+
|
|
12
|
+
<p><%= t("spotlight.#{@key}.invitation_instructions.ignore") %></p>
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
<tr data-edit-for="<%= f.object.new_record? ? 'new' : f.object.id %>">
|
|
2
2
|
<td>
|
|
3
|
-
<%= f.email_field :user_key, hide_label: true, disabled: f.object.persisted
|
|
4
|
-
<span style='display:none' class='help-block' data-behavior='no-user-note'>
|
|
5
|
-
<%= t('.invite_html', link: link_to(t('.invite_link'), spotlight.invite_exhibit_roles_path(current_exhibit), data: { method: 'post', 'invite-url' => spotlight.invite_exhibit_roles_path(current_exhibit) })) %>
|
|
6
|
-
<span class='label label-warning pending-label'><%= t('.pending') %></span>
|
|
7
|
-
</span>
|
|
3
|
+
<%= f.email_field :user_key, hide_label: true, disabled: f.object.persisted? %>
|
|
8
4
|
</td>
|
|
9
5
|
<td><%= f.select :role, roles_for_select, hide_label: true %></td>
|
|
10
6
|
<td></td>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<%= render 'spotlight/shared/exhibit_sidebar' %>
|
|
2
|
-
<div id="content" class="col-md-9"
|
|
2
|
+
<div id="content" class="col-md-9">
|
|
3
3
|
<%= configuration_page_title %>
|
|
4
4
|
<%= bootstrap_form_for current_exhibit, url: spotlight.update_all_exhibit_roles_path(current_exhibit) do |f| %>
|
|
5
5
|
<table class="table table-striped users">
|
|
@@ -301,16 +301,21 @@ en:
|
|
|
301
301
|
error: 'An error occured while reindexing. Contact your exhibits administrator for more information.'
|
|
302
302
|
invitation_mailer:
|
|
303
303
|
invitation_instructions:
|
|
304
|
+
subject: 'Invitation to manage \"%{exhibit_name}\"'
|
|
304
305
|
hello: "Hello!"
|
|
305
|
-
someone_invited_you: "The Exhibits Administrator has invited you to help work on the \"%{exhibit_name}\" exhibit.
|
|
306
|
-
|
|
307
|
-
|
|
306
|
+
someone_invited_you: "The Exhibits Administrator has invited you to help work on the \"%{exhibit_name}\" exhibit."
|
|
307
|
+
accept_invitation: "You can accept this invitation by clicking the link below."
|
|
308
|
+
accept_link: "Accept invitation"
|
|
309
|
+
ignore: "If you don't want to accept the invitation, please ignore this email. Your account won't be created until you access the link above."
|
|
310
|
+
visit: 'Visit exhibit'
|
|
308
311
|
exhibits_admin_invitation_mailer:
|
|
309
312
|
invitation_instructions:
|
|
313
|
+
subject: 'Invitation to manage \"%{exhibit_name}\"'
|
|
310
314
|
hello: "Hello!"
|
|
311
|
-
someone_invited_you: "The Exhibits Administrator has invited you to help manage exhibits.
|
|
315
|
+
someone_invited_you: "The Exhibits Administrator has invited you to help manage exhibits."
|
|
316
|
+
accept_invitation: " You can accept this invitation by clicking the link below."
|
|
312
317
|
accept: "Accept invitation"
|
|
313
|
-
|
|
318
|
+
ignore: "If you don't want to accept the invitation, please ignore this email. Your exhibits administrator account won't be created until you access the link above."
|
|
314
319
|
confirmation_mailer:
|
|
315
320
|
confirmation_instructions:
|
|
316
321
|
welcome: "Welcome %{email}!"
|
data/config/routes.rb
CHANGED
|
@@ -1,18 +1,6 @@
|
|
|
1
1
|
Spotlight::Engine.routes.draw do
|
|
2
2
|
devise_for :contact_email, class_name: 'Spotlight::ContactEmail', only: [:confirmations]
|
|
3
3
|
|
|
4
|
-
concern :user_existable do
|
|
5
|
-
collection do
|
|
6
|
-
get :exists
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
concern :user_invitable do
|
|
11
|
-
collection do
|
|
12
|
-
post :invite
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
4
|
resource :site, only: [:edit, :update] do
|
|
17
5
|
collection do
|
|
18
6
|
get '/tags', to: 'sites#tags'
|
|
@@ -21,7 +9,7 @@ Spotlight::Engine.routes.draw do
|
|
|
21
9
|
|
|
22
10
|
get '/exhibits/edit', to: 'sites#edit_exhibits', as: 'edit_site_exhibits'
|
|
23
11
|
|
|
24
|
-
resources :admin_users, only: [:index, :create, :destroy]
|
|
12
|
+
resources :admin_users, only: [:index, :create, :destroy]
|
|
25
13
|
|
|
26
14
|
resources :exhibits, path: '/', except: [:show] do
|
|
27
15
|
member do
|
|
@@ -115,7 +103,7 @@ Spotlight::Engine.routes.draw do
|
|
|
115
103
|
|
|
116
104
|
resources :lock, only: [:destroy]
|
|
117
105
|
|
|
118
|
-
resources :roles, path: 'users', only: [:index, :create, :destroy]
|
|
106
|
+
resources :roles, path: 'users', only: [:index, :create, :destroy] do
|
|
119
107
|
collection do
|
|
120
108
|
patch :update_all
|
|
121
109
|
end
|
data/lib/spotlight/version.rb
CHANGED
|
@@ -22,59 +22,13 @@ describe Spotlight::AdminUsersController, type: :controller do
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
describe 'DELETE destroy' do
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
end
|
|
25
|
+
let(:user) { FactoryGirl.create(:user) }
|
|
26
|
+
let!(:admin_role) { FactoryGirl.create(:role, role: 'admin', user: user, resource: Spotlight::Site.instance) }
|
|
28
27
|
it 'removes the site admin role from the given user' do
|
|
29
|
-
|
|
30
|
-
expect(last_user.email).to eq 'user@example.com'
|
|
31
|
-
|
|
32
|
-
delete :destroy, params: { id: last_user.id }
|
|
28
|
+
delete :destroy, params: { id: user.id }
|
|
33
29
|
expect(response).to redirect_to(admin_users_path)
|
|
34
30
|
expect(flash[:notice]).to eq 'User removed from site adminstrator role'
|
|
35
|
-
expect(Spotlight::Site.instance.roles.
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
describe 'GET exists' do
|
|
40
|
-
it 'requires a user parameter' do
|
|
41
|
-
expect do
|
|
42
|
-
get :exists
|
|
43
|
-
end.to raise_error(ActionController::ParameterMissing)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it 'returns a successful status when the requested user exists' do
|
|
47
|
-
user = FactoryGirl.create(:exhibit_curator)
|
|
48
|
-
get :exists, params: { user: user.email }
|
|
49
|
-
expect(response).to be_success
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it 'returns an unsuccessful status when the user does not exist' do
|
|
53
|
-
get :exists, params: { user: 'user@example.com' }
|
|
54
|
-
expect(response).not_to be_success
|
|
55
|
-
expect(response.status).to eq 404
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
describe 'GET invite' do
|
|
60
|
-
it 'invites the selected user to be an admin' do
|
|
61
|
-
expect do
|
|
62
|
-
post :invite, params: { user: 'user@example.com', role: 'admin' }
|
|
63
|
-
end.to change { Spotlight::Engine.user_class.count }.by(1)
|
|
64
|
-
expect(Spotlight::Engine.user_class.last.roles.length).to eq 1
|
|
65
|
-
expect(Spotlight::Engine.user_class.last.roles.first.resource).to eq Spotlight::Site.instance
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it 'redirects back with a flash notice upon success' do
|
|
69
|
-
post :invite, params: { user: 'user@example.com', role: 'admin' }
|
|
70
|
-
expect(flash[:notice]).to eq 'User has been invited.'
|
|
71
|
-
expect(response).to redirect_to('http://example.com')
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
it 'redirects back with flash error upon failure' do
|
|
75
|
-
post :invite, params: { user: 'user@example.com', role: 'not-a-real-role' }
|
|
76
|
-
expect(flash[:alert]).to eq 'There was a problem saving the user.'
|
|
77
|
-
expect(response).to redirect_to('http://example.com')
|
|
31
|
+
expect(Spotlight::Site.instance.roles.where(user_id: user.id)).to be_none
|
|
78
32
|
end
|
|
79
33
|
end
|
|
80
34
|
end
|
|
@@ -115,55 +115,5 @@ describe Spotlight::RolesController, type: :controller do
|
|
|
115
115
|
expect(flash[:alert]).to eq 'There was a problem saving the user.'
|
|
116
116
|
end
|
|
117
117
|
end
|
|
118
|
-
|
|
119
|
-
describe 'GET exists' do
|
|
120
|
-
it 'requires a user parameter' do
|
|
121
|
-
expect do
|
|
122
|
-
get :exists, params: { exhibit_id: exhibit }
|
|
123
|
-
end.to raise_error(ActionController::ParameterMissing)
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
it 'returns a successful status when the requested user exists' do
|
|
127
|
-
user = FactoryGirl.create(:exhibit_curator)
|
|
128
|
-
get :exists, params: { exhibit_id: exhibit, user: user.email }
|
|
129
|
-
expect(response).to be_success
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
it 'returns an unsuccessful status when the user does not exist' do
|
|
133
|
-
get :exists, params: { exhibit_id: exhibit, user: 'user@example.com' }
|
|
134
|
-
expect(response).not_to be_success
|
|
135
|
-
expect(response.status).to eq 404
|
|
136
|
-
end
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
describe 'GET invite' do
|
|
140
|
-
before { request.env['HTTP_REFERER'] = 'http://example.com' }
|
|
141
|
-
|
|
142
|
-
it 'invites the selected user' do
|
|
143
|
-
expect do
|
|
144
|
-
post :invite, params: { exhibit_id: exhibit, user: 'user@example.com', role: 'curator' }
|
|
145
|
-
end.to change { Spotlight::Engine.user_class.count }.by(1)
|
|
146
|
-
expect(Spotlight::Engine.user_class.last.roles.length).to eq 1
|
|
147
|
-
expect(Spotlight::Engine.user_class.last.roles.first.resource).to eq exhibit
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
it 'adds the user to the exhibit via a role' do
|
|
151
|
-
expect do
|
|
152
|
-
post :invite, params: { exhibit_id: exhibit, user: 'user@example.com', role: 'curator' }
|
|
153
|
-
end.to change { Spotlight::Role.count }.by(1)
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
it 'redirects back with a flash notice upon success' do
|
|
157
|
-
post :invite, params: { exhibit_id: exhibit, user: 'user@example.com', role: 'curator' }
|
|
158
|
-
expect(flash[:notice]).to eq 'User has been invited.'
|
|
159
|
-
expect(response).to redirect_to('http://example.com')
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
it 'redirects back with flash error upon failure' do
|
|
163
|
-
post :invite, params: { exhibit_id: exhibit, user: 'user@example.com', role: 'not-a-real-role' }
|
|
164
|
-
expect(flash[:alert]).to eq 'There was a problem saving the user.'
|
|
165
|
-
expect(response).to redirect_to('http://example.com')
|
|
166
|
-
end
|
|
167
|
-
end
|
|
168
118
|
end
|
|
169
119
|
end
|
|
@@ -8,18 +8,6 @@ describe 'Roles Admin', type: :feature, js: true do
|
|
|
8
8
|
click_link 'Users'
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
it 'informs the admin that a user they are trying to add does not yet exist' do
|
|
12
|
-
expect(page).to have_css('.help-block[data-behavior="no-user-note"]', visible: false)
|
|
13
|
-
expect(page).not_to have_css('input[disabled]')
|
|
14
|
-
|
|
15
|
-
click_link 'Add a new user'
|
|
16
|
-
fill_in 'User key', with: 'user@example.com'
|
|
17
|
-
|
|
18
|
-
expect(page).to have_css('.help-block[data-behavior="no-user-note"]', visible: true)
|
|
19
|
-
expect(page).to have_link('invite', visible: true)
|
|
20
|
-
expect(page).to have_css('input[disabled]')
|
|
21
|
-
end
|
|
22
|
-
|
|
23
11
|
it 'has the appropriate status message when an existing user is added' do
|
|
24
12
|
second_user = FactoryGirl.create(:site_admin)
|
|
25
13
|
|
|
@@ -37,7 +25,7 @@ describe 'Roles Admin', type: :feature, js: true do
|
|
|
37
25
|
|
|
38
26
|
click_link 'Add a new user'
|
|
39
27
|
fill_in 'User key', with: 'user@example.com'
|
|
40
|
-
|
|
28
|
+
click_button 'Save changes'
|
|
41
29
|
|
|
42
30
|
within('tr.invite-pending') do
|
|
43
31
|
expect(page).to have_css('td', text: 'user@example.com')
|
|
@@ -39,11 +39,9 @@ describe 'Site admin management', js: true do
|
|
|
39
39
|
|
|
40
40
|
fill_in 'user_email', with: 'not-an-existing-user@example.com'
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
expect { click_link('invite') }.to change { ActionMailer::Base.deliveries.count }.by(1)
|
|
42
|
+
click_button 'Add role'
|
|
45
43
|
|
|
46
|
-
expect(page).to have_content('
|
|
44
|
+
expect(page).to have_content('not-an-existing-user@example.com pending')
|
|
47
45
|
end
|
|
48
46
|
|
|
49
47
|
it 'allows the admin to remove the admin role from the user' do
|
|
@@ -51,8 +49,7 @@ describe 'Site admin management', js: true do
|
|
|
51
49
|
|
|
52
50
|
fill_in 'user_email', with: 'not-an-admin@example.com'
|
|
53
51
|
|
|
54
|
-
|
|
55
|
-
expect(page).to have_content('User has been invited.')
|
|
52
|
+
click_button 'Add role'
|
|
56
53
|
|
|
57
54
|
expect(page).to have_css(:td, text: 'not-an-admin@example.com')
|
|
58
55
|
|
|
@@ -9,15 +9,17 @@ describe Spotlight::Role, type: :model do
|
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
11
|
describe 'with user_key' do
|
|
12
|
-
let(:user) { FactoryGirl.create(:user) }
|
|
13
12
|
describe "that doesn't point at a user" do
|
|
14
|
-
let(:
|
|
13
|
+
let(:user) { FactoryGirl.build(:user) }
|
|
14
|
+
let(:args) { { role: 'curator', user_key: user.email } }
|
|
15
15
|
it 'does not be valid' do
|
|
16
|
-
expect(subject).
|
|
17
|
-
|
|
16
|
+
expect(subject).to be_valid
|
|
17
|
+
subject.save!
|
|
18
|
+
expect(subject.user).to be_invite_pending
|
|
18
19
|
end
|
|
19
20
|
end
|
|
20
21
|
describe 'that points at a user' do
|
|
22
|
+
let(:user) { FactoryGirl.create(:user) }
|
|
21
23
|
let(:args) { { role: 'curator', user_key: user.email } }
|
|
22
24
|
it 'is valid' do
|
|
23
25
|
expect(subject).to be_valid
|
|
@@ -25,6 +27,7 @@ describe Spotlight::Role, type: :model do
|
|
|
25
27
|
end
|
|
26
28
|
end
|
|
27
29
|
describe 'that points at a user with an existing role' do
|
|
30
|
+
let(:user) { FactoryGirl.create(:user) }
|
|
28
31
|
before { described_class.create!(role: 'curator', user: user) }
|
|
29
32
|
let(:args) { { role: 'curator', user_key: user.email } }
|
|
30
33
|
it 'is valid' do
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: blacklight-spotlight
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.28.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chris Beer
|
|
@@ -11,7 +11,7 @@ authors:
|
|
|
11
11
|
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date: 2016-08-
|
|
14
|
+
date: 2016-08-18 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
17
|
name: rails
|
|
@@ -725,7 +725,6 @@ files:
|
|
|
725
725
|
- app/assets/javascripts/spotlight/blocks/solr_documents_grid_block.js
|
|
726
726
|
- app/assets/javascripts/spotlight/blocks/uploaded_items_block.js
|
|
727
727
|
- app/assets/javascripts/spotlight/catalog_edit.js
|
|
728
|
-
- app/assets/javascripts/spotlight/check_user_existence.js
|
|
729
728
|
- app/assets/javascripts/spotlight/compat.js
|
|
730
729
|
- app/assets/javascripts/spotlight/copy_email_addresses.js
|
|
731
730
|
- app/assets/javascripts/spotlight/croppable.js
|
|
@@ -795,8 +794,6 @@ files:
|
|
|
795
794
|
- app/controllers/spotlight/catalog_controller.rb
|
|
796
795
|
- app/controllers/spotlight/concerns/application_controller.rb
|
|
797
796
|
- app/controllers/spotlight/concerns/catalog_search_context.rb
|
|
798
|
-
- app/controllers/spotlight/concerns/user_existable.rb
|
|
799
|
-
- app/controllers/spotlight/concerns/user_invitable.rb
|
|
800
797
|
- app/controllers/spotlight/confirmations_controller.rb
|
|
801
798
|
- app/controllers/spotlight/contact_forms_controller.rb
|
|
802
799
|
- app/controllers/spotlight/contacts_controller.rb
|
|
@@ -839,6 +836,7 @@ files:
|
|
|
839
836
|
- app/mailers/spotlight/confirmation_mailer.rb
|
|
840
837
|
- app/mailers/spotlight/contact_mailer.rb
|
|
841
838
|
- app/mailers/spotlight/indexing_complete_mailer.rb
|
|
839
|
+
- app/mailers/spotlight/invitation_mailer.rb
|
|
842
840
|
- app/models/ability.rb
|
|
843
841
|
- app/models/concerns/spotlight/access_controls_enforcement_search_builder.rb
|
|
844
842
|
- app/models/concerns/spotlight/ar_light.rb
|
|
@@ -1008,6 +1006,7 @@ files:
|
|
|
1008
1006
|
- app/views/spotlight/home_pages/_sidebar.html.erb
|
|
1009
1007
|
- app/views/spotlight/home_pages/_tophat.html.erb
|
|
1010
1008
|
- app/views/spotlight/indexing_complete_mailer/documents_indexed.html.erb
|
|
1009
|
+
- app/views/spotlight/invitation_mailer/exhibit_invitation_notification.html.erb
|
|
1011
1010
|
- app/views/spotlight/locks/_lock.html.erb
|
|
1012
1011
|
- app/views/spotlight/metadata_configurations/_metadata_field.html.erb
|
|
1013
1012
|
- app/views/spotlight/metadata_configurations/edit.html.erb
|
|
@@ -1122,6 +1121,7 @@ files:
|
|
|
1122
1121
|
- db/migrate/20160329215014_add_readonly_to_custom_fields.rb
|
|
1123
1122
|
- db/migrate/20160711121314_add_default_view_to_spotlight_searches.rb
|
|
1124
1123
|
- db/migrate/20160815165432_add_resource_to_solr_document_sidecar.rb
|
|
1124
|
+
- db/migrate/20160816165432_add_index_status_to_solr_document_sidecar.rb
|
|
1125
1125
|
- lib/blacklight/spotlight.rb
|
|
1126
1126
|
- lib/generators/spotlight/install_generator.rb
|
|
1127
1127
|
- lib/generators/spotlight/scaffold_resource_generator.rb
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
(function($) {
|
|
2
|
-
$.fn.spotlightCheckUserExistence = function() {
|
|
3
|
-
var formElements = this;
|
|
4
|
-
var target;
|
|
5
|
-
|
|
6
|
-
$(formElements).each(function() {
|
|
7
|
-
$(this).on('blur', checkIfUserExists);
|
|
8
|
-
$(this).on('change', cleanUpBlankUserField);
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
function checkIfUserExists() {
|
|
12
|
-
target = $(this);
|
|
13
|
-
if (target.val() !== '' && form()[0].checkValidity()) {
|
|
14
|
-
$.ajax(userExistsUrl())
|
|
15
|
-
.success(userExists)
|
|
16
|
-
.fail(userDoesNotExist);
|
|
17
|
-
} else {
|
|
18
|
-
userExists();
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
function cleanUpBlankUserField() {
|
|
23
|
-
if ($(this).val() === '') {
|
|
24
|
-
userExists();
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function userExists() {
|
|
29
|
-
noUserNote().hide();
|
|
30
|
-
submitButton().prop('disabled', false);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function userDoesNotExist() {
|
|
34
|
-
updateNoUserNoteLink();
|
|
35
|
-
noUserNote().show();
|
|
36
|
-
roleSelect().on('change', updateNoUserNoteLink);
|
|
37
|
-
submitButton().prop('disabled', true);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function updateNoUserNoteLink() {
|
|
41
|
-
var link = noUserNote().find('a');
|
|
42
|
-
var originalHref = link.data('inviteUrl');
|
|
43
|
-
var userName = target.val();
|
|
44
|
-
link.attr(
|
|
45
|
-
'href',
|
|
46
|
-
originalHref + '?user=' + encodeURIComponent(userName) + '&role=' + encodeURIComponent(roleValue())
|
|
47
|
-
);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function roleValue() {
|
|
51
|
-
if (roleSelect().length > 0) {
|
|
52
|
-
return roleSelect().val();
|
|
53
|
-
} else {
|
|
54
|
-
return target.closest('tr').find('[data-user-role]').data('userRole');
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function roleSelect() {
|
|
59
|
-
return target.closest('tr').find('select');
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function noUserNote() {
|
|
63
|
-
return form().find('[data-behavior="no-user-note"]');
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function submitButton() {
|
|
67
|
-
return form().find('input[type="submit"]');
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
function form() {
|
|
71
|
-
return target.closest('form');
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function userExistsUrl() {
|
|
75
|
-
return $('[data-user-exists-url]').data('userExistsUrl') + '?user=' + target.val();
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return this;
|
|
79
|
-
};
|
|
80
|
-
})(jQuery);
|
|
81
|
-
|
|
82
|
-
Spotlight.onLoad(function() {
|
|
83
|
-
$('[data-behavior="check-user-existence"]').spotlightCheckUserExistence();
|
|
84
|
-
});
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
module Spotlight
|
|
2
|
-
module Concerns
|
|
3
|
-
###
|
|
4
|
-
# Mixin to be included into controllers that provides a
|
|
5
|
-
# method to check if a particular user exists in the site
|
|
6
|
-
module UserExistable
|
|
7
|
-
def exists
|
|
8
|
-
# note: the messages returned are not shown to users and really only useful for debug, hence no translation necessary
|
|
9
|
-
# app uses html status code to act on response
|
|
10
|
-
if Spotlight::Engine.user_class.where(email: exists_params).present?
|
|
11
|
-
render json: { message: 'User exists' }
|
|
12
|
-
else
|
|
13
|
-
render json: { message: 'User does not exist' }, status: :not_found
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
protected
|
|
18
|
-
|
|
19
|
-
def exists_params
|
|
20
|
-
params.require(:user)
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
module Spotlight
|
|
2
|
-
module Concerns
|
|
3
|
-
###
|
|
4
|
-
# Mixin to be included into controllers that provides an action which
|
|
5
|
-
# allows admins and curators to invite users and assign them a role.
|
|
6
|
-
module UserInvitable
|
|
7
|
-
def invite
|
|
8
|
-
# skip_invitation stops the immediate delivery of the invitation
|
|
9
|
-
user = Spotlight::Engine.user_class.invite!(email: invite_params[:user], skip_invitation: true)
|
|
10
|
-
role = Spotlight::Role.create(resource: exhibit_or_site, user: user, role: invite_params[:role])
|
|
11
|
-
if role.save
|
|
12
|
-
user.deliver_invitation # now deliver it when we have saved the role
|
|
13
|
-
redirect_back fallback_location: fallback_location, notice: t(:'helpers.submit.invite.invited')
|
|
14
|
-
else
|
|
15
|
-
redirect_back fallback_location: fallback_location, alert: t(:'helpers.submit.role.batch_error', count: 1)
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
protected
|
|
20
|
-
|
|
21
|
-
def invite_params
|
|
22
|
-
params.permit(:user, :role)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def exhibit_or_site
|
|
26
|
-
current_exhibit || @site
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def fallback_location
|
|
30
|
-
if current_exhibit
|
|
31
|
-
spotlight.exhibit_roles_path(current_exhibit)
|
|
32
|
-
else
|
|
33
|
-
spotlight.admin_users_path
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|