]> git.openstreetmap.org Git - osqa.git/blob - forum/templatetags/question_list_tags.py
Fixes OSQA-88 (Improve "hottest" functionality on front page), and makes some improve...
[osqa.git] / forum / templatetags / question_list_tags.py
1 from django import template\r
2 from django.utils.translation import ugettext as _\r
3 from django.utils.safestring import mark_safe\r
4 from forum.models import Tag, MarkedTag\r
5 from forum.templatetags import argument_parser\r
6 from forum import settings\r
7 \r
8 register = template.Library()\r
9 \r
10 class QuestionItemNode(template.Node):\r
11     template = template.loader.get_template('question_list/item.html')\r
12 \r
13     def __init__(self, question, options):\r
14         self.question = template.Variable(question)\r
15         self.options = options\r
16 \r
17     def render(self, context):\r
18         return self.template.render(template.Context({\r
19             'question': self.question.resolve(context),\r
20             'favorite_count': self.options.get('favorite_count', 'no') == 'yes',\r
21             'signature_type': self.options.get('signature_type', 'lite'),\r
22         }))\r
23 \r
24 @register.tag\r
25 def question_list_item(parser, token):\r
26     tokens = token.split_contents()[1:]\r
27     return QuestionItemNode(tokens[0], argument_parser(tokens[1:]))\r
28     \r
29 \r
30 @register.inclusion_tag('question_list/sort_tabs.html')\r
31 def question_sort_tabs(sort_context):\r
32     return sort_context\r
33 \r
34 @register.inclusion_tag('question_list/related_tags.html')\r
35 def question_list_related_tags(questions):\r
36     if len(questions):\r
37         tags = Tag.objects.filter(nodes__id__in=[q.id for q in questions]).distinct()\r
38 \r
39         if settings.LIMIT_RELATED_TAGS:\r
40             tags = tags[:settings.LIMIT_RELATED_TAGS]\r
41 \r
42         return {'tags': tags}\r
43     else:\r
44         return {'tags': False}\r
45 \r
46 @register.inclusion_tag('question_list/tag_selector.html', takes_context=True)\r
47 def tag_selector(context):\r
48     request = context['request']\r
49 \r
50     if request.user.is_authenticated():\r
51         pt = MarkedTag.objects.filter(user=request.user)\r
52         return {\r
53             "interesting_tag_names": pt.filter(reason='good').values_list('tag__name', flat=True),\r
54             'ignored_tag_names': pt.filter(reason='bad').values_list('tag__name', flat=True),\r
55             'user_authenticated': True,\r
56         }\r
57     else:\r
58         return {'user_authenticated': False}\r