mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FIX: UserAvatar#update_gravatar! does not update User#uploaded_avatar.
https://meta.discourse.org/t/missing-user-profile-pictures/93844/4
This commit is contained in:
23
app/jobs/onceoff/fix_out_of_sync_user_uploaded_avatar.rb
Normal file
23
app/jobs/onceoff/fix_out_of_sync_user_uploaded_avatar.rb
Normal file
@@ -0,0 +1,23 @@
|
||||
module Jobs
|
||||
class FixOutOfSyncUserUploadedAvatar < Jobs::Onceoff
|
||||
def execute_onceoff(args)
|
||||
DB.exec(<<~SQL)
|
||||
WITH X AS (
|
||||
SELECT
|
||||
u.id AS user_id,
|
||||
ua.gravatar_upload_id AS gravatar_upload_id
|
||||
FROM users u
|
||||
JOIN user_avatars ua ON ua.user_id = u.id
|
||||
LEFT JOIN uploads ON uploads.id = u.uploaded_avatar_id
|
||||
WHERE u.uploaded_avatar_id IS NOT NULL
|
||||
AND uploads.id IS NULL
|
||||
)
|
||||
UPDATE users
|
||||
SET uploaded_avatar_id = X.gravatar_upload_id
|
||||
FROM X
|
||||
WHERE users.id = X.user_id
|
||||
AND coalesce(uploaded_avatar_id,-1) <> coalesce(X.gravatar_upload_id,-1)
|
||||
SQL
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -42,10 +42,18 @@ class UserAvatar < ActiveRecord::Base
|
||||
type: "avatar"
|
||||
).create_for(user_id)
|
||||
|
||||
if gravatar_upload_id != upload.id
|
||||
gravatar_upload&.destroy!
|
||||
self.gravatar_upload = upload
|
||||
save!
|
||||
upload_id = upload.id
|
||||
|
||||
if gravatar_upload_id != upload_id
|
||||
User.transaction do
|
||||
if gravatar_upload_id && user.uploaded_avatar_id == gravatar_upload_id
|
||||
user.update!(uploaded_avatar_id: upload_id)
|
||||
end
|
||||
|
||||
gravatar_upload&.destroy!
|
||||
self.gravatar_upload = upload
|
||||
save!
|
||||
end
|
||||
end
|
||||
end
|
||||
rescue OpenURI::HTTPError
|
||||
|
||||
Reference in New Issue
Block a user