##// END OF EJS Templates
Unify thread and post creation into one method inside post manager, that can be called from almost anywhere (one step closer to ajax thread creation)
Unify thread and post creation into one method inside post manager, that can be called from almost anywhere (one step closer to ajax thread creation)

File last commit:

r1997:be673d04 default
r1997:be673d04 default
Show More
tag_threads.py
124 lines | 3.8 KiB | text/x-python | PythonLexer
from django.shortcuts import get_object_or_404, redirect
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'
__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 = 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_object_or_404(TagAlias, name=self.tag_name)
tag = tag_alias.parent
params[PARAM_TAG] = tag
fav_tag_names = settings_manager.get_setting(SETTING_FAVORITE_TAGS)
hidden_tag_names = settings_manager.get_setting(SETTING_HIDDEN_TAGS)
params[PARAM_IS_FAVORITE] = fav_tag_names is not None and tag.get_name() in fav_tag_names
params[PARAM_IS_HIDDEN] = hidden_tag_names is not None and tag.get_name() in hidden_tag_names
params[PARAM_RANDOM_IMAGE_POST] = tag.get_random_image_post()
params[PARAM_RELATED_TAGS] = tag.get_related_tags()
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)
form.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)