]> git.openstreetmap.org Git - osqa.git/blobdiff - forum/models/user.py
Fixes OSQA 276, Sidebar link to edit my subscriptions is wrong.
[osqa.git] / forum / models / user.py
index ff7bef1d2f011ede2e96f9b233598904e2b3f529..31f4e19a87bf5125d3307534e6a97f5c987b7546 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,21 @@ 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_cancel_wiki(self, post):\r
+        return False\r
+\r
     def can_retag_questions(self):\r
         return False\r
 \r
@@ -142,7 +150,7 @@ class User(BaseModel, DjangoUser):
         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
@@ -151,12 +159,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
@@ -205,6 +210,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
@@ -212,7 +220,15 @@ class User(BaseModel, DjangoUser):
     @true_if_is_super_or_staff\r
     def can_edit_post(self, post):\r
         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
+        ) or (post.nis.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_cancel_wiki(self, post):\r
+        return self == post.author\r
 \r
     @true_if_is_super_or_staff\r
     def can_retag_questions(self):\r
@@ -239,6 +255,11 @@ class User(BaseModel, DjangoUser):
     def can_upload_files(self):\r
         return self.reputation >= int(settings.REP_TO_UPLOAD)\r
 \r
+    def check_password(self, old_passwd):\r
+        self.__dict__.update(self.__class__.objects.filter(id=self.id).values('password')[0])\r
+        return DjangoUser.check_password(self, old_passwd)\r
+\r
+\r
     class Meta:\r
         app_label = 'forum'\r
 \r
@@ -248,10 +269,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