]> git.openstreetmap.org Git - osqa.git/blobdiff - forum/models/user.py
make the question page header be an h1 instead of just an A tag
[osqa.git] / forum / models / user.py
index ff7bef1d2f011ede2e96f9b233598904e2b3f529..62eeac3aeb6fc9d6d1c3dae21b1f0b05356cdb1a 100644 (file)
@@ -1,5 +1,4 @@
 from base import *\r
 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
 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
 \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
 \r
     def can_view_deleted_post(self, post):\r
         return False\r
@@ -56,12 +55,24 @@ class AnonymousUser(DjangoAnonymousUser):
     def can_delete_comment(self, comment):\r
         return False\r
 \r
     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_accept_answer(self, answer):\r
         return False\r
 \r
+    def can_create_tags(self):\r
+        return False\r
+\r
     def can_edit_post(self, post):\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
     def can_retag_questions(self):\r
         return False\r
 \r
@@ -142,7 +153,7 @@ class User(BaseModel, DjangoUser):
         return mark_safe(profile_link)\r
 \r
     def get_visible_answers(self, question):\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
 \r
     def get_vote_count_today(self):\r
         today = datetime.date.today()\r
@@ -151,12 +162,9 @@ class User(BaseModel, DjangoUser):
 \r
     def get_reputation_by_upvoted_today(self):\r
         today = datetime.datetime.now()\r
 \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
         return 0\r
 \r
     def get_flagged_items_count_today(self):\r
@@ -205,14 +213,29 @@ 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_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
 \r
     @true_if_is_super_or_staff\r
     def can_accept_answer(self, answer):\r
         return self == answer.question.author\r
 \r
+    @true_if_is_super_or_staff\r
+    def can_create_tags(self):\r
+        return self.reputation >= int(settings.REP_TO_CREATE_TAGS)\r
+\r
     @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
     @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
 \r
     @true_if_is_super_or_staff\r
     def can_retag_questions(self):\r
@@ -239,6 +262,11 @@ class User(BaseModel, DjangoUser):
     def can_upload_files(self):\r
         return self.reputation >= int(settings.REP_TO_UPLOAD)\r
 \r
     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
     class Meta:\r
         app_label = 'forum'\r
 \r
@@ -248,10 +276,10 @@ class SubscriptionSettings(models.Model):
     enable_notifications = models.BooleanField(default=True)\r
 \r
     #notify if\r
     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
     \r
     #auto_subscribe_to\r
     all_questions = models.BooleanField(default=False)\r