diff --git a/Gemfile.lock b/Gemfile.lock index 44d78ef9..b9151ec0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -437,7 +437,7 @@ GEM actionpack (>= 5.2) railties (>= 5.2) retriable (3.1.2) - rexml (3.3.8) + rexml (3.3.9) rotp (6.3.0) rqrcode (2.2.0) chunky_png (~> 1.0) diff --git a/README.md b/README.md index 86b22694..05d2acdf 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- + DocuSeal
@@ -54,11 +54,11 @@ DocuSeal is an open source platform that provides secure and efficient digital d - Conditional fields and formulas - Bulk send with CSV, XLSX spreadsheet import - SSO / SAML -- Template creation with HTML API ([Guide](https://www.docuseal.co/guides/create-pdf-document-fillable-form-with-html-api)) -- Template creation with PDF or DOCX and field tags API ([Guide](https://www.docuseal.co/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form)) -- Embedded signing form ([React](https://github.com/docusealco/docuseal-react), [Vue](https://github.com/docusealco/docuseal-vue), [Angular](https://github.com/docusealco/docuseal-angular) or [JavaScript](https://www.docuseal.co/docs/embedded)) -- Embedded document form builder ([React](https://github.com/docusealco/docuseal-react), [Vue](https://github.com/docusealco/docuseal-vue), [Angular](https://github.com/docusealco/docuseal-angular) or [JavaScript](https://www.docuseal.co/docs/embedded)) -- [Learn more](https://www.docuseal.co/pricing) +- Template creation with HTML API ([Guide](https://www.docuseal.com/guides/create-pdf-document-fillable-form-with-html-api)) +- Template creation with PDF or DOCX and field tags API ([Guide](https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form)) +- Embedded signing form ([React](https://github.com/docusealco/docuseal-react), [Vue](https://github.com/docusealco/docuseal-vue), [Angular](https://github.com/docusealco/docuseal-angular) or [JavaScript](https://www.docuseal.com/docs/embedded)) +- Embedded document form builder ([React](https://github.com/docusealco/docuseal-react), [Vue](https://github.com/docusealco/docuseal-vue), [Angular](https://github.com/docusealco/docuseal-angular) or [JavaScript](https://www.docuseal.com/docs/embedded)) +- [Learn more](https://www.docuseal.com/pricing) ## Deploy @@ -93,7 +93,7 @@ sudo HOST=your-domain-name.com docker compose up At DocuSeal we have expertise and technologies to make documents creation, filling, signing and processing seamlessly integrated with your product. We specialize in working with various industries, including **Banking, Healthcare, Transport, Real Estate, eCommerce, KYC, CRM, and other software products** that require bulk document signing. By leveraging DocuSeal, we can assist in reducing the overall cost of developing and processing electronic documents while ensuring security and compliance with local electronic document laws. -[Book a Meeting](https://www.docuseal.co/contact) +[Book a Meeting](https://www.docuseal.com/contact) ## License @@ -102,6 +102,6 @@ Unless otherwise noted, all files © 2023 DocuSeal LLC. ## Tools -- [Signature Maker](https://www.docuseal.co/online-signature) -- [Sign Document Online](https://www.docuseal.co/sign-documents-online) -- [Fill PDF Online](https://www.docuseal.co/fill-pdf) +- [Signature Maker](https://www.docuseal.com/online-signature) +- [Sign Document Online](https://www.docuseal.com/sign-documents-online) +- [Fill PDF Online](https://www.docuseal.com/fill-pdf) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index da40c11b..bf2df2d3 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -104,4 +104,10 @@ class ApplicationController < ActionController::Base def svg_icon(icon_name, class: '') render_to_string(partial: "icons/#{icon_name}", locals: { class: }) end + + def maybe_redirect_com + return if request.domain != 'docuseal.co' + + redirect_to request.url.gsub('.co/', '.com/'), allow_other_host: true, status: :moved_permanently + end end diff --git a/app/controllers/errors_controller.rb b/app/controllers/errors_controller.rb index df88afde..16b5fc2d 100644 --- a/app/controllers/errors_controller.rb +++ b/app/controllers/errors_controller.rb @@ -2,7 +2,7 @@ class ErrorsController < ActionController::Base ENTERPRISE_FEATURE_MESSAGE = - 'This feature is available in Pro Edition: https://www.docuseal.co/pricing' + 'This feature is available in Pro Edition: https://www.docuseal.com/pricing' ENTERPRISE_PATHS = [ '/templates/html', diff --git a/app/controllers/start_form_controller.rb b/app/controllers/start_form_controller.rb index 3b7d0c14..c7fc9ae8 100644 --- a/app/controllers/start_form_controller.rb +++ b/app/controllers/start_form_controller.rb @@ -7,6 +7,7 @@ class StartFormController < ApplicationController skip_authorization_check around_action :with_browser_locale, only: %i[show completed] + before_action :maybe_redirect_com, only: %i[show completed] before_action :load_template def show diff --git a/app/controllers/submissions_preview_controller.rb b/app/controllers/submissions_preview_controller.rb index 640e6e64..65b3fff3 100644 --- a/app/controllers/submissions_preview_controller.rb +++ b/app/controllers/submissions_preview_controller.rb @@ -4,6 +4,8 @@ class SubmissionsPreviewController < ApplicationController skip_before_action :authenticate_user! skip_authorization_check + before_action :maybe_redirect_com, only: %i[show completed] + TTL = 40.minutes def show diff --git a/app/controllers/submissions_unarchive_controller.rb b/app/controllers/submissions_unarchive_controller.rb new file mode 100644 index 00000000..5a60a60b --- /dev/null +++ b/app/controllers/submissions_unarchive_controller.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class SubmissionsUnarchiveController < ApplicationController + load_and_authorize_resource :submission + + def create + @submission.update!(archived_at: nil) + + redirect_to submission_path(@submission), notice: I18n.t('submission_has_been_unarchived') + end +end diff --git a/app/controllers/submit_form_controller.rb b/app/controllers/submit_form_controller.rb index 621849eb..642c3119 100644 --- a/app/controllers/submit_form_controller.rb +++ b/app/controllers/submit_form_controller.rb @@ -7,6 +7,8 @@ class SubmitFormController < ApplicationController skip_before_action :authenticate_user! skip_authorization_check + before_action :maybe_redirect_com, only: %i[show completed] + CONFIG_KEYS = [].freeze def show diff --git a/app/controllers/submit_form_decline_controller.rb b/app/controllers/submit_form_decline_controller.rb index 0fb9657e..a04f5ca2 100644 --- a/app/controllers/submit_form_decline_controller.rb +++ b/app/controllers/submit_form_decline_controller.rb @@ -21,7 +21,10 @@ class SubmitFormDeclineController < ApplicationController user = submitter.submission.created_by_user || submitter.template.author - SubmitterMailer.declined_email(submitter, user).deliver_later! + if user.user_configs.find_by(key: UserConfig::RECEIVE_DECLINED_EMAIL)&.value != false + SubmitterMailer.declined_email(submitter, user).deliver_later! + end + SendFormDeclinedWebhookRequestJob.perform_async('submitter_id' => submitter.id) redirect_to submit_form_path(submitter.slug) diff --git a/app/javascript/submission_form/completed.vue b/app/javascript/submission_form/completed.vue index 694e1b9c..6b21f77e 100644 --- a/app/javascript/submission_form/completed.vue +++ b/app/javascript/submission_form/completed.vue @@ -91,7 +91,7 @@ > {{ t('powered_by') }} DocuSeal - {{ t('open_source_documents_software') }} diff --git a/app/javascript/submission_form/signature_step.vue b/app/javascript/submission_form/signature_step.vue index 09ad9305..ffce4ab3 100644 --- a/app/javascript/submission_form/signature_step.vue +++ b/app/javascript/submission_form/signature_step.vue @@ -145,6 +145,10 @@ {{ t('clear') }}
+
{{ t('by_clicking_you_agree_to_the').replace('{button}', buttonText.charAt(0).toUpperCase() + buttonText.slice(1)) }} diff --git a/app/javascript/template_builder/builder.vue b/app/javascript/template_builder/builder.vue index ac671e9f..e3e17dbe 100644 --- a/app/javascript/template_builder/builder.vue +++ b/app/javascript/template_builder/builder.vue @@ -415,6 +415,7 @@ import Contenteditable from './contenteditable' import DocumentPreview from './preview' import DocumentControls from './controls' import MobileFields from './mobile_fields' +import FieldSubmitter from './field_submitter' import { IconPlus, IconUsersPlus, IconDeviceFloppy, IconChevronDown, IconEye, IconWritingSign, IconInnerShadowTop, IconInfoCircle, IconAdjustments } from '@tabler/icons-vue' import { v4 } from 'uuid' import { ref, computed } from 'vue' @@ -558,6 +559,11 @@ export default { required: false, default: () => [] }, + defineSubmitters: { + type: Array, + required: false, + default: () => [] + }, acceptFileTypes: { type: String, required: false, @@ -677,6 +683,7 @@ export default { } }, computed: { + submitterDefaultNames: FieldSubmitter.computed.names, selectedAreaRef: () => ref(), fieldsDragFieldRef: () => ref(), language () { @@ -749,6 +756,18 @@ export default { } }) + this.defineSubmitters.forEach((name, index) => { + const submitter = (this.template.submitters[index] ||= {}) + + submitter.name = name || this.submitterDefaultNames[index] + + if (existingSubmittersUuids.filter(Boolean).length) { + submitter.uuid = existingSubmittersUuids[index] || submitter.uuid || v4() + } else { + submitter.uuid ||= v4() + } + }) + this.selectedSubmitter = this.template.submitters[0] }, mounted () { diff --git a/app/javascript/template_builder/conditions_modal.vue b/app/javascript/template_builder/conditions_modal.vue index cfb045cf..61ae8939 100644 --- a/app/javascript/template_builder/conditions_modal.vue +++ b/app/javascript/template_builder/conditions_modal.vue @@ -23,7 +23,7 @@ class="bg-base-300 rounded-xl py-2 px-3 text-center" > {{ t('available_in_pro') }} diff --git a/app/javascript/template_builder/fields.vue b/app/javascript/template_builder/fields.vue index b59ca71c..6fe07fcf 100644 --- a/app/javascript/template_builder/fields.vue +++ b/app/javascript/template_builder/fields.vue @@ -140,7 +140,7 @@ :data-tip="t('unlock_sms_verified_phone_number_field_with_paid_plan_use_text_field_for_phone_numbers_without_verification')" > {{ t('available_in_pro') }} diff --git a/app/javascript/template_builder/import_list.vue b/app/javascript/template_builder/import_list.vue index b8e1c415..be9af38e 100644 --- a/app/javascript/template_builder/import_list.vue +++ b/app/javascript/template_builder/import_list.vue @@ -77,7 +77,7 @@