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.'