annotate gpp/bio/badges.py @ 218:6dbb8faef085
Implement #86, add a front page expiration date to news stories.
author |
Brian Neal <bgneal@gmail.com> |
date |
Tue, 01 Jun 2010 05:16:40 +0000 |
parents |
b4305e18d3af |
children |
767cedc7d12a |
rev |
line source |
bgneal@204
|
1 """This module contains user profile badge-related functionality."""
|
bgneal@204
|
2
|
bgneal@204
|
3 from bio.models import Badge
|
bgneal@204
|
4 from bio.models import BadgeOwnership
|
bgneal@204
|
5
|
bgneal@204
|
6
|
bgneal@204
|
7 # Numeric ID's for badges that are awarded for user actions:
|
bgneal@204
|
8 (CONTRIBUTOR_PIN, CALENDAR_PIN, NEWS_PIN, LINK_PIN, DOWNLOAD_PIN,
|
bgneal@204
|
9 SECURITY_PIN) = range(6)
|
bgneal@204
|
10
|
bgneal@204
|
11
|
bgneal@204
|
12 def award_badge(badge_id, user):
|
bgneal@204
|
13 """This function awards the badge specified by badge_id
|
bgneal@204
|
14 to the given user. If the user already has the badge,
|
bgneal@204
|
15 the badge count is incremented by one.
|
bgneal@204
|
16 """
|
bgneal@204
|
17 import logging
|
bgneal@204
|
18 try:
|
bgneal@204
|
19 badge = Badge.objects.get(numeric_id=badge_id)
|
bgneal@204
|
20 except Badge.DoesNotExist:
|
bgneal@204
|
21 logging.error("Can't award badge with numeric_id = %d" % badge_id)
|
bgneal@204
|
22 return
|
bgneal@204
|
23
|
bgneal@204
|
24 profile = user.get_profile()
|
bgneal@204
|
25
|
bgneal@204
|
26 # Does the user already have badges of this type?
|
bgneal@204
|
27 try:
|
bgneal@204
|
28 bo = BadgeOwnership.objects.get(profile=profile, badge=badge)
|
bgneal@204
|
29 except BadgeOwnership.DoesNotExist:
|
bgneal@204
|
30 # No badge of this type, yet
|
bgneal@204
|
31 bo = BadgeOwnership(profile=profile, badge=badge, count=1)
|
bgneal@204
|
32 else:
|
bgneal@204
|
33 # Already have this badge
|
bgneal@204
|
34 bo.count += 1
|
bgneal@204
|
35 bo.save()
|