diff --git a/boards/urls.py b/boards/urls.py --- a/boards/urls.py +++ b/boards/urls.py @@ -5,6 +5,7 @@ from boards.views import api, tag_thread login, settings, all_tags from boards.views.authors import AuthorsView from boards.views.delete_post import DeletePostView +from boards.views.ban import BanUserView js_info_dict = { 'packages': ('boards',), @@ -52,7 +53,7 @@ urlpatterns = patterns('', url(r'^authors/$', AuthorsView.as_view(), name='authors'), url(r'^delete/(?P\w+)/$', DeletePostView.as_view(), name='delete'), - url(r'^ban/(?P\w+)/$', views.ban, name='ban'), + url(r'^ban/(?P\w+)/$', BanUserView.as_view(), name='ban'), url(r'^banned/$', views.banned.BannedView.as_view(), name='banned'), url(r'^staticpage/(?P\w+)/$', views.static_page, name='staticpage'), diff --git a/boards/views/__init__.py b/boards/views/__init__.py --- a/boards/views/__init__.py +++ b/boards/views/__init__.py @@ -43,40 +43,6 @@ def jump_to_post(request, post_id): -@transaction.atomic -def delete(request, post_id): - """Delete post""" - - user = _get_user(request) - post = get_object_or_404(Post, id=post_id) - - if user.is_moderator(): - # TODO Show confirmation page before deletion - Post.objects.delete_post(post) - - if not post.thread: - return _redirect_to_next(request) - else: - return redirect('thread', post_id=post.thread.id) - - -@transaction.atomic -def ban(request, post_id): - """Ban user""" - - user = _get_user(request) - post = get_object_or_404(Post, id=post_id) - - if user.is_moderator(): - # TODO Show confirmation page before ban - ban, created = Ban.objects.get_or_create(ip=post.poster_ip) - if created: - ban.reason = 'Banned for post ' + str(post_id) - ban.save() - - return _redirect_to_next(request) - - def page_404(request): """Show page 404 (not found error)""" diff --git a/boards/views/ban.py b/boards/views/ban.py new file mode 100644 --- /dev/null +++ b/boards/views/ban.py @@ -0,0 +1,20 @@ +from django.db import transaction + +from boards.views.base import BaseBoardView +from boards.models import Post, Ban + +class BanUserView(BaseBoardView): + + @transaction.atomic + def get(self, request, post_id): + user = self._get_user(request) + post = get_object_or_404(Post, id=post_id) + + if user.is_moderator(): + # TODO Show confirmation page before ban + ban, created = Ban.objects.get_or_create(ip=post.poster_ip) + if created: + ban.reason = 'Banned for post ' + str(post_id) + ban.save() + + return self.redirect_to_next(request)