discourse/db/fixtures/006_badges.rb
Sam 0f9678fe49 FIX: faster update of all badges
Introduced badge triggers, introduced concept of badge that happens due to a post but has the post hidden

Delta badge grant happens once a minute, backed by redis
2014-07-23 11:46:07 +10:00

198 lines
5.2 KiB
Ruby

BadgeGrouping.seed do |g|
g.id = BadgeGrouping::GettingStarted
g.name = "Getting Started"
g.position = 10
end
BadgeGrouping.seed do |g|
g.id = BadgeGrouping::Community
g.name = "Community"
g.position = 11
end
BadgeGrouping.seed do |g|
g.id = BadgeGrouping::Posting
g.name = "Posting"
g.position = 12
end
BadgeGrouping.seed do |g|
g.id = BadgeGrouping::TrustLevel
g.name = "Trust Level"
g.position = 13
end
BadgeGrouping.seed do |g|
g.id = BadgeGrouping::Other
g.name = "Other"
g.position = 14
end
# BUGFIX
Badge.exec_sql 'UPDATE badges
SET badge_grouping_id = -1
WHERE NOT EXISTS (
SELECT 1 FROM badge_groupings g
WHERE g.id = badge_grouping_id
)'
# Trust level system badges.
trust_level_badges = [
{id: 1, name: "Basic User", type: BadgeType::Bronze},
{id: 2, name: "Regular User", type: BadgeType::Bronze},
{id: 3, name: "Leader", type: BadgeType::Silver},
{id: 4, name: "Elder", type: BadgeType::Gold}
]
trust_level_badges.each do |spec|
Badge.seed do |b|
b.id = spec[:id]
b.default_name = spec[:name]
b.badge_type_id = spec[:type]
b.query = Badge::Queries.trust_level(spec[:id])
b.default_badge_grouping_id = BadgeGrouping::TrustLevel
b.trigger = Badge::Trigger::TrustLevelChange
# allow title for leader and elder
b.allow_title = spec[:id] > 2
end
end
Badge.seed do |b|
b.id = Badge::Reader
b.default_name = "Reader"
b.badge_type_id = BadgeType::Bronze
b.multiple_grant = false
b.target_posts = false
b.show_posts = false
b.query = Badge::Queries::Reader
b.default_badge_grouping_id = BadgeGrouping::GettingStarted
b.auto_revoke = false
end
Badge.seed do |b|
b.id = Badge::ReadGuidelines
b.default_name = "Read Guidelines"
b.badge_type_id = BadgeType::Bronze
b.multiple_grant = false
b.target_posts = false
b.show_posts = false
b.query = Badge::Queries::ReadGuidelines
b.default_badge_grouping_id = BadgeGrouping::GettingStarted
b.trigger = Badge::Trigger::UserChange
end
Badge.seed do |b|
b.id = Badge::FirstLink
b.default_name = "First Link"
b.badge_type_id = BadgeType::Bronze
b.multiple_grant = false
b.target_posts = true
b.show_posts = true
b.query = Badge::Queries::FirstLink
b.default_badge_grouping_id = BadgeGrouping::GettingStarted
b.trigger = Badge::Trigger::PostRevision
end
Badge.seed do |b|
b.id = Badge::FirstQuote
b.default_name = "First Quote"
b.badge_type_id = BadgeType::Bronze
b.multiple_grant = false
b.target_posts = true
b.show_posts = true
b.query = Badge::Queries::FirstQuote
b.default_badge_grouping_id = BadgeGrouping::GettingStarted
b.trigger = Badge::Trigger::PostRevision
end
Badge.seed do |b|
b.id = Badge::FirstLike
b.default_name = "First Like"
b.badge_type_id = BadgeType::Bronze
b.multiple_grant = false
b.target_posts = true
b.show_posts = true
b.query = Badge::Queries::FirstLike
b.default_badge_grouping_id = BadgeGrouping::GettingStarted
b.trigger = Badge::Trigger::PostAction
end
Badge.seed do |b|
b.id = Badge::FirstFlag
b.default_name = "First Flag"
b.badge_type_id = BadgeType::Bronze
b.multiple_grant = false
b.target_posts = true
b.show_posts = false
b.query = Badge::Queries::FirstFlag
b.default_badge_grouping_id = BadgeGrouping::Community
b.trigger = Badge::Trigger::PostAction
end
Badge.seed do |b|
b.id = Badge::FirstShare
b.default_name = "First Share"
b.badge_type_id = BadgeType::Bronze
b.multiple_grant = false
b.target_posts = true
b.show_posts = true
b.query = Badge::Queries::FirstShare
b.default_badge_grouping_id = BadgeGrouping::GettingStarted
b.trigger = Badge::Trigger::PostRevision
end
Badge.seed do |b|
b.id = Badge::Welcome
b.default_name = "Welcome"
b.badge_type_id = BadgeType::Bronze
b.multiple_grant = false
b.target_posts = true
b.show_posts = true
b.query = Badge::Queries::Welcome
b.default_badge_grouping_id = BadgeGrouping::Community
b.trigger = Badge::Trigger::PostAction
end
Badge.seed do |b|
b.id = Badge::Autobiographer
b.default_name = "Autobiographer"
b.badge_type_id = BadgeType::Bronze
b.multiple_grant = false
b.query = Badge::Queries::Autobiographer
b.default_badge_grouping_id = BadgeGrouping::GettingStarted
b.trigger = Badge::Trigger::UserChange
end
Badge.seed do |b|
b.id = Badge::Editor
b.default_name = "Editor"
b.badge_type_id = BadgeType::Bronze
b.multiple_grant = false
b.query = Badge::Queries::Editor
b.default_badge_grouping_id = BadgeGrouping::Community
b.trigger = Badge::Trigger::PostRevision
end
#
# Like system badges.
like_badges = [
{id: 6, name: "Nice Post", type: BadgeType::Bronze, multiple: true},
{id: 7, name: "Good Post", type: BadgeType::Silver, multiple: true},
{id: 8, name: "Great Post", type: BadgeType::Gold, multiple: true}
]
like_badges.each do |spec|
Badge.seed do |b|
b.id = spec[:id]
b.default_name = spec[:name]
b.badge_type_id = spec[:type]
b.multiple_grant = spec[:multiple]
b.target_posts = true
b.show_posts = true
b.query = Badge::Queries.like_badge(Badge.like_badge_counts[spec[:id]])
b.default_badge_grouping_id = BadgeGrouping::Posting
b.trigger = Badge::Trigger::PostAction
end
end