Exemple #1
0
class AyahsContributedBadge(Badge):
    """Number of Ayahs a user has contributed."""
    slug = "ayahs_contributed"
    levels = [
        BadgeDetail(name='10 Ayahs', description="Contributed 10 Ayahs."),
        BadgeDetail(name='50 Ayahs', description="Contributed 50 Ayahs."),
        BadgeDetail(name='100 Ayahs', description="Contributed 100 Ayahs."),
        BadgeDetail(name='500+ Ayahs', description="Contributed 500 Ayahs."),
    ]
    events = [
        "points_awarded",
    ]
    multiple = False

    def award(self, **state):
        user = state["user"]
        points = user.get_profile().ayah_points
        if points > 10:
            return BadgeAwarded(level=1)
        elif points > 50:
            return BadgeAwarded(level=2)
        elif points > 100:
            return BadgeAwarded(level=3)
        elif points > 500:
            return BadgeAwarded(level=4)
Exemple #2
0
class DaysBadge(Badge):
    """Number of consecutive days a user has logged in."""
    slug = "days"
    levels = [
        BadgeDetail(name='3 Days', description="Active for 3 days in a row."),
        BadgeDetail(name='1 Week', description="Active for 7 days in a row."),
        BadgeDetail(name='1 Month',
                    description="Active for 30 days in a row."),
        BadgeDetail(name='6 Month',
                    description="Active for 6 months in a row."),
        BadgeDetail(name='1 Year',
                    description="Active for 365 days in a row."),
    ]
    events = [
        "login",
    ]
    multiple = False

    def award(self, **state):
        user = state["user"]
        points = user.get_profile().login_points
        if points > 3:
            return BadgeAwarded(level=1)
        elif points > 7:
            return BadgeAwarded(level=2)
        elif points > 30:
            return BadgeAwarded(level=3)
        elif points > 180:
            return BadgeAwarded(level=4)
        elif points > 365:
            return BadgeAwarded(level=5)
Exemple #3
0
class PointsBadge(Badge):
    slug = "points"
    levels = [
        BadgeDetail(name='Bronze',
                    description='Awarded for completing at least 1 level.'),
        BadgeDetail(name='Silver',
                    description='Awarded for completing more than 5 levels.'),
        BadgeDetail(name='Gold',
                    description='Awarded for completing more than 15 levels.'),
        BadgeDetail(name='Silicon',
                    description='Awarded for completing more than 20 levels.'),
    ]
    events = [
        "points_awarded",
    ]
    multiple = False

    def award(self, **state):
        user = state["user"]
        points = user.profile.points
        if points > 20:
            return BadgeAwarded(level=4)
        elif points > 15:
            return BadgeAwarded(level=3)
        elif points > 5:
            return BadgeAwarded(level=2)
        elif points > 0:
            return BadgeAwarded(level=1)
Exemple #4
0
class OpinionatorBadge(Badge):
    slug = "opinionator_badge"
    levels = [
        BadgeDetail("opinionator_first_three_votes",
                    "User Voted First 3 Times"),
        BadgeDetail("opinionator_level_2", "User Voted 40 Times"),
        BadgeDetail("opinionator_level_3", "User Voted 80 Times"),
        BadgeDetail("opinionator_level_4", "User Voted 120 Times")
    ]

    events = [
        "vote_cast",
    ]
    multiple = False

    def award(self, **state):
        user = state["user"]
        vote_count = Vote.objects.filter(author=user).count()
        if vote_count >= 120:
            return BadgeAwarded(level=4)
        elif vote_count >= 80:
            return BadgeAwarded(level=3)
        elif vote_count >= 40:
            return BadgeAwarded(level=2)
        elif vote_count >= 3:
            return BadgeAwarded(level=1)
Exemple #5
0
 def __init__(self):
     # hoop jumping to ensure that BadgeAward objects pick up the correct name
     # and description
     self.levels = [
         BadgeDetail(name=self.name, description=self.description)
     ]
     super(Badge, self).__init__()
