Skip to content

Commit 6153957

Browse files
committed
added FixRejectedEditStatesTask to retroactively fix up broken rejected suggested edits
1 parent 2284c74 commit 6153957

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# frozen_string_literal: true
2+
3+
module Maintenance
4+
class FixRejectedEditStatesTask < MaintenanceTasks::Task
5+
include ApplicationHelper
6+
7+
def collection
8+
SuggestedEdit.rejected
9+
end
10+
11+
def last_revision_before_decided(edit)
12+
PostHistory.of_type('post_edited')
13+
.where(post: edit.post)
14+
.where(created_at: edit.post.created_at..edit.decided_at)
15+
.order(created_at: :desc)
16+
.first
17+
end
18+
19+
def initial_revision_before_decided(edit)
20+
PostHistory.of_type('initial_revision')
21+
.where(post: edit.post)
22+
.where(created_at: edit.post.created_at..edit.decided_at)
23+
.order(created_at: :desc)
24+
.first
25+
end
26+
27+
def valid_before_attributes?(edit)
28+
[
29+
:before_body,
30+
:before_body_markdown,
31+
:before_tags_cache,
32+
:before_title
33+
].all? do |attr|
34+
edit.send(attr).present?
35+
end
36+
end
37+
38+
def process(edit)
39+
return if valid_before_attributes?(edit)
40+
41+
last_revision = last_revision_before_decided(edit).presence || initial_revision_before_decided(edit)
42+
43+
return unless last_revision.present?
44+
45+
begin
46+
status = edit.update({ before_body: render_markdown(last_revision.after_state),
47+
before_body_markdown: last_revision.after_state,
48+
before_tags: last_revision.after_tags.dup,
49+
before_tags_cache: last_revision.after_tags.map(&:name),
50+
before_title: last_revision.after_title })
51+
52+
unless status
53+
Rails.logger.warn("Failed to fix edit ##{edit.id}")
54+
end
55+
rescue StandardError => e
56+
Rails.logger.warn(e)
57+
end
58+
end
59+
end
60+
end

0 commit comments

Comments
 (0)