Skip to content

Commit 026fe56

Browse files
authored
Flag manually remediated work versions/files (#1880)
* Changed auto_remediated_version fields to just remediated_version to be more general since we could havea uto remediation or manual remediation. We still have job_uuids and auto remediation timestamps to differentiate the two. Also, adds rake task to flag work versions and file resources that have already been manually remediated * Adds checkbox to publish form for admins to toggle remediated version on and off. Adds a method to work version to mirror this selection to remediatable linked files * Translate text in view * Removed some more 'auto_remediated' references. Fixed some tests * refactored some things and fixed some tests * Change db migration to ensure remediated_version in work_versions is never null and defaulted to false * Tests and moved mirror call to a better location * This is actually the best spot for the mirror method * Bugfix * Fix tests * Filter down to pdfs in flagging script. Adds tests * Adds tests for publishing work version as admin/non-admin and logic around updating remediated_version in work version and file resource * Adds tests for publishing work version as admin/non-admin and logic around updating remediated_version in work version and file resource * fixed test
1 parent 99764de commit 026fe56

File tree

24 files changed

+372
-77
lines changed

24 files changed

+372
-77
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public/uploads-test
2222

2323
/public/assets
2424
.byebug_history
25+
.config/
2526

2627
# Ignore master key for decrypting credentials and more.
2728
/config/master.key

app/controllers/dashboard/form/publish_controller.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ def update
5353
if @resource.mint_doi_requested
5454
deposit_pathway.allows_mint_doi_request? ? MintDoiAsync.call(@resource.work) : flash[:error] = t('dashboard.form.publish.doi.error')
5555
end
56+
@resource.mirror_remediated_version_to_files! if validation_context.nil?
5657
end
5758
end
5859

@@ -135,6 +136,7 @@ def work_version_params
135136
:sensitive_info_agreement,
136137
:accessibility_remediation_requested,
137138
:mint_doi_requested,
139+
:remediated_version,
138140
keyword: [],
139141
contributor: [],
140142
publisher: [],

app/forms/work_deposit_pathway.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ class WorkVersionFormBase
138138
accessibility_agreement
139139
sensitive_info_agreement
140140
contributor
141+
remediated_version
141142
}.freeze
142143

143144
def initialize(work_version)
@@ -260,6 +261,9 @@ def validate_creator_names
260261

261262
class PublishFormBase < WorkVersionFormBase
262263
include WorkVersionDetails
264+
265+
delegate :mirror_remediated_version_to_files!,
266+
to: :work_version
263267
end
264268

265269
module General
@@ -618,7 +622,7 @@ def form_partial
618622
end
619623
end
620624

621-
class PublishForm < WorkVersionFormBase
625+
class PublishForm < PublishFormBase
622626
REQUIRE_FIELDS.each { |f| validates f.to_sym, presence: true }
623627

624628
def self.form_fields

app/models/file_resource.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class FileResource < ApplicationRecord
3333
}
3434

3535
scope :can_remediate, -> {
36-
is_pdf.where('auto_remediated_version IS NULL OR auto_remediated_version = ?', false)
36+
is_pdf.where('remediated_version IS NULL OR remediated_version = ?', false)
3737
}
3838

