diff --git a/app/jobs/base.rb b/app/jobs/base.rb index 2f0c65e32d9..cd0e35e74e0 100644 --- a/app/jobs/base.rb +++ b/app/jobs/base.rb @@ -262,5 +262,6 @@ module Jobs end end +Dir["#{Rails.root}/app/jobs/onceoff/*.rb"].each {|file| require_dependency file } Dir["#{Rails.root}/app/jobs/regular/*.rb"].each {|file| require_dependency file } Dir["#{Rails.root}/app/jobs/scheduled/*.rb"].each {|file| require_dependency file } diff --git a/app/jobs/onceoff/grant_emoji.rb b/app/jobs/onceoff/grant_emoji.rb new file mode 100644 index 00000000000..ea01e8802d4 --- /dev/null +++ b/app/jobs/onceoff/grant_emoji.rb @@ -0,0 +1,27 @@ +module Jobs + + class GrantEmoji < Jobs::Base + sidekiq_options retry: false + + def execute(args) + + to_award = {} + + Post.secured(Guardian.new).visible.public_posts.find_in_batches(batch_size: 5000) do |group| + group.each do |p| + doc = Nokogiri::HTML::fragment(p.cooked) + if (doc.css("img.emoji") - doc.css(".quote img")).size > 0 + to_award[p.user_id] ||= { post_id: p.id, created_at: p.created_at } + end + end + end + + badge = Badge.find(Badge::FirstEmoji) + to_award.each do |user_id, opts| + BadgeGranter.grant(badge, User.find(user_id), opts) + end + end + + end + +end diff --git a/app/services/badge_granter.rb b/app/services/badge_granter.rb index 6a89f2f431e..c61f11e8c86 100644 --- a/app/services/badge_granter.rb +++ b/app/services/badge_granter.rb @@ -32,7 +32,7 @@ class BadgeGranter user_badge = UserBadge.create!(badge: @badge, user: @user, granted_by: @granted_by, - granted_at: Time.now, + granted_at: @opts[:created_at] || Time.now, post_id: @post_id, seq: seq) diff --git a/db/migrate/20160407174541_schedule_emoji_grant.rb b/db/migrate/20160407174541_schedule_emoji_grant.rb new file mode 100644 index 00000000000..1e54f5be9e7 --- /dev/null +++ b/db/migrate/20160407174541_schedule_emoji_grant.rb @@ -0,0 +1,5 @@ +class ScheduleEmojiGrant < ActiveRecord::Migration + def up + Jobs.enqueue(:grant_emoji) + end +end