Skip to content

Commit c6eae66

Browse files
authored
Merge from docusealco/wip
2 parents 019222a + 08aa902 commit c6eae66

File tree

59 files changed

+1062
-163
lines changed

Some content is hidden

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

59 files changed

+1062
-163
lines changed

.github/workflows/ci.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,10 @@ jobs:
157157
bundle install --jobs 4 --retry 4
158158
yarn install
159159
sudo apt-get update
160-
sudo apt-get install libvips
160+
sudo apt-get install -y libvips
161+
wget -O pdfium-linux.tgz "https://github.com/docusealco/pdfium-binaries/releases/latest/download/pdfium-linux-$(uname -m | sed 's/x86_64/x64/;s/aarch64/arm64/').tgz"
162+
sudo tar -xzf pdfium-linux.tgz --strip-components=1 -C /usr/lib lib/libpdfium.so
163+
rm -f pdfium-linux.tgz
161164
- name: Run
162165
env:
163166
RAILS_ENV: test

.rspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
--require rails_helper

Dockerfile

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
1-
FROM ruby:3.4.2-alpine AS fonts
1+
FROM ruby:3.4.2-alpine AS download
22

33
WORKDIR /fonts
44

5-
RUN apk --no-cache add fontforge wget && wget https://github.com/satbyy/go-noto-universal/releases/download/v7.0/GoNotoKurrent-Regular.ttf && wget https://github.com/satbyy/go-noto-universal/releases/download/v7.0/GoNotoKurrent-Bold.ttf && wget https://github.com/impallari/DancingScript/raw/master/fonts/DancingScript-Regular.otf && wget https://cdn.jsdelivr.net/gh/notofonts/notofonts.github.io/fonts/NotoSansSymbols2/hinted/ttf/NotoSansSymbols2-Regular.ttf && wget https://github.com/Maxattax97/gnu-freefont/raw/master/ttf/FreeSans.ttf && wget https://github.com/impallari/DancingScript/raw/master/OFL.txt
5+
RUN apk --no-cache add fontforge wget && \
6+
wget https://github.com/satbyy/go-noto-universal/releases/download/v7.0/GoNotoKurrent-Regular.ttf && \
7+
wget https://github.com/satbyy/go-noto-universal/releases/download/v7.0/GoNotoKurrent-Bold.ttf && \
8+
wget https://github.com/impallari/DancingScript/raw/master/fonts/DancingScript-Regular.otf && \
9+
wget https://cdn.jsdelivr.net/gh/notofonts/notofonts.github.io/fonts/NotoSansSymbols2/hinted/ttf/NotoSansSymbols2-Regular.ttf && \
10+
wget https://github.com/Maxattax97/gnu-freefont/raw/master/ttf/FreeSans.ttf && \
11+
wget https://github.com/impallari/DancingScript/raw/master/OFL.txt && \
12+
wget -O pdfium-linux.tgz "https://github.com/docusealco/pdfium-binaries/releases/latest/download/pdfium-linux-$(uname -m | sed 's/x86_64/x64/;s/aarch64/arm64/').tgz" && \
13+
mkdir -p /pdfium-linux && \
14+
tar -xzf pdfium-linux.tgz -C /pdfium-linux
615

716
RUN fontforge -lang=py -c 'font1 = fontforge.open("FreeSans.ttf"); font2 = fontforge.open("NotoSansSymbols2-Regular.ttf"); font1.mergeFonts(font2); font1.generate("FreeSans.ttf")'
817

@@ -41,7 +50,7 @@ ENV OPENSSL_CONF=/app/openssl_legacy.cnf
4150

4251
WORKDIR /app
4352

44-
RUN echo '@edge https://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories && apk add --no-cache sqlite-dev libpq-dev mariadb-dev vips-dev vips-poppler poppler-utils redis libheif@edge vips-heif gcompat ttf-freefont && mkdir /fonts && rm /usr/share/fonts/freefont/FreeSans.otf
53+
RUN echo '@edge https://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories && apk add --no-cache sqlite-dev libpq-dev mariadb-dev vips-dev@edge redis libheif@edge vips-heif gcompat ttf-freefont && mkdir /fonts && rm /usr/share/fonts/freefont/FreeSans.otf
4554

4655
RUN echo $'.include = /etc/ssl/openssl.cnf\n\
4756
\n\
@@ -70,8 +79,10 @@ COPY ./tmp ./tmp
7079
COPY LICENSE README.md Rakefile config.ru .version ./
7180
COPY .version ./public/version
7281

