diff --git a/Gemfile.lock b/Gemfile.lock index 6260f938..5685c2c3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -271,7 +271,7 @@ GEM rdoc (>= 4.0.0) reline (>= 0.4.2) jmespath (1.6.2) - json (2.19.8) + json (2.19.9) jwt (3.2.0) base64 language_server-protocol (3.17.0.5) diff --git a/app/controllers/preview_document_page_controller.rb b/app/controllers/preview_document_page_controller.rb index 2befe3bf..5f5a8554 100644 --- a/app/controllers/preview_document_page_controller.rb +++ b/app/controllers/preview_document_page_controller.rb @@ -25,7 +25,10 @@ class PreviewDocumentPageController < ActionController::API preview_image = attachment.preview_images.joins(:blob) .find_by(blob: { filename: ["#{params[:id]}.png", "#{params[:id]}.jpg"] }) - return redirect_to preview_image.url, allow_other_host: true if preview_image + if preview_image + return redirect_to preview_image.url(time: ActiveStorage::Attachment.service_url_time), + allow_other_host: true + end file_path = if attachment.service.name == :disk @@ -37,7 +40,7 @@ class PreviewDocumentPageController < ActionController::API preview_image = Templates::ProcessDocument.generate_pdf_preview_from_file(attachment, file_path, params[:id].to_i) - redirect_to preview_image.url, allow_other_host: true + redirect_to preview_image.url(time: ActiveStorage::Attachment.service_url_time), allow_other_host: true end def find_or_create_document_tempfile_path(attachment) diff --git a/app/controllers/start_form_controller.rb b/app/controllers/start_form_controller.rb index 22fa4ffa..4a0d7890 100644 --- a/app/controllers/start_form_controller.rb +++ b/app/controllers/start_form_controller.rb @@ -108,12 +108,16 @@ class StartFormController < ApplicationController end def can_resubmit?(submitter) - submitter.account.account_configs.find_or_initialize_by(key: AccountConfig::ALLOW_TO_RESUBMIT).value != false + submitter.completed_at? && submitter.completed_at > 14.days.ago && + %w[api embed mcp].exclude?(submitter.submission.source) && + submitter.account.account_configs.find_or_initialize_by(key: AccountConfig::ALLOW_TO_RESUBMIT).value != false end def authorize_start! - return redirect_to submit_form_path(@resubmit_submitter.slug) if @resubmit_submitter && @template.archived_at? - return redirect_to start_form_path(@template.slug) if @template.archived_at? + is_archived = @template.archived_at? || @template.account.archived_at? + + return redirect_to submit_form_path(@resubmit_submitter.slug) if @resubmit_submitter && is_archived + return redirect_to start_form_path(@template.slug) if is_archived return if @resubmit_submitter return if @template.shared_link? || (current_user && current_ability.can?(:read, @template)) diff --git a/app/controllers/submit_form_decline_controller.rb b/app/controllers/submit_form_decline_controller.rb index a55590f1..73139f79 100644 --- a/app/controllers/submit_form_decline_controller.rb +++ b/app/controllers/submit_form_decline_controller.rb @@ -7,7 +7,8 @@ class SubmitFormDeclineController < ApplicationController before_action :load_submitter def create - return redirect_to submit_form_path(@submitter.slug) if @submitter.declined_at? || + return redirect_to submit_form_path(@submitter.slug) if declining_disabled? || + @submitter.declined_at? || @submitter.completed_at? || @submitter.submission.archived_at? || @submitter.submission.expired? || @@ -35,6 +36,10 @@ class SubmitFormDeclineController < ApplicationController private + def declining_disabled? + @submitter.account.account_configs.find_by(key: AccountConfig::ALLOW_TO_DECLINE_KEY)&.value == false + end + def load_submitter @submitter = Submitter.find_by!(slug: params[:submit_form_slug]) end diff --git a/app/controllers/submitters_controller.rb b/app/controllers/submitters_controller.rb index 697b3dc1..1eae06d8 100644 --- a/app/controllers/submitters_controller.rb +++ b/app/controllers/submitters_controller.rb @@ -13,7 +13,7 @@ class SubmittersController < ApplicationController def update submission = @submitter.submission - if @submitter.submission_events.exists?(event_type: 'start_form') || submission.archived_at? || submission.expired? + unless submitter_editable?(submission) return redirect_back fallback_location: submission_path(submission), alert: I18n.t('submitter_cannot_be_updated') end @@ -48,6 +48,12 @@ class SubmittersController < ApplicationController private + def submitter_editable?(submission) + !@submitter.submission_events.exists?(event_type: 'start_form') && + !@submitter.completed_at? && !@submitter.declined_at? && + !submission.archived_at? && !submission.expired? && !submission.template&.archived_at? + end + def maybe_resend_email_sms(submitter, params) if params[:send_email] == '1' && submitter.email.present? is_sent_recently = Docuseal.multitenant? && diff --git a/app/controllers/submitters_resubmit_controller.rb b/app/controllers/submitters_resubmit_controller.rb index 6ab28731..c34f83b3 100644 --- a/app/controllers/submitters_resubmit_controller.rb +++ b/app/controllers/submitters_resubmit_controller.rb @@ -5,6 +5,8 @@ class SubmittersResubmitController < ApplicationController def update return redirect_to submit_form_path(slug: @submitter.slug) if @submitter.email != current_user.email + return redirect_to submit_form_path(slug: @submitter.slug) if @submitter.completed_at.blank? || + @submitter.completed_at < 1.month.ago submission = @submitter.account.submissions.new(created_by_user: current_user, submitters_order: :preserved, diff --git a/app/controllers/template_documents_modify_controller.rb b/app/controllers/template_documents_modify_controller.rb index 30db1fd9..69de6e6d 100644 --- a/app/controllers/template_documents_modify_controller.rb +++ b/app/controllers/template_documents_modify_controller.rb @@ -10,7 +10,7 @@ class TemplateDocumentsModifyController < ApplicationController params.require(:documents).map do |item| item.permit(:attachment_uuid, pages: [:attachment_uuid, :page, :rotate, - { redact: [%i[x y w h]], replaced_page: %i[attachment_uuid page] }]).to_h + { redact: [%i[x y w h color]], replaced_page: %i[attachment_uuid page] }]).to_h end Templates::ModifyDocuments.call(@template, documents_layout) diff --git a/app/javascript/template_builder/documents_editor_page.vue b/app/javascript/template_builder/documents_editor_page.vue index 1bdc93e8..d6d9b9ff 100644 --- a/app/javascript/template_builder/documents_editor_page.vue +++ b/app/javascript/template_builder/documents_editor_page.vue @@ -36,7 +36,8 @@