Implement Awards to keep track of badge awards, and use notifications to send mail when badges are awarded
This commit is contained in:
@@ -2,3 +2,4 @@ import models
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
admin.site.register(models.Badge)
|
admin.site.register(models.Badge)
|
||||||
|
admin.site.register(models.Award)
|
||||||
|
@@ -1,9 +1,7 @@
|
|||||||
import models
|
import models
|
||||||
import django.dispatch
|
import django.dispatch
|
||||||
|
|
||||||
badge_awarded = django.dispatch.Signal(providing_args=["user",])
|
badge_awarded = django.dispatch.Signal(providing_args=["user", "badge"])
|
||||||
|
|
||||||
def award(user, badge):
|
def award(user, badge, reason=""):
|
||||||
user.badges += badge
|
models.Award.objects.create(badge=badge, user=user, reason=reason)
|
||||||
user.save()
|
|
||||||
badge_awarded.send_robust(sender=badge, user=user)
|
|
||||||
|
@@ -1,5 +1,7 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
import api
|
||||||
|
from notification import models as notification
|
||||||
|
|
||||||
def unique_slug(item,slug_source,slug_field):
|
def unique_slug(item,slug_source,slug_field):
|
||||||
"""Ensures a unique slug field by appending an integer counter to duplicate slugs.
|
"""Ensures a unique slug field by appending an integer counter to duplicate slugs.
|
||||||
@@ -32,7 +34,7 @@ class Badge(models.Model):
|
|||||||
name = models.TextField()
|
name = models.TextField()
|
||||||
description = models.TextField()
|
description = models.TextField()
|
||||||
slug = models.SlugField(blank=True)
|
slug = models.SlugField(blank=True)
|
||||||
users = models.ManyToManyField(User, related_name='badges')
|
users = models.ManyToManyField(User, related_name='badges', through='Award', blank=True)
|
||||||
secret = models.BooleanField(default=False)
|
secret = models.BooleanField(default=False)
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
@@ -41,3 +43,17 @@ class Badge(models.Model):
|
|||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
class Award(models.Model):
|
||||||
|
badge = models.ForeignKey(Badge)
|
||||||
|
user = models.ForeignKey(User, related_name='awards')
|
||||||
|
reason = models.TextField(blank=True)
|
||||||
|
timestamp = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
super(Award, self).save(*args, **kwargs)
|
||||||
|
api.badge_awarded.send_robust(sender=self, user=self.user, badge=self.badge)
|
||||||
|
notification.send([self.user], "badge_awarded", {"award": self})
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return "%s for %s"%(self.badge.__unicode__(), self.user.__unicode__())
|
||||||
|
Reference in New Issue
Block a user