mirror of
https://github.com/discourse/discourse.git
synced 2024-11-23 20:02:46 +08:00
FIX: The dates for retroactive anniversary badges were wrong
This commit is contained in:
parent
b99aedeccc
commit
dfe1174137
34
app/jobs/onceoff/fix_retro_anniversary.rb
Normal file
34
app/jobs/onceoff/fix_retro_anniversary.rb
Normal file
|
@ -0,0 +1,34 @@
|
|||
require_dependency 'jobs/scheduled/grant_anniversary_badges'
|
||||
|
||||
module Jobs
|
||||
|
||||
class FixRetroAnniversary < Jobs::Onceoff
|
||||
def execute_onceoff(args)
|
||||
return unless SiteSetting.enable_badges
|
||||
|
||||
users = User.exec_sql <<~SQL
|
||||
SELECT ub.user_id, MIN(granted_at) AS first_granted_at, COUNT(*)
|
||||
FROM user_badges AS ub
|
||||
WHERE ub.badge_id = #{Badge::Anniversary}
|
||||
GROUP BY ub.user_id
|
||||
HAVING COUNT(ub.id) > 1
|
||||
SQL
|
||||
|
||||
users.to_a.each do |u|
|
||||
first = Time.zone.parse(u['first_granted_at'])
|
||||
badges = UserBadge.where(
|
||||
"badge_id = ? AND user_id = ? AND granted_at > ?",
|
||||
Badge::Anniversary,
|
||||
u['user_id'],
|
||||
first
|
||||
).order('granted_at')
|
||||
|
||||
badges.each_with_index do |b, idx|
|
||||
award_date = (first + (idx + 1).years)
|
||||
UserBadge.where(id: b['id']).update_all(["granted_at = ?", award_date])
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user