]> git.openstreetmap.org Git - osqa.git/blobdiff - forum/models/user.py
Added a direct option to mark a post as community wiki, still needs some sort of...
[osqa.git] / forum / models / user.py
index 53b5ee223a10b3ae1bc1ac7f8574a6bbb8facb05..cddfe35c3388fb9134ec65330b697583a4c60263 100644 (file)
@@ -1,5 +1,4 @@
 from base import *\r
-from forum import const\r
 from django.contrib.contenttypes.models import ContentType\r
 from django.contrib.auth.models import User as DjangoUser, AnonymousUser as DjangoAnonymousUser\r
 from django.db.models import Q\r
@@ -27,7 +26,7 @@ class UserManager(CachedManager):
 \r
 class AnonymousUser(DjangoAnonymousUser):\r
     def get_visible_answers(self, question):\r
-        return question.answers.filter(deleted=None)\r
+        return question.answers.filter_state(deleted=False)\r
 \r
     def can_view_deleted_post(self, post):\r
         return False\r
@@ -56,12 +55,18 @@ class AnonymousUser(DjangoAnonymousUser):
     def can_delete_comment(self, comment):\r
         return False\r
 \r
+    def can_convert_to_comment(self, answer):\r
+        return False\r
+\r
     def can_accept_answer(self, answer):\r
         return False\r
 \r
     def can_edit_post(self, post):\r
         return False\r
 \r
+    def can_wikify(self, post):\r
+        return False\r
+\r
     def can_retag_questions(self):\r
         return False\r
 \r
@@ -133,15 +138,16 @@ class User(BaseModel, DjangoUser):
     def delete_messages(self):\r
         self.message_set.all().delete()\r
 \r
+    @models.permalink\r
     def get_profile_url(self):\r
-        return "/%s%d/%s" % (_('users/'), self.id, slugify(self.username))\r
+        return ('user_profile', (), {'id': self.id, 'slug': slugify(self.username)})\r
 \r
     def get_profile_link(self):\r
         profile_link = u'<a href="%s">%s</a>' % (self.get_profile_url(),self.username)\r
         return mark_safe(profile_link)\r
 \r
     def get_visible_answers(self, question):\r
-        return question.answers.filter(deleted=None, in_moderation=None)\r
+        return question.answers.filter_state(deleted=False)\r
 \r
     def get_vote_count_today(self):\r
         today = datetime.date.today()\r
@@ -150,12 +156,9 @@ class User(BaseModel, DjangoUser):
 \r
     def get_reputation_by_upvoted_today(self):\r
         today = datetime.datetime.now()\r
-        sum = self.reputes.filter(\r
-                models.Q(reputation_type=TYPE_REPUTATION_GAIN_BY_UPVOTED) |\r
-                models.Q(reputation_type=TYPE_REPUTATION_LOST_BY_UPVOTE_CANCELED),\r
-                reputed_at__range=(today - datetime.timedelta(days=1), today)).aggregate(models.Sum('value'))\r
-\r
-        if sum.get('value__sum', None) is not None: return sum['value__sum']\r
+        sum = self.reputes.filter(reputed_at__range=(today - datetime.timedelta(days=1), today)).aggregate(models.Sum('value'))\r
+        #todo: redo this, maybe transform in the daily cap\r
+        #if sum.get('value__sum', None) is not None: return sum['value__sum']\r
         return 0\r
 \r
     def get_flagged_items_count_today(self):\r
@@ -204,6 +207,9 @@ class User(BaseModel, DjangoUser):
     def can_delete_comment(self, comment):\r
         return self == comment.author or self.reputation >= int(settings.REP_TO_DELETE_COMMENTS)\r
 \r
+    def can_convert_to_comment(self, answer):\r
+        return (not answer.marked) and (self.is_superuser or self.is_staff or answer.author == self or self.reputation >= int(settings.REP_TO_CONVERT_TO_COMMENT))\r
+\r
     @true_if_is_super_or_staff\r
     def can_accept_answer(self, answer):\r
         return self == answer.question.author\r
@@ -213,6 +219,10 @@ class User(BaseModel, DjangoUser):
         return self == post.author or self.reputation >= int(settings.REP_TO_EDIT_OTHERS\r
         ) or (post.wiki and self.reputation >= int(settings.REP_TO_EDIT_WIKI))\r
 \r
+    @true_if_is_super_or_staff\r
+    def can_wikify(self, post):\r
+        return self == post.author or self.reputation >= int(settings.REP_TO_WIKIFY)\r
+\r
     @true_if_is_super_or_staff\r
     def can_retag_questions(self):\r
         return self.reputation >= int(settings.REP_TO_RETAG)\r
@@ -247,10 +257,10 @@ class SubscriptionSettings(models.Model):
     enable_notifications = models.BooleanField(default=True)\r
 \r
     #notify if\r
-    member_joins = models.CharField(max_length=1, default='n', choices=const.NOTIFICATION_CHOICES)\r
-    new_question = models.CharField(max_length=1, default='d', choices=const.NOTIFICATION_CHOICES)\r
-    new_question_watched_tags = models.CharField(max_length=1, default='i', choices=const.NOTIFICATION_CHOICES)\r
-    subscribed_questions = models.CharField(max_length=1, default='i', choices=const.NOTIFICATION_CHOICES)\r
+    member_joins = models.CharField(max_length=1, default='n')\r
+    new_question = models.CharField(max_length=1, default='d')\r
+    new_question_watched_tags = models.CharField(max_length=1, default='i')\r
+    subscribed_questions = models.CharField(max_length=1, default='i')\r
     \r
     #auto_subscribe_to\r
     all_questions = models.BooleanField(default=False)\r