indexden is now optional
[oweals/karmaworld.git] / karmaworld / apps / users / models.py
index a2e549fbab950646f4814b0956940897b08cbe11..c34917582d5074a4cf0fee51884ac3e5fd18d377 100644 (file)
@@ -15,10 +15,21 @@ from karmaworld.apps.courses.models import School
 logger = logging.getLogger(__name__)
 
 
+class UserProfileManager(models.Manager):
+    """ Handle restoring data. """
+    def get_by_natural_key(self, user):
+        return self.get(user=user)
+
+
 class UserProfile(models.Model):
-    user      = models.OneToOneField(User)
+    user = models.OneToOneField(User)
+    thanked_notes = models.ManyToManyField('notes.Note', related_name='users_thanked', blank=True, null=True)
+    flagged_notes = models.ManyToManyField('notes.Note', related_name='users_flagged', blank=True, null=True)
+    flagged_courses = models.ManyToManyField('courses.Course', related_name='users_flagged', blank=True, null=True)
+    school = models.ForeignKey(School, blank=True, null=True)
 
-    school    = models.ForeignKey(School, blank=True, null=True)
+    def natural_key(self):
+        return (self.user,)
 
     def get_points(self):
         sum = 0
@@ -29,6 +40,12 @@ class UserProfile(models.Model):
 
         return sum
 
+    def get_id(self):
+        return self.user.id
+
+    def has_staff_status(self):
+        return self.user.is_staff
+
     NO_BADGE = 0
     PROSPECT = 1
     BEGINNER = 2
@@ -81,6 +98,12 @@ def give_email_confirm_karma(sender, **kwargs):
     GenericKarmaEvent.create_event(kwargs['email_address'].user, kwargs['email_address'].email, GenericKarmaEvent.EMAIL_CONFIRMED)
 
 
+class BaseKarmaEventManager(models.Manager):
+    """ Handle restoring data. """
+    def get_by_natural_key(self, points, user, timestamp):
+        return self.get(user=user, timestamp=timestamp)
+
+
 class BaseKarmaEvent(models.Model):
     points    = models.IntegerField()
     user      = models.ForeignKey(User)
@@ -88,6 +111,10 @@ class BaseKarmaEvent(models.Model):
 
     class Meta:
         abstract = True
+        unique_together = ('points', 'user', 'timestamp')
+
+    def natural_key(self):
+        return (self.user, self.timestamp)
 
     def get_message(self):
         raise NotImplemented()
@@ -138,6 +165,7 @@ class NoteKarmaEvent(BaseKarmaEvent):
     GET_FLAGGED  = 'get_flagged'
     DOWNLOADED_NOTE = 'downloaded'
     HAD_NOTE_DOWNLOADED = 'was_downloaded'
+    CREATED_KEYWORD = 'created_keyword'
 
     EVENT_TYPE_CHOICES = (
         (UPLOAD,       "You uploaded a note"),
@@ -147,6 +175,7 @@ class NoteKarmaEvent(BaseKarmaEvent):
         (GET_FLAGGED,  "Your note was flagged as spam"),
         (DOWNLOADED_NOTE,  "You downloaded a note"),
         (HAD_NOTE_DOWNLOADED,  "Your note was downloaded"),
+        (CREATED_KEYWORD,  "You created a keyword"),
     )
     note = models.ForeignKey('notes.Note')
     event_type = models.CharField(max_length=15, choices=EVENT_TYPE_CHOICES)
@@ -159,6 +188,7 @@ class NoteKarmaEvent(BaseKarmaEvent):
         GET_FLAGGED: -100,
         DOWNLOADED_NOTE: -2,
         HAD_NOTE_DOWNLOADED: 2,
+        CREATED_KEYWORD: 1,
     }
 
     def get_message(self):