1
from django import template
2
from django.conf import settings
3
from django.shortcuts import get_object_or_404, render_to_response
4
from django.contrib.auth.decorators import login_required, permission_required
5
from utils import next_redirect, confirmation_view
6
from django.core.paginator import Paginator, InvalidPage
7
from django.http import Http404
8
from django.contrib import comments
9
from django.contrib.comments import signals
12
def flag(request, comment_id, next=None):
14
Flags a comment. Confirmation on GET, action on POST.
16
Templates: `comments/flag.html`,
19
the flagged `comments.comment` object
21
comment = get_object_or_404(comments.get_model(), pk=comment_id, site__pk=settings.SITE_ID)
24
if request.method == 'POST':
25
flag, created = comments.models.CommentFlag.objects.get_or_create(
28
flag = comments.models.CommentFlag.SUGGEST_REMOVAL
30
signals.comment_was_flagged.send(
31
sender = comment.__class__,
37
return next_redirect(request.POST.copy(), next, flag_done, c=comment.pk)
39
# Render a form on GET
41
return render_to_response('comments/flag.html',
42
{'comment': comment, "next": next},
43
template.RequestContext(request)
45
flag = login_required(flag)
47
#@permission_required("comments.delete_comment")
48
def delete(request, comment_id, next=None):
50
Deletes a comment. Confirmation on GET, action on POST. Requires the "can
51
moderate comments" permission.
53
Templates: `comments/delete.html`,
56
the flagged `comments.comment` object
58
comment = get_object_or_404(comments.get_model(), pk=comment_id, site__pk=settings.SITE_ID)
61
if request.method == 'POST':
62
# Flag the comment as deleted instead of actually deleting it.
63
flag, created = comments.models.CommentFlag.objects.get_or_create(
66
flag = comments.models.CommentFlag.MODERATOR_DELETION
68
comment.is_removed = True
70
signals.comment_was_flagged.send(
71
sender = comment.__class__,
77
return next_redirect(request.POST.copy(), next, delete_done, c=comment.pk)
79
# Render a form on GET
81
return render_to_response('comments/delete.html',
82
{'comment': comment, "next": next},
83
template.RequestContext(request)
85
delete = permission_required("comments.can_moderate")(delete)
87
#@permission_required("comments.can_moderate")
88
def approve(request, comment_id, next=None):
90
Approve a comment (that is, mark it as public and non-removed). Confirmation
91
on GET, action on POST. Requires the "can moderate comments" permission.
93
Templates: `comments/approve.html`,
96
the `comments.comment` object for approval
98
comment = get_object_or_404(comments.get_model(), pk=comment_id, site__pk=settings.SITE_ID)
101
if request.method == 'POST':
102
# Flag the comment as approved.
103
flag, created = comments.models.CommentFlag.objects.get_or_create(
106
flag = comments.models.CommentFlag.MODERATOR_APPROVAL,
109
comment.is_removed = False
110
comment.is_public = True
113
signals.comment_was_flagged.send(
114
sender = comment.__class__,
120
return next_redirect(request.POST.copy(), next, approve_done, c=comment.pk)
122
# Render a form on GET
124
return render_to_response('comments/approve.html',
125
{'comment': comment, "next": next},
126
template.RequestContext(request)
129
approve = permission_required("comments.can_moderate")(approve)
132
#@permission_required("comments.can_moderate")
133
def moderation_queue(request):
135
Displays a list of unapproved comments to be approved.
137
Templates: `comments/moderation_queue.html`
140
Comments to be approved (paginated).
142
Is the comment list empty?
144
Is there more than one page?
146
Number of comments per page
148
Is there a next page?
150
Is there a previous page?
152
The current page number
158
Total number of comments
160
Range of page numbers
163
qs = comments.get_model().objects.filter(is_public=False, is_removed=False)
164
paginator = Paginator(qs, 100)
167
page = int(request.GET.get("page", 1))
172
comments_per_page = paginator.page(page)
176
return render_to_response("comments/moderation_queue.html", {
177
'comments' : comments_per_page.object_list,
178
'empty' : page == 1 and paginator.count == 0,
179
'is_paginated': paginator.num_pages > 1,
180
'results_per_page': 100,
181
'has_next': comments_per_page.has_next(),
182
'has_previous': comments_per_page.has_previous(),
185
'previous': page - 1,
186
'pages': paginator.num_pages,
187
'hits' : paginator.count,
188
'page_range' : paginator.page_range
189
}, context_instance=template.RequestContext(request))
191
moderation_queue = permission_required("comments.can_moderate")(moderation_queue)
193
flag_done = confirmation_view(
194
template = "comments/flagged.html",
195
doc = 'Displays a "comment was flagged" success page.'
197
delete_done = confirmation_view(
198
template = "comments/deleted.html",
199
doc = 'Displays a "comment was deleted" success page.'
201
approve_done = confirmation_view(
202
template = "comments/approved.html",
203
doc = 'Displays a "comment was approved" success page.'