From f60249725599ebbaeafc47beb9bc1ee33f2e8902 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Mon, 16 Jun 2025 22:17:14 +0300 Subject: [PATCH] require all submitters --- app/controllers/templates_preferences_controller.rb | 2 +- app/views/submissions/_detailed_form.html.erb | 2 +- app/views/submissions/_email_form.html.erb | 2 +- app/views/submissions/_phone_form.html.erb | 2 +- app/views/templates_preferences/show.html.erb | 10 ++++++++++ config/locales/i18n.yml | 6 ++++++ 6 files changed, 20 insertions(+), 4 deletions(-) diff --git a/app/controllers/templates_preferences_controller.rb b/app/controllers/templates_preferences_controller.rb index 8f820e3f..e2ec9ee3 100644 --- a/app/controllers/templates_preferences_controller.rb +++ b/app/controllers/templates_preferences_controller.rb @@ -25,7 +25,7 @@ class TemplatesPreferencesController < ApplicationController documents_copy_email_attach_documents documents_copy_email_reply_to completed_notification_email_attach_documents completed_redirect_url validate_unique_submitters - submitters_order require_phone_2fa + require_all_submitters submitters_order require_phone_2fa default_expire_at_duration default_expire_at completed_notification_email_subject completed_notification_email_body diff --git a/app/views/submissions/_detailed_form.html.erb b/app/views/submissions/_detailed_form.html.erb index 847ac5a8..e5c48f28 100644 --- a/app/views/submissions/_detailed_form.html.erb +++ b/app/views/submissions/_detailed_form.html.erb @@ -20,7 +20,7 @@ "> - <%= tag.input type: 'text', name: 'submission[1][submitters][][name]', autocomplete: 'off', class: 'base-input !h-10 w-full', placeholder: t('name'), required: index.zero?, value: item['email'].present? ? current_account.submitters.accessible_by(current_ability).where.not(name: nil).order(id: :desc).find_by(email: item['email'])&.name : ((params[:selfsign] && index.zero?) || item['is_requester'] ? current_user.full_name : ''), dir: 'auto', id: "detailed_name_#{item['uuid']}" %> + <%= tag.input type: 'text', name: 'submission[1][submitters][][name]', autocomplete: 'off', class: 'base-input !h-10 w-full', placeholder: t('name'), required: index.zero? || template.preferences['require_all_submitters'], value: item['email'].present? ? current_account.submitters.accessible_by(current_ability).where.not(name: nil).order(id: :desc).find_by(email: item['email'])&.name : ((params[:selfsign] && index.zero?) || item['is_requester'] ? current_user.full_name : ''), dir: 'auto', id: "detailed_name_#{item['uuid']}" %>
diff --git a/app/views/submissions/_email_form.html.erb b/app/views/submissions/_email_form.html.erb index e2e90aa6..b50595d2 100644 --- a/app/views/submissions/_email_form.html.erb +++ b/app/views/submissions/_email_form.html.erb @@ -29,7 +29,7 @@ "> - <%= tag.input type: 'email', multiple: true, name: 'submission[1][submitters][][email]', autocomplete: 'off', class: 'base-input !h-10 w-full', placeholder: t('email'), required: index.zero?, value: item['email'].presence || ((params[:selfsign] && index.zero?) || item['is_requester'] ? current_user.email : ''), id: "email_#{item['uuid']}" %> + <%= tag.input type: 'email', multiple: true, name: 'submission[1][submitters][][email]', autocomplete: 'off', class: 'base-input !h-10 w-full', placeholder: t('email'), required: index.zero? || template.preferences['require_all_submitters'], value: item['email'].presence || ((params[:selfsign] && index.zero?) || item['is_requester'] ? current_user.email : ''), id: "email_#{item['uuid']}" %> diff --git a/app/views/submissions/_phone_form.html.erb b/app/views/submissions/_phone_form.html.erb index 1034eb27..649739fc 100644 --- a/app/views/submissions/_phone_form.html.erb +++ b/app/views/submissions/_phone_form.html.erb @@ -21,7 +21,7 @@ "> - <%= tag.input type: 'tel', pattern: '^\+[0-9\s\-]+$', oninvalid: "this.value ? this.setCustomValidity('#{t('use_international_format_1xxx_')}') : ''", oninput: "this.setCustomValidity('')", name: 'submission[1][submitters][][phone]', autocomplete: 'off', class: 'base-input !h-10 w-full', placeholder: t('phone'), required: index.zero?, id: "phone_phone_#{item['uuid']}" %> + <%= tag.input type: 'tel', pattern: '^\+[0-9\s\-]+$', oninvalid: "this.value ? this.setCustomValidity('#{t('use_international_format_1xxx_')}') : ''", oninput: "this.setCustomValidity('')", name: 'submission[1][submitters][][phone]', autocomplete: 'off', class: 'base-input !h-10 w-full', placeholder: t('phone'), required: index.zero? || template.preferences['require_all_submitters'], id: "phone_phone_#{item['uuid']}" %> <% if submitters.size > 1 %> diff --git a/app/views/templates_preferences/show.html.erb b/app/views/templates_preferences/show.html.erb index 47b342c7..165def27 100644 --- a/app/views/templates_preferences/show.html.erb +++ b/app/views/templates_preferences/show.html.erb @@ -358,6 +358,16 @@ <% end %>
<% end %> + <%= form_for @template, url: template_preferences_path(@template), method: :post, html: { autocomplete: 'off', class: 'mt-2' }, data: { close_on_submit: false } do |f| %> +
+ + <%= t('require_all_recipients') %> + + <%= f.fields_for :preferences, Struct.new(:require_all_submitters).new(@template.preferences['require_all_submitters']) do |ff| %> + <%= ff.check_box :require_all_submitters, { class: 'toggle', onchange: 'this.form.requestSubmit()' }, 'true', '' %> + <% end %> +
+ <% end %> <% end %>
<%= button_tag button_title(title: t('save'), disabled_with: t('updating')), class: 'base-button', form: :submitters_form %> diff --git a/config/locales/i18n.yml b/config/locales/i18n.yml index 378a6f5e..179dff66 100644 --- a/config/locales/i18n.yml +++ b/config/locales/i18n.yml @@ -23,6 +23,7 @@ en: &en thanks: Thanks private: Private stripe_integration: Stripe Integration + require_all_recipients: Require all recipients stripe_account_has_been_connected: Stripe account has been connected. re_connect_stripe: Re-connect Stripe bcc_recipients: BCC recipients @@ -851,6 +852,7 @@ en: &en range_without_total: "%{from}-%{to} items" es: &es + require_all_recipients: Requerir a todos los destinatarios stripe_integration: Integración con Stripe stripe_account_has_been_connected: La cuenta de Stripe ha sido conectada. re_connect_stripe: Volver a conectar Stripe @@ -1683,6 +1685,7 @@ es: &es range_without_total: "%{from}-%{to} elementos" it: &it + require_all_recipients: Richiedi tutti i destinatari stripe_integration: Integrazione Stripe stripe_account_has_been_connected: L'account Stripe è stato collegato. re_connect_stripe: Ricollega Stripe @@ -2513,6 +2516,7 @@ it: &it range_without_total: "%{from}-%{to} elementi" fr: &fr + require_all_recipients: Exiger tous les destinataires stripe_integration: Intégration Stripe stripe_account_has_been_connected: Le compte Stripe a été connecté. re_connect_stripe: Reconnecter Stripe @@ -3346,6 +3350,7 @@ fr: &fr range_without_total: "%{from} à %{to} éléments" pt: &pt + require_all_recipients: Exigir todos os destinatários stripe_integration: Integração com Stripe stripe_account_has_been_connected: Conta Stripe foi conectada. re_connect_stripe: Reconectar Stripe @@ -4179,6 +4184,7 @@ pt: &pt range_without_total: "%{from}-%{to} itens" de: &de + require_all_recipients: Alle Empfänger erforderlich stripe_integration: Stripe-Integration stripe_account_has_been_connected: Stripe-Konto wurde verbunden. re_connect_stripe: Stripe erneut verbinden