From 4e4354af991fcb0b83e184c07a1fd7619b65e4a7 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Thu, 20 Aug 2026 17:26:54 +0300 Subject: [PATCH] fix RTL reverse --- lib/submissions/generate_audit_trail.rb | 20 +++++++++++++------ .../generate_result_attachments.rb | 11 +++++++--- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/lib/submissions/generate_audit_trail.rb b/lib/submissions/generate_audit_trail.rb index d7e9f6ea..327ea7cc 100644 --- a/lib/submissions/generate_audit_trail.rb +++ b/lib/submissions/generate_audit_trail.rb @@ -219,7 +219,7 @@ module Submissions [ composer.document.layout.formatted_text_box( - [{ text: document.filename.to_s }] + [{ text: TextUtils.maybe_rtl_reverse(document.filename.to_s) }] ), composer.document.layout.formatted_text_box( [ @@ -272,7 +272,9 @@ module Submissions [ composer.document.layout.formatted_text_box( [ - submission.template_submitters.size > 1 && { text: "#{item['name']}\n" }, + submission.template_submitters.size > 1 && { + text: "#{TextUtils.maybe_rtl_reverse(item['name'].to_s)}\n" + }, submitter.email && { text: "#{submitter.email}\n", font: [FONT_NAME, { variant: :bold }] }, submitter.name && { text: "#{TextUtils.maybe_rtl_reverse(submitter.name)}\n" }, submitter.phone && { text: "#{submitter.phone}\n" } @@ -425,7 +427,7 @@ module Submissions r.submissions_preview_url(submission.slug, **Docuseal.default_url_options) end - { link:, text: "#{attachment.filename}\n", style: :link } + { link:, text: "#{TextUtils.maybe_rtl_reverse(attachment.filename.to_s)}\n", style: :link } end, padding: [0, 0, 10, 0] ) @@ -476,6 +478,8 @@ module Submissions submitter.name || submitter.email || submitter.phone end + submitter_name = TextUtils.maybe_rtl_reverse(submitter_name.to_s) + text = if event.event_type == 'complete_verification' I18n.t('submission_event_names.complete_verification_by_html', provider: event.data['method'], @@ -483,18 +487,22 @@ module Submissions elsif event.event_type == 'invite_party' && (invited_submitter = submission.submitters.find { |e| e.uuid == event.data['uuid'] }) && (name = submission.template_submitters.find { |e| e['uuid'] == event.data['uuid'] }&.dig('name')) - invited_submitter_name = [invited_submitter.name || invited_submitter.email || invited_submitter.phone, - name].join(' ') + invited_submitter_name = TextUtils.maybe_rtl_reverse( + [invited_submitter.name || invited_submitter.email || invited_submitter.phone, name].join(' ') + ) I18n.t('submission_event_names.invite_party_by_html', invited_submitter_name:, submitter_name:) elsif with_audit_sender && (event.event_type == 'send_email' || event.event_type == 'send_sms') + created_by_name = TextUtils.maybe_rtl_reverse(submission.created_by_user.full_name) + [ I18n.t("submission_event_names.#{event.event_type}_to_html", submitter_name:), - "#{I18n.t(:from)} #{submission.created_by_user.full_name} #{submission.created_by_user.email}" + "#{I18n.t(:from)} #{created_by_name} #{submission.created_by_user.email}" ].join("\n") elsif event.event_type == 'delegate_form' from = event.data['old_email'].presence || versions.rfind { |v| v.created_at <= event.event_timestamp }&.then { |v| v.name || v.phone } + from = TextUtils.maybe_rtl_reverse(from.to_s) I18n.t('submission_event_names.delegate_form_by_html', from:, to: event.data['email']) elsif event.event_type.include?('send_') I18n.t("submission_event_names.#{event.event_type}_to_html", submitter_name:) diff --git a/lib/submissions/generate_result_attachments.rb b/lib/submissions/generate_result_attachments.rb index 309d9cd7..8e72b91e 100644 --- a/lib/submissions/generate_result_attachments.rb +++ b/lib/submissions/generate_result_attachments.rb @@ -346,8 +346,11 @@ module Submissions (with_signature_id_completed_at ? submitter.completed_at : nil) || attachment.created_at if with_signature_id_reason || field.dig('preferences', 'reasons').present? - "#{"#{I18n.t('reason')}: " if reason_value}#{reason_value || I18n.t('digitally_signed_by')} " \ - "#{submitter.name}#{" <#{submitter.email}>" if submitter.email.present?}\n" \ + reason_line = + "#{"#{I18n.t('reason')}: " if reason_value}#{reason_value || I18n.t('digitally_signed_by')} " \ + "#{submitter.name}#{" <#{submitter.email}>" if submitter.email.present?}" + + "#{TextUtils.maybe_rtl_reverse(reason_line)}\n" \ "#{I18n.l(signature_timestamp.in_time_zone(timezone), format: time_format)} " \ "#{TimeUtils.timezone_abbr(timezone, signature_timestamp)}" else @@ -509,7 +512,9 @@ module Submissions cv.image(PdfIcons.paperclip_io, at: [0, 0], width: box.content_width) end - acc << HexaPDF::Layout::TextFragment.create("#{attachment.filename}\n", font:, font_size:) + acc << HexaPDF::Layout::TextFragment.create( + "#{TextUtils.maybe_rtl_reverse(attachment.filename.to_s)}\n", font:, font_size: + ) end lines = layouter.fit(items, area['w'] * width, height).lines