view gpp/bio/badges.py @ 375:fe1896e14c11

Fixing #184; fix typo in date template filter string that is causing the wrong date to be displayed on the max users online statistic.
author Brian Neal <bgneal@gmail.com>
date Tue, 08 Mar 2011 00:50:33 +0000 (2011-03-08)
parents 767cedc7d12a
children 47f4259ce511
line wrap: on
line source
"""This module contains user profile badge-related functionality."""
import logging

from bio.models import Badge
from bio.models import BadgeOwnership


# Numeric ID's for badges that are awarded for user actions:
(CONTRIBUTOR_PIN, CALENDAR_PIN, NEWS_PIN, LINK_PIN, DOWNLOAD_PIN,
        SECURITY_PIN) = range(6)


def award_badge(badge_id, user):
    """This function awards the badge specified by badge_id
    to the given user. If the user already has the badge,
    the badge count is incremented by one.
    """
    try:
        badge = Badge.objects.get(numeric_id=badge_id)
    except Badge.DoesNotExist:
        logging.error("Can't award badge with numeric_id = %d", badge_id)
        return

    profile = user.get_profile()

    # Does the user already have badges of this type?
    try:
        bo = BadgeOwnership.objects.get(profile=profile, badge=badge)
    except BadgeOwnership.DoesNotExist:
        # No badge of this type, yet
        bo = BadgeOwnership(profile=profile, badge=badge, count=1)
    else:
        # Already have this badge
        bo.count += 1
    bo.save()