diff options
author | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2009-11-25 19:44:46 -0500 |
---|---|---|
committer | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2009-11-25 19:44:46 -0500 |
commit | ef13ff40fdb71b37a4a75056e02bb31b32fc58e4 (patch) | |
tree | 29886f27cedc81e3caa012992187bac20bae2460 /forum | |
parent | 37e2af9f9818ffdb64a354816579254e3f647bb7 (diff) | |
download | askbot-ef13ff40fdb71b37a4a75056e02bb31b32fc58e4.tar.gz askbot-ef13ff40fdb71b37a4a75056e02bb31b32fc58e4.tar.bz2 askbot-ef13ff40fdb71b37a4a75056e02bb31b32fc58e4.zip |
fixed user tag selection and count, link points to user authored questions/answers, fixed diff_date a little
Diffstat (limited to 'forum')
-rw-r--r-- | forum/templatetags/extra_tags.py | 2 | ||||
-rw-r--r-- | forum/urls.py | 2 | ||||
-rw-r--r-- | forum/views.py | 43 |
3 files changed, 35 insertions, 12 deletions
diff --git a/forum/templatetags/extra_tags.py b/forum/templatetags/extra_tags.py index 96dc9024..b2199284 100644 --- a/forum/templatetags/extra_tags.py +++ b/forum/templatetags/extra_tags.py @@ -251,7 +251,7 @@ def diff_date(date, limen=2): return _('2 days ago') elif days == 1: return _('yesterday') - elif minutes > 60: + elif minutes >= 60: return ungettext('%(hr)d hour ago','%(hr)d hours ago',hours) % {'hr':hours} else: return ungettext('%(min)d min ago','%(min)d mins ago',minutes) % {'min':minutes} diff --git a/forum/urls.py b/forum/urls.py index a08fe716..ee4f0992 100644 --- a/forum/urls.py +++ b/forum/urls.py @@ -50,7 +50,7 @@ urlpatterns = patterns('', #place general question item in the end of other operations url(r'^%s(?P<id>\d+)//*' % _('question/'), app.question, name='question'), url(r'^%s$' % _('tags/'), app.tags, name='tags'), - url(r'^%s(?P<tag>[^/]+)/$' % _('tags/'), app.tag), + url(r'^%s(?P<tag>[^/]+)/$' % _('tags/'), app.tag, name='tag_questions'), url(r'^%s$' % _('users/'),app.users, name='users'), url(r'^%s(?P<id>\d+)/$' % _('moderate-user/'), app.moderate_user, name='moderate_user'), url(r'^%s(?P<id>\d+)/%s$' % (_('users/'), _('edit/')), app.edit_user, name='edit_user'), diff --git a/forum/views.py b/forum/views.py index d9d87e02..53338dd3 100644 --- a/forum/views.py +++ b/forum/views.py @@ -169,6 +169,15 @@ def questions(request, tagname=None, unanswered=False): else: objects = Question.objects.get_questions(orderby) + author_name = None + if 'user' in request.GET: + try: + author_name = request.GET['user'] + u = User.objects.get(username=author_name) + objects = objects.filter(Q(author=u) | Q(answers__author=u)) + except User.DoesNotExist: + author_name = None + # RISK - inner join queries objects = objects.select_related(depth=1); objects_list = Paginator(objects, pagesize) @@ -181,6 +190,7 @@ def questions(request, tagname=None, unanswered=False): related_tags = None return render_to_response(template_file, { "questions" : questions, + "author_name" : author_name, "tab_id" : view_id, "questions_count" : objects_list.count, "tags" : related_tags, @@ -1221,28 +1231,40 @@ def user_stats(request, user_id, user_view): down_votes = Vote.objects.get_down_vote_count_from_user(user) votes_today = Vote.objects.get_votes_count_today_from_user(user) votes_total = VOTE_RULES['scope_votes_per_user_per_day'] - tags = user.created_tags.all().order_by('-used_count')[:50] - if settings.DJANGO_VERSION < 1.1: + + question_id_set = set(map(lambda v: v['id'], list(questions))) \ + | set(map(lambda v: v['id'], list(answered_questions))) + + user_tags = Tag.objects.filter(questions__id__in = question_id_set) + + try: + from django.db.models import Count awards = Award.objects.extra( - select={'id': 'badge.id', 'count': 'count(badge_id)', 'name':'badge.name', 'description': 'badge.description', 'type': 'badge.type'}, + select={'id': 'badge.id', 'name':'badge.name', 'description': 'badge.description', 'type': 'badge.type'}, tables=['award', 'badge'], order_by=['-awarded_at'], where=['user_id=%s AND badge_id=badge.id'], params=[user.id] - ).values('id', 'count', 'name', 'description', 'type') + ).values('id', 'name', 'description', 'type') total_awards = awards.count() - awards.query.group_by = ['badge_id'] - else: + awards = awards.annotate(count = Count('badge__id')) + user_tags = user_tags.annotate(user_tag_usage_count=Count('name')) + + except ImportError: awards = Award.objects.extra( - select={'id': 'badge.id', 'name':'badge.name', 'description': 'badge.description', 'type': 'badge.type'}, + select={'id': 'badge.id', 'count': 'count(badge_id)', 'name':'badge.name', 'description': 'badge.description', 'type': 'badge.type'}, tables=['award', 'badge'], order_by=['-awarded_at'], where=['user_id=%s AND badge_id=badge.id'], params=[user.id] - ).values('id', 'name', 'description', 'type') + ).values('id', 'count', 'name', 'description', 'type') total_awards = awards.count() - from django.db.models import Count - awards = awards.annotate(count = Count('badge__id')) + awards.query.group_by = ['badge_id'] + user_tags = user_tags.extra( + select={'user_tag_usage_count': 'COUNT(1)',}, + order_by=['-user_tag_usage_count'], + ) + user_tags.query.group_by = ['name'] if auth.can_moderate_users(request.user): moderate_user_form = ModerateUserForm(instance=user) @@ -1262,6 +1284,7 @@ def user_stats(request, user_id, user_view): "total_votes": up_votes + down_votes, "votes_today_left": votes_total-votes_today, "votes_total_per_day": votes_total, + "user_tags" : user_tags[:50], "tags" : tags, "awards": awards, "total_awards" : total_awards, |