73-
COPY --from=fonts /fonts/GoNotoKurrent-Regular.ttf /fonts/GoNotoKurrent-Bold.ttf /fonts/DancingScript-Regular.otf /fonts/OFL.txt /fonts
74-
COPY --from=fonts /fonts/FreeSans.ttf /usr/share/fonts/freefont
82+
COPY --from=download /fonts/GoNotoKurrent-Regular.ttf /fonts/GoNotoKurrent-Bold.ttf /fonts/DancingScript-Regular.otf /fonts/OFL.txt /fonts
83+
COPY --from=download /fonts/FreeSans.ttf /usr/share/fonts/freefont
84+
COPY --from=download /pdfium-linux/lib/libpdfium.so /usr/lib/libpdfium.so
85+
COPY --from=download /pdfium-linux/licenses/pdfium.txt /usr/lib/libpdfium-LICENSE.txt
7586
COPY --from=webpack /app/public/packs ./public/packs
7687

7788
RUN ln -s /fonts /app/public/fonts

app/controllers/account_configs_controller.rb

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
# frozen_string_literal: true
22

33
class AccountConfigsController < ApplicationController
4-
before_action :load_account_config
5-
authorize_resource :account_config
4+
before_action :load_account_config, only: :create
5+
authorize_resource :account_config, only: :create
6+
7+
load_and_authorize_resource :account_config, only: :destroy
68

