##// END OF EJS Templates
Slightly changed and optimized tag thread counters
Slightly changed and optimized tag thread counters

File last commit:

r2087:1a07d841 default
r2087:1a07d841 default
Show More
tag_threads.py
135 lines | 4.3 KiB | text/x-python | PythonLexer
from django.shortcuts import get_object_or_404, redirect, get_list_or_404
from django.urls import reverse
from boards.abstracts.settingsmanager import get_settings_manager, \
SETTING_FAVORITE_TAGS, SETTING_HIDDEN_TAGS
from boards.models import Tag, TagAlias, Post
from boards.views.all_threads import AllThreadsView
from boards.views.mixins import DispatcherMixin, PARAMETER_METHOD
from boards.forms import ThreadForm, PlainErrorList
PARAM_HIDDEN_TAGS = 'hidden_tags'
PARAM_TAG = 'tag'
PARAM_IS_FAVORITE = 'is_favorite'
PARAM_IS_HIDDEN = 'is_hidden'
PARAM_RANDOM_IMAGE_POST = 'random_image_post'
PARAM_RELATED_TAGS = 'related_tags'
PARAM_THREAD_COUNT = 'tag_thread_count'
PARAM_THREAD_COUNT_ACTIVE = 'tag_thread_count_active'
PARAM_THREAD_COUNT_BUMPLIMIT = 'tag_thread_count_bumplimit'
PARAM_THREAD_COUNT_ARCHIVE = 'tag_thread_count_archive'
__author__ = 'neko259'
class TagView(AllThreadsView, DispatcherMixin):
tag_name = None
def get_threads(self):
tag_alias = get_object_or_404(TagAlias, name=self.tag_name)
tag = tag_alias.parent
hidden_tags = list(self.settings_manager.get_hidden_tags())
try:
hidden_tags.remove(tag)
except ValueError:
pass
return tag.get_threads().exclude(
tags__in=hidden_tags)
def get_context_data(self, **kwargs):
params = super(TagView, self).get_context_data(**kwargs)
settings_manager = get_settings_manager(kwargs['request'])
tag_alias = get_list_or_404(TagAlias, name=self.tag_name)[0]
tag = tag_alias.parent
params[PARAM_TAG] = tag
params[PARAM_IS_FAVORITE] = settings_manager.tag_is_fav(tag)
params[PARAM_IS_HIDDEN] = settings_manager.tag_is_hidden(tag)
params[PARAM_RANDOM_IMAGE_POST] = tag.get_random_image_post()
params[PARAM_RELATED_TAGS] = tag.get_related_tags()
active_count = tag.get_active_thread_count()
bumplimit_count = tag.get_bumplimit_thread_count()
archive_count = tag.get_archived_thread_count()
total_count = active_count + bumplimit_count + archive_count
params[PARAM_THREAD_COUNT_ACTIVE] = active_count
params[PARAM_THREAD_COUNT_BUMPLIMIT] = bumplimit_count
params[PARAM_THREAD_COUNT_ARCHIVE] = archive_count
params[PARAM_THREAD_COUNT] = total_count
return params
def get_reverse_url(self):
return reverse('tag', kwargs={'tag_name': self.tag_name})
def get(self, request, tag_name, form=None):
self.tag_name = tag_name
return super(TagView, self).get(request, form)
def post(self, request, tag_name):
self.tag_name = tag_name
if PARAMETER_METHOD in request.POST:
self.dispatch_method(request)
return redirect('tag', tag_name)
else:
form = ThreadForm(request.POST, request.FILES,
error_class=PlainErrorList,
session=request.session)
if form.is_valid():
return Post.objects.create_from_form(request, form, opening_post=None)
if form.need_to_ban:
# Ban user because he is suspected to be a bot
self._ban_current_user(request)
return self.get(request, tag_name, form)
def subscribe(self, request):
alias = get_object_or_404(TagAlias, name=self.tag_name)
tag = alias.parent
settings_manager = get_settings_manager(request)
settings_manager.add_fav_tag(tag)
def unsubscribe(self, request):
alias = get_object_or_404(TagAlias, name=self.tag_name)
tag = alias.parent
settings_manager = get_settings_manager(request)
settings_manager.del_fav_tag(tag)
def hide(self, request):
"""
Adds tag to user's hidden tags. Threads with this tag will not be
shown.
"""
alias = get_object_or_404(TagAlias, name=self.tag_name)
tag = alias.parent
settings_manager = get_settings_manager(request)
settings_manager.add_hidden_tag(tag)
def unhide(self, request):
"""
Removed tag from user's hidden tags.
"""
alias = get_object_or_404(TagAlias, name=self.tag_name)
tag = alias.parent
settings_manager = get_settings_manager(request)
settings_manager.del_hidden_tag(tag)