From 9a3b056d32efe033deffa5ac54d902b9e59226bf Mon Sep 17 00:00:00 2001 From: aignatov-bio <47317017+aignatov-bio@users.noreply.github.com> Date: Tue, 14 Mar 2023 14:49:11 +0100 Subject: [PATCH] Fix access modal for protocol [SCI-8063] (#5128) --- app/assets/javascripts/protocols/index.js | 21 +---------- .../protocols_controller.rb | 37 +++++++++---------- app/models/protocol.rb | 7 +++- .../_default_public_user_role_form.html.erb | 2 +- 4 files changed, 26 insertions(+), 41 deletions(-) diff --git a/app/assets/javascripts/protocols/index.js b/app/assets/javascripts/protocols/index.js index 7f7dc6a44..61a158f2f 100644 --- a/app/assets/javascripts/protocols/index.js +++ b/app/assets/javascripts/protocols/index.js @@ -144,28 +144,9 @@ var ProtocolsIndex = (function() { function initManageAccess() { let protocolsContainer = '.protocols-container'; - let manageAccessModal = '.protocol-assignments-modal'; - - function loadManageAccessModal(href) { - $.get(href, function(data) { - $(protocolsContainer).append($.parseHTML(data.html)); - $(manageAccessModal).modal('show'); - - // Remove modal when it gets closed - $(manageAccessModal).on('hidden.bs.modal', function() { - $(manageAccessModal).remove(); - }); - }); - } - - protocolsTableEl.on('click', '.protocol-users-link', function(e) { - loadManageAccessModal(this.href); - e.stopPropagation(); - e.preventDefault(); - }); $(protocolsContainer).on('click', '#manageProtocolAccess', function() { - loadManageAccessModal($(`tr[data-row-id=${rowsSelected[0]}] .protocol-users-link`).attr('href')); + $(`tr[data-row-id=${rowsSelected[0]}] .protocol-users-link`).click(); }); } diff --git a/app/controllers/access_permissions/protocols_controller.rb b/app/controllers/access_permissions/protocols_controller.rb index 8de246555..bd7399605 100644 --- a/app/controllers/access_permissions/protocols_controller.rb +++ b/app/controllers/access_permissions/protocols_controller.rb @@ -52,7 +52,7 @@ module AccessPermissions next unless user_assignment_params[:assign] == '1' if user_assignment_params[:user_id] == 'all' - @protocol.update!(visibility: :visible, default_public_user_role_id: user_assignment_params[:user_role_id]) + @protocol.update!(default_public_user_role_id: user_assignment_params[:user_role_id]) else user_assignment = UserAssignment.find_or_initialize_by( assignable: @protocol, @@ -87,31 +87,28 @@ module AccessPermissions def destroy user = @protocol.assigned_users.find(params[:user_id]) user_assignment = @protocol.user_assignments.find_by(user: user, team: current_team) - respond_to do |format| - if user_assignment.destroy - log_activity(:protocol_template_access_revoked, user_assignment) - format.json do - render json: { flash: t('access_permissions.destroy.success', member_name: user.full_name) }, - status: :ok - end + Protocol.transaction do + if @protocol.visible? + user_assignment.update!( + user_role: @protocol.default_public_user_role, + assigned: :automatically + ) else - format.json do - render json: { flash: t('access_permissions.destroy.failure') }, - status: :unprocessable_entity - end + user_assignment.destroy! end + log_activity(:protocol_template_access_revoked, user_assignment) end + + render json: { flash: t('access_permissions.destroy.success', member_name: user.full_name) } + rescue ActiveRecord::RecordInvalid => e + Rails.logger.error e.message + render json: { flash: t('access_permissions.destroy.failure') }, status: :unprocessable_entity + raise ActiveRecord::Rollback end def update_default_public_user_role - Protocol.transaction do - @protocol.visibility = :hidden if permitted_default_public_user_role_params[:default_public_user_role_id].blank? - @protocol.assign_attributes(permitted_default_public_user_role_params) - @protocol.save! - - UserAssignments::ProtocolGroupAssignmentJob.perform_later(current_team, @protocol, current_user) - end + @protocol.update!(permitted_default_public_user_role_params) end private @@ -134,6 +131,8 @@ module AccessPermissions @protocol = current_team.protocols.includes(user_assignments: %i(user user_role)).find_by(id: params[:id]) render_404 unless @protocol + + @protocol = @protocol.parent if @protocol.parent_id end def check_manage_permissions diff --git a/app/models/protocol.rb b/app/models/protocol.rb index 6874c9eb4..846f191d7 100644 --- a/app/models/protocol.rb +++ b/app/models/protocol.rb @@ -21,7 +21,8 @@ class Protocol < ApplicationRecord after_save :update_user_assignments, if: -> { saved_change_to_visibility? && in_repository? } after_save :update_linked_children skip_callback :create, :after, :create_users_assignments, if: -> { in_module? } - before_update :sync_protocol_assignments, if: :visibility_changed? + before_update :change_visibility, if: :default_public_user_role_id_changed? + after_update :sync_protocol_assignments, if: :visibility_changed? enum visibility: { hidden: 0, visible: 1 } enum protocol_type: { @@ -803,6 +804,10 @@ class Protocol < ApplicationRecord end end + def change_visibility + self.visibility = default_public_user_role_id.present? ? :visible : :hidden + end + def sync_protocol_assignments if visible? auto_assign_protocol_members diff --git a/app/views/access_permissions/partials/_default_public_user_role_form.html.erb b/app/views/access_permissions/partials/_default_public_user_role_form.html.erb index 1aca2a756..b8c8e5962 100644 --- a/app/views/access_permissions/partials/_default_public_user_role_form.html.erb +++ b/app/views/access_permissions/partials/_default_public_user_role_form.html.erb @@ -31,7 +31,7 @@ <% if assignable.top_level_assignable? %>