mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: option to skip posts with ignored missing uploads
This commit is contained in:
parent
7c0cb59741
commit
87cd4701b8
@ -64,10 +64,12 @@ class Post < ActiveRecord::Base
|
|||||||
BROKEN_IMAGES ||= "broken_images".freeze
|
BROKEN_IMAGES ||= "broken_images".freeze
|
||||||
DOWNLOADED_IMAGES ||= "downloaded_images".freeze
|
DOWNLOADED_IMAGES ||= "downloaded_images".freeze
|
||||||
MISSING_UPLOADS ||= "missing uploads".freeze
|
MISSING_UPLOADS ||= "missing uploads".freeze
|
||||||
|
MISSING_UPLOADS_IGNORED ||= "missing uploads ignored".freeze
|
||||||
|
|
||||||
SHORT_POST_CHARS ||= 1200
|
SHORT_POST_CHARS ||= 1200
|
||||||
|
|
||||||
register_custom_field_type(MISSING_UPLOADS, :json)
|
register_custom_field_type(MISSING_UPLOADS, :json)
|
||||||
|
register_custom_field_type(MISSING_UPLOADS_IGNORED, :boolean)
|
||||||
|
|
||||||
scope :private_posts_for_user, ->(user) {
|
scope :private_posts_for_user, ->(user) {
|
||||||
where("posts.topic_id IN (SELECT topic_id
|
where("posts.topic_id IN (SELECT topic_id
|
||||||
@ -918,8 +920,13 @@ class Post < ActiveRecord::Base
|
|||||||
PostCustomField.where(name: Post::MISSING_UPLOADS).delete_all
|
PostCustomField.where(name: Post::MISSING_UPLOADS).delete_all
|
||||||
missing_uploads = []
|
missing_uploads = []
|
||||||
missing_post_uploads = {}
|
missing_post_uploads = {}
|
||||||
|
query = Post
|
||||||
|
.have_uploads
|
||||||
|
.joins("LEFT JOIN post_custom_fields ON posts.id = post_custom_fields.post_id AND post_custom_fields.name = '#{Post::MISSING_UPLOADS_IGNORED}'")
|
||||||
|
.where("post_custom_fields.id IS NULL")
|
||||||
|
.select(:id, :cooked)
|
||||||
|
|
||||||
Post.have_uploads.select(:id, :cooked).find_in_batches do |posts|
|
query.find_in_batches do |posts|
|
||||||
ids = posts.pluck(:id)
|
ids = posts.pluck(:id)
|
||||||
sha1s = Upload.joins(:post_uploads).where("post_uploads.post_id >= ? AND post_uploads.post_id <= ?", ids.min, ids.max).pluck(:sha1)
|
sha1s = Upload.joins(:post_uploads).where("post_uploads.post_id >= ? AND post_uploads.post_id <= ?", ids.min, ids.max).pluck(:sha1)
|
||||||
|
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
class AddMissingUploadsIgnoredIndexToPostCustomFields < ActiveRecord::Migration[5.2]
|
||||||
|
def change
|
||||||
|
add_index :post_custom_fields, :post_id, unique: true, where: "name = 'missing uploads ignored'", name: "index_post_id_where_missing_uploads_ignored"
|
||||||
|
end
|
||||||
|
end
|
@ -447,3 +447,7 @@ task 'posts:missing_uploads' => :environment do
|
|||||||
puts "#{missing[:post_uploads].count} of #{Post.count} posts are affected.", ""
|
puts "#{missing[:post_uploads].count} of #{Post.count} posts are affected.", ""
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
desc 'Finds missing post upload records from cooked HTML content'
|
||||||
|
task 'posts:missing_uploads' => :environment do
|
||||||
|
end
|
||||||
|
@ -70,5 +70,17 @@ RSpec.describe "Post rake tasks" do
|
|||||||
post.reload
|
post.reload
|
||||||
expect(post.custom_fields[Post::MISSING_UPLOADS]).to eq([url])
|
expect(post.custom_fields[Post::MISSING_UPLOADS]).to eq([url])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'should skip all the posts with "ignored" custom field' do
|
||||||
|
post = Fabricate(:post, raw: "A sample post <img src='#{url}'>")
|
||||||
|
post.custom_fields[Post::MISSING_UPLOADS_IGNORED] = true
|
||||||
|
post.save_custom_fields
|
||||||
|
upload.destroy!
|
||||||
|
|
||||||
|
Rake::Task['posts:missing_uploads'].invoke
|
||||||
|
|
||||||
|
post.reload
|
||||||
|
expect(post.custom_fields[Post::MISSING_UPLOADS]).to be_nil
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user