3939
scope :needs_accessibility_check, -> {
@@ -104,7 +104,7 @@ def image?
104104
end
105105

106106
def can_remediate?
107-
file.mime_type == PDF_MIME_TYPE && !auto_remediated_version
107+
file.mime_type == PDF_MIME_TYPE && !remediated_version
108108
end
109109

110110
def latest_remediation_work_version_candidate
@@ -114,8 +114,8 @@ def latest_remediation_work_version_candidate
114114
.last
115115
end
116116

117-
def first_auto_remediated_work_version_after(version)
118-
work_versions.where('work_versions.id > ? AND auto_remediated_version = ?', version.id, true)
117+
def first_remediated_work_version_after(version)
118+
work_versions.where('work_versions.id > ? AND remediated_version = ?', version.id, true)
119119
.order(:id)
120120
.first
121121
end

app/models/work_version.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,13 @@ def has_large_pdf_file_resource?
398398
end
399399

400400
def has_remaining_auto_remediation_jobs?
401-
file_resources.exists?(['remediation_job_uuid IS NOT NULL AND auto_remediated_version = ?', false])
401+
file_resources.exists?(['remediation_job_uuid IS NOT NULL AND remediated_version = ?', false])
402+
end
403+
404+
def mirror_remediated_version_to_files!
405+
file_resources.is_pdf.find_each do |file_resource|
406+
file_resource.update!(remediated_version: remediated_version)
407+
end
402408
end
403409

404410
delegate :deposited_at,

app/services/pdf_remediation/auto_remediate_service.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def able_to_auto_remediate?
2424

2525
work_version.latest_published_version? &&
2626
work_version.auto_remediation_started_at.nil? &&
27-
!work_version.auto_remediated_version &&
27+
!work_version.remediated_version &&
2828
download_can_remediate &&
2929
!admin &&
3030
!work_version.work.under_manual_review

app/services/pdf_remediation/build_auto_remediated_work_version.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@ def self.call(file_resource, remediated_file_url)
1111
# In the rare case a new work version is published after the remediation
1212
# job started, we stop the creation of a new remediated version here.
1313
unless wv_being_remediated.latest_published_version?
14-
file_resource.first_auto_remediated_work_version_after(wv_being_remediated)&.destroy!
14+
file_resource.first_remediated_work_version_after(wv_being_remediated)&.destroy!
1515
raise NotNewestReleaseError, 'A newer published version exists. A remediated version will not be created.'
1616
end
1717

1818
PaperTrail.request(whodunnit: ExternalApp.pdf_accessibility_api.to_global_id.to_s) do
1919
ActiveRecord::Base.transaction do
20-
built_work_version = file_resource.first_auto_remediated_work_version_after(wv_being_remediated) ||
20+
built_work_version = file_resource.first_remediated_work_version_after(wv_being_remediated) ||
2121
begin
2222
v = BuildNewWorkVersion.call(wv_being_remediated)
23-
v.update({ auto_remediated_version: true,
23+
v.update({ remediated_version: true,
2424
external_app: ExternalApp.pdf_accessibility_api })
2525
v
2626
end
@@ -46,7 +46,7 @@ def self.call(file_resource, remediated_file_url)
4646
private_class_method def self.build_file_resource(work_version, replacement_tempfile, original_filename)
4747
new_resource = work_version.file_resources.create!(
4848
file: replacement_tempfile,
49-
auto_remediated_version: true
49+
remediated_version: true
5050
)
5151

5252
new_resource.file_data['metadata']['filename'] = "ACCESSIBLE_VERSION_#{original_filename}"

app/views/dashboard/form/publish/_fields.html.erb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,7 @@
4646
<% end %>
4747
</div>
4848
<% end %>
49+
50+
<% if current_user.admin? %>
51+
<%= render 'remediated_version', form: form %>
52+
<% end %>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<div class="form-wrapper">
2+
<div class="mb-3 mt-5">
3+
<div class="keyline keyline--left mb-3">
4+
<h4><%= t 'dashboard.form.publish.remediated_version.header' %></h4>
5+
</div>
6+
</div>
7+
8+
<div class="form-check">
9+
<%= form.check_box :remediated_version,
10+
class: 'form-check-input' %>
11+
12+
<%= form.label :remediated_version, class: 'form-check-label' do %>
13+
<%= t 'dashboard.form.publish.remediated_version.label' %>
14+
<% end %>
15+
</div>
16+
</div>

config/locales/en.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -600,6 +600,9 @@ en:
600600
auto_doi:
601601
header: DOI
602602
message: Upon publication, a DOI will be minted for the work.
603+
remediated_version:
604+
header: Remediated Version
605+
label: This version is a remediated (accessible) version
603606
members:
604607
heading: Works
605608
badge: Work

0 commit comments

Comments
 (0)