From 3b572702d7a8974dbbcf4ca792e6895c25c465fa Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Tue, 4 Mar 2025 00:12:56 +0200 Subject: [PATCH] add mask size --- app/views/submissions/show.html.erb | 12 ++++++------ app/views/submit_form/show.html.erb | 2 +- lib/submissions/generate_audit_trail.rb | 9 ++++----- lib/submissions/generate_result_attachments.rb | 8 ++++++-- lib/text_utils.rb | 18 ++++++++++++++++-- 5 files changed, 33 insertions(+), 16 deletions(-) diff --git a/app/views/submissions/show.html.erb b/app/views/submissions/show.html.erb index 9b39a43c..b027c0c8 100644 --- a/app/views/submissions/show.html.erb +++ b/app/views/submissions/show.html.erb @@ -105,17 +105,17 @@ <% value = values[field['uuid']] %> <% value ||= field['default_value'] if field['type'] == 'heading' %> <% next if value.blank? %> - <% if field.dig('preferences', 'mask').present? && signed_in? && can?(:read, @submission) %> + <% if (mask = field.dig('preferences', 'mask').presence) && signed_in? && can?(:read, @submission) %> - <%= render 'submissions/value', area:, field:, attachments_index:, value: Array.wrap(value).map { |e| TextUtils.mask_value(e) }.join(', '), locale: @submission.account.locale, timezone: @submission.account.timezone, submitter: submitters_index[field['submitter_uuid']], with_signature_id: %> + <%= render 'submissions/value', area:, field:, attachments_index:, value: Array.wrap(value).map { |e| TextUtils.mask_value(e, mask) }.join(', '), locale: @submission.account.locale, timezone: @submission.account.timezone, submitter: submitters_index[field['submitter_uuid']], with_signature_id: %> <% else %> - <%= render 'submissions/value', area:, field:, attachments_index:, value: field.dig('preferences', 'mask').present? ? Array.wrap(value).map { |e| TextUtils.mask_value(e) }.join(', ') : value, locale: @submission.account.locale, timezone: @submission.account.timezone, submitter: submitters_index[field['submitter_uuid']], with_signature_id: %> + <%= render 'submissions/value', area:, field:, attachments_index:, value: mask.present? ? Array.wrap(value).map { |e| TextUtils.mask_value(e, mask) }.join(', ') : value, locale: @submission.account.locale, timezone: @submission.account.timezone, submitter: submitters_index[field['submitter_uuid']], with_signature_id: %> <% end %> <% end %> @@ -249,11 +249,11 @@ <% elsif field['type'] == 'date' %> <% value = TimeUtils.format_date_string(value, field.dig('preferences', 'format'), @submission.account.locale) %> <% end %> - <% if field.dig('preferences', 'mask').present? %> + <% if (mask = field.dig('preferences', 'mask').presence) %> <% if signed_in? && can?(:read, @submission) %> -
+
<% else %> -
<%= Array.wrap(value).map { |e| TextUtils.mask_value(e) }.join(', ') %>
+
<%= Array.wrap(value).map { |e| TextUtils.mask_value(e, mask) }.join(', ') %>
<% end %> <% else %>
<%= Array.wrap(value).join(', ') %>
diff --git a/app/views/submit_form/show.html.erb b/app/views/submit_form/show.html.erb index 0ef05cc8..b4774423 100644 --- a/app/views/submit_form/show.html.erb +++ b/app/views/submit_form/show.html.erb @@ -58,7 +58,7 @@ <% next if field['conditions'].present? && values[field['uuid']].blank? && field['submitter_uuid'] != @submitter.uuid %> <% next if field['conditions'].present? && field['submitter_uuid'] == @submitter.uuid %> <% next if field.dig('preferences', 'formula').present? && field['submitter_uuid'] == @submitter.uuid %> - <%= render 'submissions/value', area:, field:, attachments_index: @attachments_index, value: field.dig('preferences', 'mask').present? ? TextUtils.mask_value(value) : value, locale: @submitter.account.locale, timezone: @submitter.account.timezone, submitter: submitters_index[field['submitter_uuid']], with_signature_id: @form_configs[:with_signature_id] %> + <%= render 'submissions/value', area:, field:, attachments_index: @attachments_index, value: field.dig('preferences', 'mask').present? ? TextUtils.mask_value(value, field.dig('preferences', 'mask')) : value, locale: @submitter.account.locale, timezone: @submitter.account.timezone, submitter: submitters_index[field['submitter_uuid']], with_signature_id: @form_configs[:with_signature_id] %> <% end %> diff --git a/lib/submissions/generate_audit_trail.rb b/lib/submissions/generate_audit_trail.rb index c5870418..3bc461a6 100644 --- a/lib/submissions/generate_audit_trail.rb +++ b/lib/submissions/generate_audit_trail.rb @@ -359,14 +359,13 @@ module Submissions value = TimeUtils.format_date_string(value, field.dig('preferences', 'format'), account.locale) end - if field['type'] == 'number' - value = NumberUtils.format_number(value, - field.dig('preferences', 'format')) - end + value = NumberUtils.format_number(value, field.dig('preferences', 'format')) if field['type'] == 'number' value = value.join(', ') if value.is_a?(Array) - value = TextUtils.mask_value(value) if field.dig('preferences', 'mask').present? + if (mask = field.dig('preferences', 'mask').presence) + value = TextUtils.mask_value(value, mask) + end composer.formatted_text_box([{ text: TextUtils.maybe_rtl_reverse(value.to_s.presence || 'n/a') }], text_align: value.to_s.match?(RTL_REGEXP) ? :right : :left, diff --git a/lib/submissions/generate_result_attachments.rb b/lib/submissions/generate_result_attachments.rb index 4692cad1..3295ad2f 100644 --- a/lib/submissions/generate_result_attachments.rb +++ b/lib/submissions/generate_result_attachments.rb @@ -391,7 +391,9 @@ module Submissions when ->(type) { type == 'cells' && !area['cell_w'].to_f.zero? } cell_width = area['cell_w'] * width - value = TextUtils.mask_value(value) if field.dig('preferences', 'mask').present? + if (mask = field.dig('preferences', 'mask').presence) + value = TextUtils.mask_value(value, mask) + end chars = TextUtils.maybe_rtl_reverse(value).chars chars = chars.reverse if field.dig('preferences', 'align') == 'right' @@ -442,7 +444,9 @@ module Submissions value = TextUtils.maybe_rtl_reverse(Array.wrap(value).join(', ')) - value = TextUtils.mask_value(value) if field.dig('preferences', 'mask').present? + if (mask = field.dig('preferences', 'mask').presence) + value = TextUtils.mask_value(value, mask) + end text_params = { font:, fill_color:, font_size: } text_params[:line_height] = text_params[:font_size] * 1.6 if font_name == COURIER_FONT diff --git a/lib/text_utils.rb b/lib/text_utils.rb index c5c00e03..972f1ef0 100644 --- a/lib/text_utils.rb +++ b/lib/text_utils.rb @@ -15,8 +15,22 @@ module TextUtils false end - def mask_value(text) - text.to_s.gsub(MASK_REGEXP, MASK_SYMBOL) + def mask_value(text, unmask_size = 0) + if unmask_size.is_a?(Numeric) && !unmask_size.zero? + if unmask_size.negative? + [ + text.first(text.length + unmask_size).gsub(MASK_REGEXP, MASK_SYMBOL), + text.last(-unmask_size) + ].join + elsif unmask_size.positive? + [ + text.first(unmask_size), + text.last(text.length - unmask_size).gsub(MASK_REGEXP, MASK_SYMBOL) + ].join + end + else + text.to_s.gsub(MASK_REGEXP, MASK_SYMBOL) + end end def maybe_rtl_reverse(text)