Exemple #6
0
class WarmHeartedBadage(Badge):
    slug = 'WarmHearted'
    levels = [BadgeDetail('热心参与奖章', '')]
    events = ['warm_hearted_awarded']
    multiple = False
    image_path = "badges/warm.png"

    def award(self, **state):
        # user = User.objects.get(username=state["user"])
        # if user.production_set.all().count() > 1:
        return BadgeAwarded(level=1)
Exemple #7
0
class ProductionNumberBadage(Badge):
    slug = 'ProductionNumber'
    levels = [BadgeDetail('首届编程周纪念章', '')]
    events = ['production_number_awarded']
    multiple = False
    image_path = "badges/badge.gif"

    def award(self, **state):
        # user = User.objects.get(username=state["user"])
        # if user.production_set.all().count() > 1:
        return BadgeAwarded(level=1)
Exemple #8
0
class UserCreatedBadge(Badge):
    slug = "user_created_badge"
    levels = [
        BadgeDetail("created", "Badge POVOQUER"),
    ]
    events = [
        "user_created",
    ]

    multiple = False

    def award(self, **state):
        return BadgeAwarded(level=1)
Exemple #9
0
class UserProfileFilledBadge(Badge):
    slug = "user_profile_created_badge"
    levels = [
        BadgeDetail("user_profile_filled", "User Profile Filled"),
    ]
    events = [
        "user_profile_filled",
    ]
    multiple = False

    def award(self, **state):
        user = state["user"]
        if user.profile_filled:
            return BadgeAwarded(level=1)
Exemple #10
0
class KnowItAllBadge(Badge):
    slug = "know_it_all_badge"
    levels = [
        BadgeDetail("know_it_all_level_1", "Know-it-all Level 1"),
        BadgeDetail("know_it_all_level_2", "Know-it-all Level 2"),
        BadgeDetail("know_it_all_level_3", "Know-it-all level 3"),
        BadgeDetail("know_it_all_level_4", "Know-it-all level 4"),
        BadgeDetail("know_it_all_level_5", "Know-it-all level 5"),
        BadgeDetail("know_it_all_level_6", "Know-it-all level 6"),
        BadgeDetail("know_it_all_level_7", "Know-it-all level 7"),
        BadgeDetail("know_it_all_level_8", "Know-it-all level 8"),
        BadgeDetail("know_it_all_level_9", "Know-it-all level 9"),
        BadgeDetail("know_it_all_level_10", "Know-it-all level 10"),
        BadgeDetail("know_it_all_level_11", "Know-it-all level 11"),
        BadgeDetail("know_it_all_level_12", "Know-it-all level 12"),
        BadgeDetail("know_it_all_level_13", "Know-it-all level 13"),
        BadgeDetail("know_it_all_level_14", "Know-it-all level 14"),
        BadgeDetail("know_it_all_level_15", "Know-it-all level 15"),
        BadgeDetail("know_it_all_level_16", "Know-it-all level 16"),
        BadgeDetail("know_it_all_level_17", "Know-it-all level 17"),
        BadgeDetail("know_it_all_level_18", "Know-it-all level 18"),
        BadgeDetail("know_it_all_level_19", "Know-it-all level 19"),
        BadgeDetail("know_it_all_level_20", "Know-it-all level 20"),
    ]
    events = [
        "vote_cast",
    ]
    multiple = False

    def award(self, **state):
        award_level = 0

        user = state["user"]
        votes_list = [
            Vote.objects.filter(comment__conversation=c, author=user).count()
            for c in Conversation.objects.all()
        ]

        # If the user has any number of votes in at least two conversations, give him the level 1
        if sum(i > 0 for i in votes_list) >= 2:
            award_level = 1

        # major_participations stores the number of conversations in wich the user voted 30 or more times
        major_participations = sum([i >= 30 for i in votes_list])
        award_level = award_level + major_participations

        # Ensure that you'll never award a level that is not set yet
        available_levels = len(KnowItAllBadge.levels)
        if award_level > available_levels:
            return BadgeAwarded(level=available_levels)

        return BadgeAwarded(level=award_level)