summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2010-11-08 13:38:55 -0500
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2010-11-08 13:38:55 -0500
commitfa5104ed0d0a181f791c8c5d24b144fa6615ea51 (patch)
tree42a45c4dc2894c08c2865fd0a12b3b935afd9e00
parent96a7854e151235bbc553cf3ffa26cd2b21e32dfa (diff)
downloadaskbot-fa5104ed0d0a181f791c8c5d24b144fa6615ea51.tar.gz
askbot-fa5104ed0d0a181f791c8c5d24b144fa6615ea51.tar.bz2
askbot-fa5104ed0d0a181f791c8c5d24b144fa6615ea51.zip
fixed bugs in per-user response counts
-rwxr-xr-x.gitignore2
-rw-r--r--askbot/models/__init__.py14
-rw-r--r--askbot/models/meta.py5
-rw-r--r--askbot/models/user.py2
-rw-r--r--askbot/skins/default/templates/header.html2
-rw-r--r--askbot/tests/on_screen_notification_tests.py2
-rw-r--r--askbot/views/commands.py14
7 files changed, 29 insertions, 12 deletions
diff --git a/.gitignore b/.gitignore
index a9ff6eaf..98ff79a4 100755
--- a/.gitignore
+++ b/.gitignore
@@ -34,4 +34,4 @@ askbot/upfiles/*.gif
askbot/upfiles/*.png
askbot/skins/common/media/mathjax/
/jinja2
-*.tag.tz
+*.tar.tz
diff --git a/askbot/models/__init__.py b/askbot/models/__init__.py
index c0229ccf..ca3ff443 100644
--- a/askbot/models/__init__.py
+++ b/askbot/models/__init__.py
@@ -1383,10 +1383,19 @@ def user_decrement_response_count(user, amount=1):
user.seen_response_count += amount
if user.new_response_count >= amount:
user.new_response_count -= amount
- else:
+ user.clean_response_counts()
+
+def user_clean_response_counts(user):
+ ""
+ if user.new_response_count < 0:
user.new_response_count = 0
logging.critical(
- 'response count wanted to go below zero'
+ 'new response count wanted to go below zero for %s' % user.username
+ )
+ if user.seen_response_count < 0:
+ user.seen_response_count = 0
+ logging.critical(
+ 'seen response count wanted to go below zero form %s' % user.username
)
User.add_to_class('is_username_taken',classmethod(user_is_username_taken))
@@ -1417,6 +1426,7 @@ User.add_to_class('unfollow_question', user_unfollow_question)
User.add_to_class('is_following', user_is_following)
User.add_to_class('decrement_response_count', user_decrement_response_count)
User.add_to_class('increment_response_count', user_increment_response_count)
+User.add_to_class('clean_response_counts', user_clean_response_counts)
User.add_to_class('is_administrator', user_is_administrator)
User.add_to_class('is_moderator', user_is_moderator)
User.add_to_class('is_approved', user_is_approved)
diff --git a/askbot/models/meta.py b/askbot/models/meta.py
index 248979ae..19f537be 100644
--- a/askbot/models/meta.py
+++ b/askbot/models/meta.py
@@ -241,11 +241,12 @@ class Comment(base.MetaContent, base.UserContent):
#on these activities decrement response counter
#todo: implement a custom delete method on these
#all this should pack into Activity.responses.filter( somehow ).delete()
- response_activity_types = const.RESPONSE_ACTIVITY_TYPES_FOR_DISPLAY
+ activity_types = const.RESPONSE_ACTIVITY_TYPES_FOR_DISPLAY
+ activity_types += (const.TYPE_ACTIVITY_MENTION,)
activities = Activity.objects.filter(
content_type = comment_content_type,
object_id = comment_id,
- activity_type__in = response_activity_types
+ activity_type__in = activity_types
)
for activity in activities:
for user in activity.recipients.all():
diff --git a/askbot/models/user.py b/askbot/models/user.py
index fcf60639..bc943f5a 100644
--- a/askbot/models/user.py
+++ b/askbot/models/user.py
@@ -80,6 +80,8 @@ class ActivityManager(models.Manager):
if mentioned_whom:
assert(isinstance(mentioned_whom, User))
mention_activity.add_recipients([mentioned_whom])
+ mentioned_whom.increment_response_count()
+ mentioned_whom.save()
return mention_activity
diff --git a/askbot/skins/default/templates/header.html b/askbot/skins/default/templates/header.html
index 03e641e0..49771721 100644
--- a/askbot/skins/default/templates/header.html
+++ b/askbot/skins/default/templates/header.html
@@ -8,6 +8,8 @@
{% spaceless %}
{% if request.user.new_response_count > 0 or request.user.seen_response_count > 0 %}
<a class='ab-responses-envelope' href="{{request.user.get_absolute_url()}}?sort=inbox&section=forum">
+ new {{request.user.new_response_count}}
+ old {{request.user.seen_response_count}}
<img
alt="{% trans username=request.user.username %}responses for {{username}}{% endtrans %}"
{% if request.user.new_response_count > 0 %}
diff --git a/askbot/tests/on_screen_notification_tests.py b/askbot/tests/on_screen_notification_tests.py
index f8da736e..574f4e5e 100644
--- a/askbot/tests/on_screen_notification_tests.py
+++ b/askbot/tests/on_screen_notification_tests.py
@@ -205,7 +205,7 @@ class OnScreenUpdateNotificationTests(TestCase):
def post_mention_in_answer_then_edit_out(self):
pass
- def test_post_mention_in_question_comment_then_delete(self):
+ def test_post_mention_in_comments_then_delete(self):
self.reset_response_counts()
time.sleep(1)
timestamp = datetime.datetime.now()
diff --git a/askbot/views/commands.py b/askbot/views/commands.py
index 01487768..5fe80035 100644
--- a/askbot/views/commands.py
+++ b/askbot/views/commands.py
@@ -112,25 +112,24 @@ def manage_inbox(request):
if action_type == 'delete':
user.new_response_count -= new_memos.count()
user.seen_response_count -= seen_memos.count()
- assert(user.new_response_count >= 0)
- assert(user.seen_response_count >= 0)
+ user.clean_response_counts()
user.save()
memo_set.delete()
elif action_type == 'mark_new':
user.new_response_count += seen_memos.count()
user.seen_response_count -= seen_memos.count()
- assert(user.seen_response_count >= 0)
+ user.clean_response_counts()
user.save()
memo_set.update(status = models.ActivityAuditStatus.STATUS_NEW)
elif action_type == 'mark_seen':
user.new_response_count -= new_memos.count()
user.seen_response_count += new_memos.count()
- assert(user.new_response_count >= 0)
+ user.clean_response_counts()
user.save()
memo_set.update(status = models.ActivityAuditStatus.STATUS_SEEN)
else:
raise exceptions.PermissionDenied(
- _('Oops, sorry - there was some error - please try again')
+ _('Oops, apologies - there was some error')
)
response_data['success'] = True
data = simplejson.dumps(response_data)
@@ -145,7 +144,10 @@ def manage_inbox(request):
#todo: show error page but no-one is likely to get here
return HttpResponseRedirect(reverse('index'))
except Exception, e:
- response_data['message'] = unicode(e)
+ message = unicode(e)
+ if message == '':
+ message = _('Oops, apologies - there was some error')
+ response_data['message'] = message
response_data['success'] = False
data = simplejson.dumps(response_data)
return HttpResponse(data, mimetype="application/json")