]> git.openstreetmap.org Git - osqa.git/blobdiff - forum/models/user.py
Show wiki css fixes.
[osqa.git] / forum / models / user.py
index 53b5ee223a10b3ae1bc1ac7f8574a6bbb8facb05..a3714ae9c4212135b9bc871be6ebd7b2a7441f48 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,18 @@ 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_edit_post(self, post):\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
     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
     def delete_messages(self):\r
         self.message_set.all().delete()\r
 \r
+    @models.permalink\r
     def get_profile_url(self):\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
 \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
 \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
 \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
@@ -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_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
     @true_if_is_super_or_staff\r
     def can_accept_answer(self, answer):\r
         return self == answer.question.author\r
@@ -211,7 +217,11 @@ 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
     @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_retag_questions(self):\r
 \r
     @true_if_is_super_or_staff\r
     def can_retag_questions(self):\r
@@ -247,10 +257,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