79
ALLOWED_KEYS = [
810
AccountConfig::ALLOW_TYPED_SIGNATURE,
@@ -30,6 +32,14 @@ def create
3032
head :ok
3133
end
3234

35+
def destroy
36+
raise InvalidKey unless ALLOWED_KEYS.include?(@account_config.key)
37+
38+
@account_config.destroy!
39+
40+
redirect_back(fallback_location: root_path)
41+
end
42+
3343
private
3444

3545
def load_account_config

app/controllers/send_submission_email_controller.rb

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,17 @@ class SendSubmissionEmailController < ApplicationController
1010
SEND_DURATION = 30.minutes
1111

1212
def create
13-
@submitter =
14-
if params[:template_slug]
15-
Submitter.joins(submission: :template).find_by!(email: params[:email].to_s.downcase,
16-
template: { slug: params[:template_slug] })
17-
elsif params[:submission_slug]
18-
Submitter.joins(:submission).find_by!(email: params[:email].to_s.downcase,
19-
submission: { slug: params[:submission_slug] })
20-
else
21-
Submitter.find_by!(slug: params[:submitter_slug])
22-
end
13+
if params[:template_slug]
14+
@submitter = Submitter.joins(submission: :template).find_by!(email: params[:email].to_s.downcase,
15+
template: { slug: params[:template_slug] })
16+
elsif params[:submission_slug]
17+
@submitter = Submitter.joins(:submission).find_by(email: params[:email].to_s.downcase,
18+
submission: { slug: params[:submission_slug] })
19+
20+
return redirect_to submissions_preview_completed_path(params[:submission_slug], status: :error) unless @submitter
21+
else
22+
@submitter = Submitter.find_by!(slug: params[:submitter_slug])
23+
end
2324

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

app/controllers/submissions_preview_controller.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# frozen_string_literal: true
22

33
class SubmissionsPreviewController < ApplicationController
4+
around_action :with_browser_locale
45
skip_before_action :authenticate_user!
56
skip_authorization_check
67

app/javascript/template_builder/builder.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1279,7 +1279,7 @@ export default {
12791279
area.h = (pageMask.clientWidth / 35 / pageMask.clientWidth)
12801280
}
12811281
},
1282-
onDraw (area) {
1282+
onDraw ({ area, isTooSmall }) {
12831283
if (this.drawField) {
12841284
if (this.drawOption) {
12851285
const areaWithoutOption = this.drawField.areas?.find((a) => !a.option_uuid)
@@ -1374,7 +1374,7 @@ export default {
13741374
area.y -= area.h / 2
13751375
}
13761376
1377-
if (area.w) {
1377+
if (area.w && (type !== 'checkbox' || this.drawFieldType || !isTooSmall)) {
13781378
this.addField(type, area)
13791379
13801380
this.selectedAreaRef.value = area

app/javascript/template_builder/document.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
@drop-field="$emit('drop-field', {...$event, attachment_uuid: document.uuid })"
2424
@remove-area="$emit('remove-area', $event)"
2525
@scroll-to="scrollToArea"
26-
@draw="$emit('draw', {...$event, attachment_uuid: document.uuid })"
26+
@draw="$emit('draw', { area: {...$event.area, attachment_uuid: document.uuid }, isTooSmall: $event.isTooSmall })"
2727
/>
2828
</div>
2929
</template>

app/javascript/template_builder/page.vue

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,12 @@ export default {
290290
area.cell_w = this.newArea.cell_w
291291
}
292292
293-
this.$emit('draw', area)
293+
const dx = Math.abs(e.offsetX - this.$refs.mask.clientWidth * this.newArea.initialX)
294+
const dy = Math.abs(e.offsetY - this.$refs.mask.clientHeight * this.newArea.initialY)
295+
296+
const isTooSmall = dx < 8 && dy < 8
297+
298+
this.$emit('draw', { area, isTooSmall })
294299
}
295300
296301
this.showMask = false

app/mailers/application_mailer.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,22 @@ def default_url_options
2020
end
2121

2222
def set_message_metadata
23-
message.instance_variable_set(:@message_metadata, @message_metadata)
23+
message.instance_variable_set(:@message_metadata, @message_metadata || {})
2424
end
2525

2626
def set_message_uuid
2727
message['X-Message-Uuid'] = SecureRandom.uuid
2828
end
2929

3030
def assign_message_metadata(tag, record)
31-
@message_metadata = {
31+
@message_metadata = (@message_metadata || {}).merge(
3232
'tag' => tag,
3333
'record_id' => record.id,
3434
'record_type' => record.class.name
35-
}
35+
)
36+
end
37+
38+
def put_metadata(attrs)
39+
@message_metadata = (@message_metadata || {}).merge(attrs)
3640
end
3741
end

app/mailers/submitter_mailer.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,9 +233,17 @@ def add_attachments_with_size_limit(submitter, storage_attachments, current_size
233233
def from_address_for_submitter(submitter)
234234
if submitter.submission.source.in?(%w[api embed]) &&
235235
(from_email = AccountConfig.find_by(account: submitter.account, key: 'integration_from_email')&.value.presence)
236+
user = submitter.account.users.find_by(email: from_email)
237+
238+
put_metadata('from_user_id' => user.id)
239+
236240
from_email
237241
else
238-
(submitter.submission.created_by_user || submitter.submission.template.author).friendly_name
242+
user = submitter.submission.created_by_user || submitter.submission.template.author
243+
244+
put_metadata('from_user_id' => user.id)
245+
246+
user.friendly_name
239247
end
240248
end
241249
end

app/models/submission.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class Submission < ApplicationRecord
7171
.and(Submitter.arel_table[:completed_at].eq(nil))).select(1).arel.exists)
7272
}
7373
scope :declined, -> { joins(:submitters).where.not(submitters: { declined_at: nil }).group(:id) }
74-
scope :expired, -> { where(expire_at: ..Time.current) }
74+
scope :expired, -> { pending.where(expire_at: ..Time.current) }
7575

7676
enum :source, {
7777
invite: 'invite',

app/views/submissions_preview/completed.html.erb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@
2828
<%= f.hidden_field :submission_slug, value: @submission.slug %>
2929
<%= f.label :email, t('email'), class: 'label' %>
3030
<%= f.email_field :email, value: current_user&.email || params[:email], required: true, class: 'base-input', placeholder: t('send_copy_to_email') %>
31+
<% if params[:status] == 'error' %>
32+
<span class="label-text-alt text-red-400 mt-1">
33+
<%= t('please_enter_your_email_address_associated_with_the_completed_submission') %>
34+
</span>
35+
<% end %>
3136
</div>
3237
<toggle-submit dir="auto" class="form-control">
3338
<%= f.button button_title(title: t('send_copy_to_email'), disabled_with: t('starting')), class: 'base-button' %>

app/views/templates/_submission.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
<% submitter = submitters.first %>
3535
<div class="flex items-center space-x-4">
3636
<span class="flex flex-col md:flex-row md:items-center gap-3">
37-
<% if submission.expired? %>
37+
<% if submission.expired? && !submitter.completed_at? && !submitter.declined_at? %>
3838
<div class="tooltip flex" data-tip="<%= l(submission.expire_at.in_time_zone(current_account.timezone), format: :short, locale: current_account.locale) %>">
3939
<span class="badge badge-error md:w-32 bg-opacity-50 badge-lg uppercase text-sm font-semibold">
4040
<%= t('expired') %>

0 commit comments

Comments
 (0)