diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 598ded8..529e0b0 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -18,10 +18,20 @@ # Permissions which the user already has are pre-selected # Selecting new permissions and saving calls the admin_update_permissions action def admin_grant_permissions - @user = User.includes(:perms).find(params[:id]) + @user = User.includes(:perms, :roles).find(params[:id]) authorize @user user_perms = current_user.perms - @perms = user_perms & [Perm.grant_permissions, Perm.modify_templates, Perm.modify_guidance, Perm.use_api, Perm.change_org_details] + @perms = user_perms & [Perm.grant_permissions, Perm.modify_templates, Perm.modify_guidance, + Perm.use_api, Perm.change_org_details, Perm.add_orgs, + Perm.change_affiliation, Perm.grant_api] + render json: { + "user" => { + "id" => @user.id, + "html" => render_to_string(partial: 'users/admin_grant_permissions', + locals: { user: @user, perms: @perms }, + formats: [:html]) + } + }.to_json end ## diff --git a/app/views/paginable/users/_index.html.erb b/app/views/paginable/users/_index.html.erb index 92f0334..3ef5b2e 100644 --- a/app/views/paginable/users/_index.html.erb +++ b/app/views/paginable/users/_index.html.erb @@ -1,43 +1,60 @@ - - - - - - - - - - - - <% scope.each do |user| %> - <% if !user.nil? then%> - - - - - - - - <% end %> - <% end %> - -
<%= _('Name') %> <%= paginable_sort_link('firstname') %><%= _('Email address') %> <%= paginable_sort_link('email') %><%= _('Last logged in') %> <%= paginable_sort_link('last_sign_in_at') %><%= _('How many plans?') %><%= _('Privileges') %>
- <% if !user.name.nil? %> - <%= user.name(false) %> - <% end %> - - <%= user.email %> - - <% if !user.last_sign_in_at.nil? %> - <%= l user.last_sign_in_at.to_date, :formats => :short %> - <% end %> - - <% if !user.roles.nil? %> - <%= user.roles.length %> - <% end %> - - <% unless current_user == user %> - <% b_label = _('Edit')%> - <%= link_to b_label, admin_grant_permissions_user_path(user)%> - <% end %> -
\ No newline at end of file +
+
+
+ + + + + + + + + + + + + <% scope.each do |user| %> + <% if !user.nil? then%> + + + + + + + + + <% end %> + <% end %> + +
<%= _('Name') %> <%= paginable_sort_link('firstname') %><%= _('Email') %> <%= paginable_sort_link('email') %><%= _('Last activity') %> <%= paginable_sort_link('last_sign_in_at') %><%= _('Plans') %><%= _('Current Privileges') %><%= _('Edit Privileges') %>
+ <% if !user.name.nil? %> + <%= user.name(false) %> + <% end %> + + <%= user.email %> + + <% if !user.last_sign_in_at.nil? %> + <%= l user.last_sign_in_at.to_date, :formats => :short %> + <% end %> + + <% unless user.roles.nil? %> + <%= user.roles.where(Role.not_reviewer_condition).length %> + <% end %> + + <% if user.can_super_admin? %> + <%= _("Super admin privileges") %> + <% elsif user.can_org_admin? %> + <%= _("Org admin privileges") %> + <% else %> + <%= _("") %> + <% end %> + + <% unless current_user == user %> + <% b_label = _('Edit') %> + <%= link_to b_label, admin_grant_permissions_user_path(user), 'data-toggle' => 'modal', 'data-target' => '#modal-permissions', class: 'modal-window' %> + + <% end %> +
+
+
+
diff --git a/app/views/users/_admin_grant_permissions.html.erb b/app/views/users/_admin_grant_permissions.html.erb new file mode 100644 index 0000000..b91a008 --- /dev/null +++ b/app/views/users/_admin_grant_permissions.html.erb @@ -0,0 +1,72 @@ +<% namesHash = name_and_text %> + \ No newline at end of file diff --git a/app/views/users/admin_grant_permissions.html.erb b/app/views/users/admin_grant_permissions.html.erb deleted file mode 100644 index bb4275d..0000000 --- a/app/views/users/admin_grant_permissions.html.erb +++ /dev/null @@ -1,57 +0,0 @@ -<% namesHash = name_and_text %> -
-
-

<%= _('Edit User Privileges') %>

