mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: badges for inviting users
First invite = Promoter 3 TL2 = Campaigner 10 TL3 = Champion
This commit is contained in:
parent
cb09c0d7a5
commit
2955507a57
@ -21,6 +21,10 @@ class Badge < ActiveRecord::Base
|
|||||||
GreatShare = 23
|
GreatShare = 23
|
||||||
OneYearAnniversary = 24
|
OneYearAnniversary = 24
|
||||||
|
|
||||||
|
Promoter = 25
|
||||||
|
Campaigner = 26
|
||||||
|
Champion = 27
|
||||||
|
|
||||||
# other consts
|
# other consts
|
||||||
AutobiographerMinBioLength = 10
|
AutobiographerMinBioLength = 10
|
||||||
|
|
||||||
@ -189,6 +193,22 @@ SQL
|
|||||||
HAVING COUNT(p.id) > 0
|
HAVING COUNT(p.id) > 0
|
||||||
SQL
|
SQL
|
||||||
|
|
||||||
|
def self.invite_badge(count,trust_level)
|
||||||
|
"
|
||||||
|
SELECT u.id user_id, current_timestamp granted_at
|
||||||
|
FROM users u
|
||||||
|
WHERE u.id IN (
|
||||||
|
SELECT invited_by_id
|
||||||
|
FROM invites i
|
||||||
|
JOIN users u2 ON u2.id = i.user_id
|
||||||
|
WHERE i.deleted_at IS NULL AND u2.active AND u2.trust_level >= #{trust_level.to_i} AND not u2.blocked
|
||||||
|
GROUP BY invited_by_id
|
||||||
|
HAVING COUNT(*) > #{count.to_i}
|
||||||
|
) AND u.active AND NOT u.blocked AND u.id > 0 AND
|
||||||
|
(:backfill OR u.id IN (:user_ids) )
|
||||||
|
"
|
||||||
|
end
|
||||||
|
|
||||||
def self.like_badge(count, is_topic)
|
def self.like_badge(count, is_topic)
|
||||||
# we can do better with dates, but its hard work
|
# we can do better with dates, but its hard work
|
||||||
"
|
"
|
||||||
|
@ -2521,6 +2521,15 @@ en:
|
|||||||
first_flag:
|
first_flag:
|
||||||
name: First Flag
|
name: First Flag
|
||||||
description: Flagged a post
|
description: Flagged a post
|
||||||
|
promoter:
|
||||||
|
name: Promoter
|
||||||
|
description: Invited a user
|
||||||
|
campaigner:
|
||||||
|
name: Campaigner
|
||||||
|
description: Invited 3 members
|
||||||
|
champion:
|
||||||
|
name: Champion
|
||||||
|
description: Invited 10 members
|
||||||
first_share:
|
first_share:
|
||||||
name: First Share
|
name: First Share
|
||||||
description: Shared a post
|
description: Shared a post
|
||||||
|
@ -140,6 +140,29 @@ Badge.seed do |b|
|
|||||||
b.system = true
|
b.system = true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
[
|
||||||
|
[Badge::Promoter,"Promoter",BadgeType::Bronze,1,0],
|
||||||
|
[Badge::Campaigner,"Campaigner",BadgeType::Silver,3,2],
|
||||||
|
[Badge::Champion,"Champion",BadgeType::Gold,10,2],
|
||||||
|
].each do |id, name, type, count, trust_level|
|
||||||
|
Badge.seed do |b|
|
||||||
|
b.id = id
|
||||||
|
b.default_name = name
|
||||||
|
b.default_icon = "fa-user-plus"
|
||||||
|
b.badge_type_id = type
|
||||||
|
b.multiple_grant = false
|
||||||
|
b.target_posts = false
|
||||||
|
b.show_posts = false
|
||||||
|
b.query = Badge::Queries.invite_badge(count,trust_level)
|
||||||
|
b.default_badge_grouping_id = BadgeGrouping::Community
|
||||||
|
# daily is good enough
|
||||||
|
b.trigger = Badge::Trigger::None
|
||||||
|
b.auto_revoke = true
|
||||||
|
b.system = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
Badge.seed do |b|
|
Badge.seed do |b|
|
||||||
b.id = Badge::FirstShare
|
b.id = Badge::FirstShare
|
||||||
b.default_name = "First Share"
|
b.default_name = "First Share"
|
||||||
|
Loading…
Reference in New Issue
Block a user