Show More
@@ -0,0 +1,25 b'' | |||
|
1 | from django.shortcuts import redirect, get_object_or_404 | |
|
2 | from django.db import transaction | |
|
3 | ||
|
4 | from boards.views.base import BaseBoardView | |
|
5 | from boards.views.redirect_next_mixin import RedirectNextMixin | |
|
6 | from boards.models import Post | |
|
7 | ||
|
8 | class DeletePostView(BaseBoardView, RedirectNextMixin): | |
|
9 | ||
|
10 | @transaction.atomic | |
|
11 | def get(self, request, post_id): | |
|
12 | user = self._get_user(request) | |
|
13 | post = get_object_or_404(Post, id=post_id) | |
|
14 | ||
|
15 | opening_post = post.is_opening() | |
|
16 | ||
|
17 | if user.is_moderator(): | |
|
18 | # TODO Show confirmation page before deletion | |
|
19 | Post.objects.delete_post(post) | |
|
20 | ||
|
21 | if not opening_post: | |
|
22 | thread = post.thread_new | |
|
23 | return redirect('thread', post_id=thread.get_opening_post().id) | |
|
24 | else: | |
|
25 | return self.redirect_to_next(request) |
@@ -0,0 +1,17 b'' | |||
|
1 | from django.shortcuts import redirect | |
|
2 | from django.http import HttpResponseRedirect | |
|
3 | ||
|
4 | class RedirectNextMixin: | |
|
5 | ||
|
6 | def redirect_to_next(self, request): | |
|
7 | """ | |
|
8 | If a 'next' parameter was specified, redirect to the next page. This | |
|
9 | is used when the user is required to return to some page after the | |
|
10 | current view has finished its work. | |
|
11 | """ | |
|
12 | ||
|
13 | if 'next' in request.GET: | |
|
14 | next_page = request.GET['next'] | |
|
15 | return HttpResponseRedirect(next_page) | |
|
16 | else: | |
|
17 | return redirect('index') |
@@ -97,10 +97,8 b' class PostManager(models.Manager):' | |||
|
97 | 97 | |
|
98 | 98 | thread = post.thread_new |
|
99 | 99 | |
|
100 |
if t |
|
|
101 |
thread. |
|
|
102 | ||
|
103 | thread.delete() | |
|
100 | if post.is_opening(): | |
|
101 | thread.delete_with_posts() | |
|
104 | 102 | else: |
|
105 | 103 | thread.last_edit_time = timezone.now() |
|
106 | 104 | thread.save() |
@@ -384,7 +382,7 b' class Thread(models.Model):' | |||
|
384 | 382 | return self.get_replies()[0] |
|
385 | 383 | |
|
386 | 384 | def __unicode__(self): |
|
387 |
return str(self. |
|
|
385 | return str(self.id) | |
|
388 | 386 | |
|
389 | 387 | def get_pub_time(self): |
|
390 | 388 | """ |
@@ -38,7 +38,7 b'' | |||
|
38 | 38 | {% if thread.archived %} |
|
39 | 39 | — [{{ thread.bump_time }}] |
|
40 | 40 | {% endif %} |
|
41 | {% if not truncated %} | |
|
41 | {% if not truncated and not thread.archived%} | |
|
42 | 42 | [<a href="#" onclick="javascript:addQuickReply('{{ post.id }}') |
|
43 | 43 | ; return false;">>></a>] |
|
44 | 44 | {% endif %} |
@@ -4,6 +4,7 b' from boards.rss import AllThreadsFeed, T' | |||
|
4 | 4 | from boards.views import api, tag_threads, all_threads, archived_threads, \ |
|
5 | 5 | login, settings, all_tags |
|
6 | 6 | from boards.views.authors import AuthorsView |
|
7 | from boards.views.delete_post import DeletePostView | |
|
7 | 8 | |
|
8 | 9 | js_info_dict = { |
|
9 | 10 | 'packages': ('boards',), |
@@ -49,7 +50,8 b" urlpatterns = patterns(''," | |||
|
49 | 50 | url(r'^captcha/', include('captcha.urls')), |
|
50 | 51 | url(r'^jump/(?P<post_id>\w+)/$', views.jump_to_post, name='jumper'), |
|
51 | 52 | url(r'^authors/$', AuthorsView.as_view(), name='authors'), |
|
52 |
url(r'^delete/(?P<post_id>\w+)/$', |
|
|
53 | url(r'^delete/(?P<post_id>\w+)/$', DeletePostView.as_view(), | |
|
54 | name='delete'), | |
|
53 | 55 | url(r'^ban/(?P<post_id>\w+)/$', views.ban, name='ban'), |
|
54 | 56 | |
|
55 | 57 | url(r'^banned/$', views.banned.BannedView.as_view(), name='banned'), |
General Comments 0
You need to be logged in to leave comments.
Login now