diff --git a/lib/tasks/posts.rake b/lib/tasks/posts.rake
index c5d7d5811a0..2f0b43f3347 100644
--- a/lib/tasks/posts.rake
+++ b/lib/tasks/posts.rake
@@ -471,7 +471,7 @@ def missing_uploads
missing[:post_uploads].each do |id, uploads|
post = Post.with_deleted.find_by(id: id)
if post
- puts "#{post.url} missing #{uploads.join(", ")}"
+ puts "#{post.full_url} missing #{uploads.join(", ")}"
else
puts "could not find post #{id}"
end
diff --git a/lib/tasks/uploads.rake b/lib/tasks/uploads.rake
index 1e23b83edde..9b035b306d9 100644
--- a/lib/tasks/uploads.rake
+++ b/lib/tasks/uploads.rake
@@ -918,16 +918,70 @@ def inline_uploads(post)
end
if replaced
- puts "Corrected image urls in #{post.url} raw backup stored in custom field"
+ puts "Corrected image urls in #{post.full_url} raw backup stored in custom field"
post.custom_fields["BACKUP_POST_RAW"] = original_raw
post.save_custom_fields
- post.save!
+ post.save!(validate: false)
post.rebake!
end
end
-task "uploads:fix_relative_upload_links" => :environment do
+def inline_img_tags(post)
+ replaced = false
+
+ original_raw = post.raw
+ post.raw = post.raw.gsub(/()/i) do
+ next if $2.include?("..")
+
+ upload = Upload.find_by(url: $2)
+ if !upload
+ data = Upload.extract_url($2)
+ if data && sha1 = data[2]
+ upload = Upload.find_by(sha1: sha1)
+ end
+ end
+ if !upload
+ local_file = File.join(Rails.root, "public", $2)
+ if File.exist?(local_file)
+ File.open(local_file) do |f|
+ upload = UploadCreator.new(f,"image").create_for(post.user_id)
+ end
+ end
+ end
+
+ if upload
+ replaced = true
+ "![image](#{upload.short_url})"
+ else
+ puts "skipping missing upload in #{post.full_url} #{$1}"
+ $1
+ end
+ end
+
+ if replaced
+ puts "Corrected image urls in #{post.full_url} raw backup stored in custom field"
+ post.custom_fields["BACKUP_POST_RAW"] = original_raw
+ post.save_custom_fields
+ post.save!(validate: false)
+ post.rebake!
+ end
+end
+
+def fix_relative_links
Post.where('raw like ?', '%](/uploads%').find_each do |post|
inline_uploads(post)
end
+ Post.where("raw ilike ?", '%%').find_each do |post|
+ inline_img_tags(post)
+ end
+end
+
+task "uploads:fix_relative_upload_links" => :environment do
+ if RailsMultisite::ConnectionManagement.current_db != "default"
+ fix_relative_links
+ else
+ RailsMultisite::ConnectionManagement.each_connection do
+ fix_relative_links
+ end
+ end
end