diff --git a/.rubocop.yml b/.rubocop.yml index aad5509e..294fc484 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -45,6 +45,9 @@ Metrics/PerceivedComplexity: Style/MultipleComparison: Enabled: false +Style/NumericPredicate: + Enabled: false + Naming/PredicateMethod: Enabled: false diff --git a/app/controllers/personalization_settings_controller.rb b/app/controllers/personalization_settings_controller.rb index 9812aaee..d9d33490 100644 --- a/app/controllers/personalization_settings_controller.rb +++ b/app/controllers/personalization_settings_controller.rb @@ -4,6 +4,7 @@ class PersonalizationSettingsController < ApplicationController ALLOWED_KEYS = [ AccountConfig::FORM_COMPLETED_BUTTON_KEY, AccountConfig::SUBMITTER_INVITATION_EMAIL_KEY, + AccountConfig::SUBMITTER_INVITATION_REMINDER_EMAIL_KEY, AccountConfig::SUBMITTER_DOCUMENTS_COPY_EMAIL_KEY, AccountConfig::SUBMITTER_COMPLETED_EMAIL_KEY, AccountConfig::FORM_COMPLETED_MESSAGE_KEY, diff --git a/app/controllers/templates_preferences_controller.rb b/app/controllers/templates_preferences_controller.rb index cbee0993..391b6714 100644 --- a/app/controllers/templates_preferences_controller.rb +++ b/app/controllers/templates_preferences_controller.rb @@ -3,6 +3,15 @@ class TemplatesPreferencesController < ApplicationController load_and_authorize_resource :template + RESETTABLE_PREFERENCE_KEYS = { + AccountConfig::SUBMITTER_INVITATION_EMAIL_KEY => %w[request_email_subject request_email_body submitters], + AccountConfig::SUBMITTER_INVITATION_REMINDER_EMAIL_KEY => %w[invitation_reminder_email_subject + invitation_reminder_email_body], + AccountConfig::SUBMITTER_DOCUMENTS_COPY_EMAIL_KEY => %w[documents_copy_email_subject documents_copy_email_body], + AccountConfig::SUBMITTER_COMPLETED_EMAIL_KEY => %w[completed_notification_email_subject + completed_notification_email_body] + }.freeze + def show; end def create @@ -15,19 +24,38 @@ class TemplatesPreferencesController < ApplicationController head :ok end + def destroy + authorize!(:update, @template) + + config_key = params[:config_key] + preferences_to_delete = RESETTABLE_PREFERENCE_KEYS[config_key] + + return head :ok if preferences_to_delete.blank? + + preferences_to_delete.each do |key| + @template.preferences.delete(key) + end + + @template.save! + + render turbo_stream: turbo_stream.replace("#{config_key}_form", + partial: "templates_preferences/#{config_key}_form"), + status: :ok + end + private def template_params params.require(:template).permit( preferences: %i[bcc_completed request_email_subject request_email_body + invitation_reminder_email_subject invitation_reminder_email_body documents_copy_email_subject documents_copy_email_body documents_copy_email_enabled documents_copy_email_attach_audit documents_copy_email_attach_documents documents_copy_email_reply_to completed_notification_email_attach_documents completed_redirect_url validate_unique_submitters require_all_submitters submitters_order require_phone_2fa - default_expire_at_duration shared_link_2fa - default_expire_at request_email_enabled + default_expire_at_duration shared_link_2fa default_expire_at request_email_enabled completed_notification_email_subject completed_notification_email_body completed_notification_email_enabled completed_notification_email_attach_audit] + [completed_message: %i[title body], diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 39cbc223..39555b59 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -24,10 +24,19 @@ class UsersController < ApplicationController def edit; end def create - if User.accessible_by(current_ability).exists?(email: @user.email) - @user.errors.add(:email, I18n.t('already_exists')) + existing_user = User.accessible_by(current_ability).find_by(email: @user.email) + + if existing_user + if existing_user.archived_at? && + current_ability.can?(:manage, existing_user) && current_ability.can?(:manage, @user.account) + existing_user.assign_attributes(@user.slice(:first_name, :last_name, :role, :account_id)) + existing_user.archived_at = nil + @user = existing_user + else + @user.errors.add(:email, I18n.t('already_exists')) - return render turbo_stream: turbo_stream.replace(:modal, template: 'users/new'), status: :unprocessable_content + return render turbo_stream: turbo_stream.replace(:modal, template: 'users/new'), status: :unprocessable_content + end end @user.password = SecureRandom.hex if @user.password.blank? diff --git a/app/javascript/submission_form/signature_step.vue b/app/javascript/submission_form/signature_step.vue index 519b77fe..cf870735 100644 --- a/app/javascript/submission_form/signature_step.vue +++ b/app/javascript/submission_form/signature_step.vue @@ -211,7 +211,7 @@ @input="updateWrittenSignature" >