Skip to content

Commit 14c84ef

Browse files
authored
Merge from docusealco/wip
2 parents 055f7e2 + 01d982b commit 14c84ef

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+308
-76
lines changed

app/controllers/api/submissions_controller.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,9 @@ def filter_submissions(submissions, params)
112112
submissions = submissions.where(slug: params[:slug]) if params[:slug].present?
113113

114114
if params[:template_folder].present?
115-
submissions = submissions.joins(template: :folder).where(folder: { name: params[:template_folder] })
115+
folder = TemplateFolder.accessible_by(current_ability).find_by(name: params[:template_folder])
116+
117+
submissions = folder ? submissions.joins(:template).where(template: { folder_id: folder.id }) : submissions.none
116118
end
117119

118120
if params.key?(:archived)

app/controllers/api/templates_controller.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,12 @@ def filter_templates(templates, params)
9393
templates = templates.where(external_id: params[:application_key]) if params[:application_key].present?
9494
templates = templates.where(external_id: params[:external_id]) if params[:external_id].present?
9595
templates = templates.where(slug: params[:slug]) if params[:slug].present?
96-
templates = templates.joins(:folder).where(folder: { name: params[:folder] }) if params[:folder].present?
96+
97+
if params[:folder].present?
98+
folder = TemplateFolder.accessible_by(current_ability).find_by(name: params[:folder])
99+
100+
templates = folder ? templates.where(folder:) : templates.none
101+
end
97102

98103
templates
99104
end

app/controllers/errors_controller.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,12 @@ class ErrorsController < ActionController::Base
55
'This feature is available in Pro Edition: https://www.docuseal.com/pricing'
66

77
ENTERPRISE_PATHS = [
8+
'/submissions/html',
9+
'/api/submissions/html',
810
'/templates/html',
911
'/api/templates/html',
12+
'/submissions/pdf',
13+
'/api/submissions/pdf',
1014
'/templates/pdf',
1115
'/api/templates/pdf',
1216
'/templates/doc',
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# frozen_string_literal: true
2+
3+
class SearchEntriesReindexController < ApplicationController
4+
def create
5+
authorize!(:manage, EncryptedConfig)
6+
7+
ReindexAllSearchEntriesJob.perform_async
8+
9+
AccountConfig.find_or_initialize_by(account_id: Account.minimum(:id), key: :fulltext_search)
10+
.update!(value: true)
11+
12+
Docuseal.instance_variable_set(:@fulltext_search, nil)
13+
14+
redirect_back(fallback_location: settings_account_path,
15+
notice: "Started building search index. Visit #{root_url}jobs/busy to check progress.")
16+
end
17+
end

app/controllers/send_submission_email_controller.rb

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,16 @@ class SendSubmissionEmailController < ApplicationController
1111

1212
def create
1313
if params[:template_slug]
14-
@submitter = Submitter.completed.joins(submission: :template).find_by!(email: params[:email].to_s.downcase,
15-
template: { slug: params[:template_slug] })
14+
template = Template.find_by!(slug: params[:template_slug])
15+
16+
@submitter =
17+
Submitter.completed.where(submission: template.submissions).find_by!(email: params[:email].to_s.downcase)
1618
elsif params[:submission_slug]
17-
@submitter = Submitter.completed.joins(:submission).find_by(email: params[:email].to_s.downcase,
18-
submission: { slug: params[:submission_slug] })
19+
submission = Submission.find_by(slug: params[:submission_slug])
20+
21+
if submission
22+
@submitter = Submitter.completed.find_by(submission: submission, email: params[:email].to_s.downcase)
23+
end
1924

2025
return redirect_to submissions_preview_completed_path(params[:submission_slug], status: :error) unless @submitter
2126
else
@@ -24,14 +29,18 @@ def create
2429

2530
RateLimit.call("send-email-#{@submitter.id}", limit: 2, ttl: 5.minutes)
2631

27-
unless EmailEvent.exists?(tag: :submitter_documents_copy, email: @submitter.email, emailable: @submitter,
28-
event_type: :send, created_at: SEND_DURATION.ago..Time.current)
29-
SubmitterMailer.documents_copy_email(@submitter, sig: true).deliver_later!
30-
end
32+
SubmitterMailer.documents_copy_email(@submitter, sig: true).deliver_later! unless already_sent?(@submitter)
3133

3234
respond_to do |f|
3335
f.html { render :success }
3436
f.json { head :ok }
3537
end
3638
end
39+
40+
private
41+
42+
def already_sent?(submitter)
43+
EmailEvent.exists?(tag: :submitter_documents_copy, email: submitter.email, emailable: submitter,
44+
event_type: :send, created_at: SEND_DURATION.ago..Time.current)
45+
end
3746
end

app/controllers/setup_controller.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ def create
3434
{ key: EncryptedConfig::ESIGN_CERTS_KEY, value: GenerateCertificate.call.transform_values(&:to_pem) }
3535
]
3636
@account.encrypted_configs.create!(encrypted_configs)
37+
@account.account_configs.create!(key: :fulltext_search, value: true) if SearchEntry.table_exists?
3738

3839
Docuseal.refresh_default_url_options!
3940

app/controllers/submitters_autocomplete_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def index
2222

2323
def search_submitters(submitters)
2424
if SELECT_COLUMNS.include?(params[:field])
25-
if Docuseal.fulltext_search?(current_user)
25+
if Docuseal.fulltext_search?
2626
Submitters.fulltext_search_field(current_user, submitters, params[:q], params[:field])
2727
else
2828
column = Submitter.arel_table[params[:field].to_sym]

app/controllers/template_folders_autocomplete_controller.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ class TemplateFoldersAutocompleteController < ApplicationController
66
LIMIT = 100
77

88
def index
9-
template_folders = @template_folders.joins(:templates).where(templates: { archived_at: nil }).distinct
9+
templates_query = Template.accessible_by(current_ability).where(archived_at: nil)
10+
11+
template_folders = @template_folders.where(id: templates_query.select(:folder_id))
1012
template_folders = TemplateFolders.search(template_folders, params[:q]).limit(LIMIT)
1113

1214
render json: template_folders.as_json(only: %i[name archived_at])

app/controllers/templates_dashboard_controller.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ def index
3636
end
3737

3838
@pagy, @templates = pagy_auto(@templates, limit:)
39+
40+
load_related_submissions if params[:q].present? && @templates.blank?
3941
end
4042
end
4143

@@ -100,4 +102,19 @@ def sort_template_folders(template_folders, current_user, order)
100102
template_folders.order(id: :desc)
101103
end
102104
end
105+
106+
def load_related_submissions
107+
@related_submissions = Submission.accessible_by(current_ability)
108+
.left_joins(:template)
109+
.where(archived_at: nil)
110+
.where(templates: { archived_at: nil })
111+
.preload(:template_accesses, :created_by_user,
112+
template: :author,
113+
submitters: :start_form_submission_events)
114+
115+
@related_submissions = Submissions.search(current_user, @related_submissions, params[:q])
116+
.order(id: :desc)
117+
118+
@related_submissions_pagy, @related_submissions = pagy_auto(@related_submissions, limit: 5)
119+
end
103120
end

app/controllers/templates_preferences_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def template_params
2525
documents_copy_email_attach_documents documents_copy_email_reply_to
2626
completed_notification_email_attach_documents
2727
completed_redirect_url validate_unique_submitters
28-
submitters_order require_phone_2fa
28+
require_all_submitters submitters_order require_phone_2fa
2929
default_expire_at_duration
3030
default_expire_at
3131
completed_notification_email_subject completed_notification_email_body

0 commit comments

Comments
 (0)