|
|
from django.shortcuts import render, get_object_or_404, redirect
|
|
|
|
|
|
from boards.views.base import BaseBoardView
|
|
|
from boards.views.mixins import DispatcherMixin
|
|
|
from boards.models.post import Post
|
|
|
from boards.models.tag import Tag
|
|
|
from boards.forms import AddTagForm, PlainErrorList
|
|
|
|
|
|
class PostAdminView(BaseBoardView, DispatcherMixin):
|
|
|
|
|
|
def get(self, request, post_id, form=None):
|
|
|
user = self._get_user(request)
|
|
|
if not user.is_moderator:
|
|
|
redirect('index')
|
|
|
|
|
|
post = get_object_or_404(Post, id=post_id)
|
|
|
|
|
|
if not form:
|
|
|
dispatch_result = self.dispatch_method(request, post)
|
|
|
if dispatch_result:
|
|
|
return dispatch_result
|
|
|
form = AddTagForm()
|
|
|
|
|
|
context = self.get_context_data(request=request)
|
|
|
|
|
|
context['post'] = post
|
|
|
|
|
|
context['tag_form'] = form
|
|
|
|
|
|
return render(request, 'boards/post_admin.html', context)
|
|
|
|
|
|
def post(self, request, post_id):
|
|
|
user = self._get_user(request)
|
|
|
if not user.is_moderator:
|
|
|
redirect('index')
|
|
|
|
|
|
post = get_object_or_404(Post, id=post_id)
|
|
|
return self.dispatch_method(request, post)
|
|
|
|
|
|
def delete_tag(self, request, post):
|
|
|
tag_name = request.GET['tag']
|
|
|
tag = get_object_or_404(Tag, name=tag_name)
|
|
|
|
|
|
post.remove_tag(tag)
|
|
|
|
|
|
return redirect('post_admin', post.id)
|
|
|
|
|
|
def add_tag(self, request, post):
|
|
|
form = AddTagForm(request.POST, error_class=PlainErrorList)
|
|
|
if form.is_valid():
|
|
|
tag_name = form.cleaned_data['tag']
|
|
|
tag, created = Tag.objects.get_or_create(name=tag_name)
|
|
|
|
|
|
post.add_tag(tag)
|
|
|
return redirect('post_admin', post.id)
|
|
|
else:
|
|
|
return self.get(request, post.id, form)
|
|
|
|