-
-
- -
-
- <%= form_tag( admin_update_permissions_user_path(@user), method: :put) do %> -
- - - - - - <% @perms.each do |perm| %> - <% case perm.name when 'grant_permissions' %> - - <% when 'modify_templates' %> - - <% when 'modify_guidance' %> - - <% when 'use_api' %> - - <% when 'change_org_details' %> - - <% end %> - <% end %> - - - - - - <% @perms.each do |perm| %> - - <% end %> - - -
<%= _('Name') %> - <%= namesHash[perm.name.to_sym] %> - - <%= namesHash[perm.name.to_sym] %> - - <%= namesHash[perm.name.to_sym] %> - - <%= namesHash[perm.name.to_sym] %> - - <%= namesHash[perm.name.to_sym] %> -
<%= @user.name(false) %><%= check_box_tag "perm_ids[]", perm.id, @user.perms.include?(perm) %>
-
-
- <%= submit_tag _('Save'), class: "btn btn-primary" %> -
- <% end %> -
-
diff --git a/app/views/users/admin_index.html.erb b/app/views/users/admin_index.html.erb index 0e15e76..c077622 100644 --- a/app/views/users/admin_index.html.erb +++ b/app/views/users/admin_index.html.erb @@ -1,11 +1,12 @@
-

<%= _('List of users') %>

+

<%= _('User accounts') %>

<%= _('Below is a list of users registered for your organisation. You can sort the data by each field.')%>

+
diff --git a/lib/assets/javascripts/application.js b/lib/assets/javascripts/application.js index 5de3404..1baedc8 100644 --- a/lib/assets/javascripts/application.js +++ b/lib/assets/javascripts/application.js @@ -46,3 +46,4 @@ import './views/shared/sign_in_form'; import './views/super_admin/themes/new_edit'; import './views/users/notification_preferences'; +import './views/users/admin_grant_permissions'; diff --git a/lib/assets/javascripts/views/users/admin_grant_permissions.js b/lib/assets/javascripts/views/users/admin_grant_permissions.js new file mode 100644 index 0000000..81eced7 --- /dev/null +++ b/lib/assets/javascripts/views/users/admin_grant_permissions.js @@ -0,0 +1,65 @@ +import { paginableSelector } from '../../utils/paginable'; + +$(() => { + const success = (data) => { + // Render the html in the modal-permissions modal + $('#modal-permissions').html(data.user.html); + if ($('.org_grant_privileges:checked').length === $('.org_grant_privileges').length) { + $('#modal-permissions #org_admin_privileges').prop('checked', true); + } + if ($('.super_grant_privileges:checked').length === $('.super_grant_privileges').length) { + $('#modal-permissions #super_admin_privileges').prop('checked', true); + } + }; + + const error = () => { + // There was an ajax error so just route the user to the sign-in modal + // and let them sign in as a Non-Partner Institution + $('a[data-target="#modal-permissions"]').tab('show'); + }; + + $(paginableSelector).on('click', '.modal-window', (e) => { + const target = $(e.target); + $('#modal-permissions').html(''); + $.ajax({ + method: 'GET', + url: target.attr('href'), + }).done((data) => { + success(data); + }, error); + }); +}); + +$(() => { + $(paginableSelector).on('click', '#org_admin_privileges', () => { + if ($('#org_admin_privileges').prop('checked')) { + $('.org_grant_privileges:checkbox').prop('checked', true); + } else { + $('.org_grant_privileges:checkbox').prop('checked', false); + } + }); + $(paginableSelector).on('change', '.org_grant_privileges', () => { + if ($('.org_grant_privileges:checked').length === $('.org_grant_privileges').length) { + $('#org_admin_privileges').prop('checked', true); + } else { + $('#org_admin_privileges').prop('checked', false); + } + }); +}); + +$(() => { + $(paginableSelector).on('click', '#super_admin_privileges', () => { + if ($('#super_admin_privileges').prop('checked')) { + $('.super_grant_privileges:checkbox').prop('checked', true); + } else { + $('.super_grant_privileges:checkbox').prop('checked', false); + } + }); + $(paginableSelector).on('change', '.super_grant_privileges', () => { + if ($('.super_grant_privileges:checked').length === $('.super_grant_privileges').length) { + $('#super_admin_privileges').prop('checked', true); + } else { + $('#super_admin_privileges').prop('checked', false); + } + }); +}); diff --git a/lib/assets/javascripts/views/users/notification_preferences.js b/lib/assets/javascripts/views/users/notification_preferences.js index e5b3805..ef186b1 100644 --- a/lib/assets/javascripts/views/users/notification_preferences.js +++ b/lib/assets/javascripts/views/users/notification_preferences.js @@ -17,3 +17,4 @@ }); }); }); + diff --git a/lib/assets/stylesheets/overrides.scss b/lib/assets/stylesheets/overrides.scss index 2549e2b..bd290b4 100644 --- a/lib/assets/stylesheets/overrides.scss +++ b/lib/assets/stylesheets/overrides.scss @@ -142,6 +142,14 @@ margin-right: 25px; } +#modal-permissions ul { + list-style-type: none; +} + +#modal-permissions .list-group li:nth-child(1){ + border-top: 0 none; +} + /* FONTAWESOME STYLING */ .fa { font-size: 2rem;