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') |
@@ -94,13 +94,11 b' class PostManager(models.Manager):' | |||||
94 | """ |
|
94 | """ | |
95 | Delete post and update or delete its thread |
|
95 | Delete post and update or delete its thread | |
96 | """ |
|
96 | """ | |
97 |
|
97 | |||
98 | thread = post.thread_new |
|
98 | thread = post.thread_new | |
99 |
|
99 | |||
100 |
if t |
|
100 | if post.is_opening(): | |
101 |
thread. |
|
101 | thread.delete_with_posts() | |
102 |
|
||||
103 | thread.delete() |
|
|||
104 | else: |
|
102 | else: | |
105 | thread.last_edit_time = timezone.now() |
|
103 | thread.last_edit_time = timezone.now() | |
106 | thread.save() |
|
104 | thread.save() | |
@@ -384,7 +382,7 b' class Thread(models.Model):' | |||||
384 | return self.get_replies()[0] |
|
382 | return self.get_replies()[0] | |
385 |
|
383 | |||
386 | def __unicode__(self): |
|
384 | def __unicode__(self): | |
387 |
return str(self. |
|
385 | return str(self.id) | |
388 |
|
386 | |||
389 | def get_pub_time(self): |
|
387 | def get_pub_time(self): | |
390 | """ |
|
388 | """ |
@@ -38,7 +38,7 b'' | |||||
38 | {% if thread.archived %} |
|
38 | {% if thread.archived %} | |
39 | — [{{ thread.bump_time }}] |
|
39 | — [{{ thread.bump_time }}] | |
40 | {% endif %} |
|
40 | {% endif %} | |
41 | {% if not truncated %} |
|
41 | {% if not truncated and not thread.archived%} | |
42 | [<a href="#" onclick="javascript:addQuickReply('{{ post.id }}') |
|
42 | [<a href="#" onclick="javascript:addQuickReply('{{ post.id }}') | |
43 | ; return false;">>></a>] |
|
43 | ; return false;">>></a>] | |
44 | {% endif %} |
|
44 | {% endif %} |
@@ -4,6 +4,7 b' from boards.rss import AllThreadsFeed, T' | |||||
4 | from boards.views import api, tag_threads, all_threads, archived_threads, \ |
|
4 | from boards.views import api, tag_threads, all_threads, archived_threads, \ | |
5 | login, settings, all_tags |
|
5 | login, settings, all_tags | |
6 | from boards.views.authors import AuthorsView |
|
6 | from boards.views.authors import AuthorsView | |
|
7 | from boards.views.delete_post import DeletePostView | |||
7 |
|
8 | |||
8 | js_info_dict = { |
|
9 | js_info_dict = { | |
9 | 'packages': ('boards',), |
|
10 | 'packages': ('boards',), | |
@@ -49,7 +50,8 b" urlpatterns = patterns(''," | |||||
49 | url(r'^captcha/', include('captcha.urls')), |
|
50 | url(r'^captcha/', include('captcha.urls')), | |
50 | url(r'^jump/(?P<post_id>\w+)/$', views.jump_to_post, name='jumper'), |
|
51 | url(r'^jump/(?P<post_id>\w+)/$', views.jump_to_post, name='jumper'), | |
51 | url(r'^authors/$', AuthorsView.as_view(), name='authors'), |
|
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 | url(r'^ban/(?P<post_id>\w+)/$', views.ban, name='ban'), |
|
55 | url(r'^ban/(?P<post_id>\w+)/$', views.ban, name='ban'), | |
54 |
|
56 | |||
55 | url(r'^banned/$', views.banned.BannedView.as_view(), name='banned'), |
|
57 | url(r'^banned/$', views.banned.BannedView.as_view(), name='banned'), |
@@ -3,6 +3,7 b' from django.shortcuts import render, red' | |||||
3 |
|
3 | |||
4 | from boards.views.base import BaseBoardView, PARAMETER_FORM |
|
4 | from boards.views.base import BaseBoardView, PARAMETER_FORM | |
5 | from boards.forms import SettingsForm, ModeratorSettingsForm, PlainErrorList |
|
5 | from boards.forms import SettingsForm, ModeratorSettingsForm, PlainErrorList | |
|
6 | from boards.views import SETTING_MODERATE | |||
6 |
|
7 | |||
7 | class SettingsView(BaseBoardView): |
|
8 | class SettingsView(BaseBoardView): | |
8 |
|
9 |
General Comments 0
You need to be logged in to leave comments.
Login now