3
3
from django .shortcuts import get_object_or_404 , render_to_response
4
4
from django .contrib .auth .decorators import login_required , permission_required
5
5
from utils import next_redirect , confirmation_view
6
- from django .core .paginator import Paginator , InvalidPage
7
- from django .http import Http404
8
6
from django .contrib import comments
9
7
from django .contrib .comments import signals
10
8
11
- # @login_required
9
+ @login_required
12
10
def flag (request , comment_id , next = None ):
13
11
"""
14
12
Flags a comment. Confirmation on GET, action on POST.
@@ -22,18 +20,7 @@ def flag(request, comment_id, next=None):
22
20
23
21
# Flag on POST
24
22
if request .method == 'POST' :
25
- flag , created = comments .models .CommentFlag .objects .get_or_create (
26
- comment = comment ,
27
- user = request .user ,
28
- flag = comments .models .CommentFlag .SUGGEST_REMOVAL
29
- )
30
- signals .comment_was_flagged .send (
31
- sender = comment .__class__ ,
32
- comment = comment ,
33
- flag = flag ,
34
- created = created ,
35
- request = request ,
36
- )
23
+ perform_flag (request , comment )
37
24
return next_redirect (request .POST .copy (), next , flag_done , c = comment .pk )
38
25
39
26
# Render a form on GET
@@ -42,9 +29,8 @@ def flag(request, comment_id, next=None):
42
29
{'comment' : comment , "next" : next },
43
30
template .RequestContext (request )
44
31
)
45
- flag = login_required (flag )
46
32
47
- # @permission_required("comments.delete_comment ")
33
+ @permission_required ("comments.can_moderate " )
48
34
def delete (request , comment_id , next = None ):
49
35
"""
50
36
Deletes a comment. Confirmation on GET, action on POST. Requires the "can
@@ -60,20 +46,7 @@ def delete(request, comment_id, next=None):
60
46
# Delete on POST
61
47
if request .method == 'POST' :
62
48
# Flag the comment as deleted instead of actually deleting it.
63
- flag , created = comments .models .CommentFlag .objects .get_or_create (
64
- comment = comment ,
65
- user = request .user ,
66
- flag = comments .models .CommentFlag .MODERATOR_DELETION
67
- )
68
- comment .is_removed = True
69
- comment .save ()
70
- signals .comment_was_flagged .send (
71
- sender = comment .__class__ ,
72
- comment = comment ,
73
- flag = flag ,
74
- created = created ,
75
- request = request ,
76
- )
49
+ perform_delete (request , comment )
77
50
return next_redirect (request .POST .copy (), next , delete_done , c = comment .pk )
78
51
79
52
# Render a form on GET
@@ -82,9 +55,8 @@ def delete(request, comment_id, next=None):
82
55
{'comment' : comment , "next" : next },
83
56
template .RequestContext (request )
84
57
)
85
- delete = permission_required ("comments.can_moderate" )(delete )
86
58
87
- # @permission_required("comments.can_moderate")
59
+ @permission_required ("comments.can_moderate" )
88
60
def approve (request , comment_id , next = None ):
89
61
"""
90
62
Approve a comment (that is, mark it as public and non-removed). Confirmation
@@ -100,23 +72,7 @@ def approve(request, comment_id, next=None):
100
72
# Delete on POST
101
73
if request .method == 'POST' :
102
74
# Flag the comment as approved.
103
- flag , created = comments .models .CommentFlag .objects .get_or_create (
104
- comment = comment ,
105
- user = request .user ,
106
- flag = comments .models .CommentFlag .MODERATOR_APPROVAL ,
107
- )
108
-
109
- comment .is_removed = False
110
- comment .is_public = True
111
- comment .save ()
112
-
113
- signals .comment_was_flagged .send (
114
- sender = comment .__class__ ,
115
- comment = comment ,
116
- flag = flag ,
117
- created = created ,
118
- request = request ,
119
- )
75
+ perform_approve (request , comment )
120
76
return next_redirect (request .POST .copy (), next , approve_done , c = comment .pk )
121
77
122
78
# Render a form on GET
@@ -126,69 +82,64 @@ def approve(request, comment_id, next=None):
126
82
template .RequestContext (request )
127
83
)
128
84
129
- approve = permission_required ("comments.can_moderate" )(approve )
130
-
85
+ # The following functions actually perform the various flag/aprove/delete
86
+ # actions. They've been broken out into seperate functions to that they
87
+ # may be called from admin actions.
131
88
132
- #@permission_required("comments.can_moderate")
133
- def moderation_queue (request ):
89
+ def perform_flag (request , comment ):
134
90
"""
135
- Displays a list of unapproved comments to be approved.
136
-
137
- Templates: `comments/moderation_queue.html`
138
- Context:
139
- comments
140
- Comments to be approved (paginated).
141
- empty
142
- Is the comment list empty?
143
- is_paginated
144
- Is there more than one page?
145
- results_per_page
146
- Number of comments per page
147
- has_next
148
- Is there a next page?
149
- has_previous
150
- Is there a previous page?
151
- page
152
- The current page number
153
- next
154
- The next page number
155
- pages
156
- Number of pages
157
- hits
158
- Total number of comments
159
- page_range
160
- Range of page numbers
161
-
91
+ Actually perform the flagging of a comment from a request.
162
92
"""
163
- qs = comments .get_model ().objects .filter (is_public = False , is_removed = False )
164
- paginator = Paginator (qs , 100 )
165
-
166
- try :
167
- page = int (request .GET .get ("page" , 1 ))
168
- except ValueError :
169
- raise Http404
170
-
171
- try :
172
- comments_per_page = paginator .page (page )
173
- except InvalidPage :
174
- raise Http404
175
-
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 (),
183
- 'page' : page ,
184
- 'next' : page + 1 ,
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 ))
190
-
191
- moderation_queue = permission_required ("comments.can_moderate" )(moderation_queue )
93
+ flag , created = comments .models .CommentFlag .objects .get_or_create (
94
+ comment = comment ,
95
+ user = request .user ,
96
+ flag = comments .models .CommentFlag .SUGGEST_REMOVAL
97
+ )
98
+ signals .comment_was_flagged .send (
99
+ sender = comment .__class__ ,
100
+ comment = comment ,
101
+ flag = flag ,
102
+ created = created ,
103
+ request = request ,
104
+ )
105
+
106
+ def perform_delete (request , comment ):
107
+ flag , created = comments .models .CommentFlag .objects .get_or_create (
108
+ comment = comment ,
109
+ user = request .user ,
110
+ flag = comments .models .CommentFlag .MODERATOR_DELETION
111
+ )
112
+ comment .is_removed = True
113
+ comment .save ()
114
+ signals .comment_was_flagged .send (
115
+ sender = comment .__class__ ,
116
+ comment = comment ,
117
+ flag = flag ,
118
+ created = created ,
119
+ request = request ,
120
+ )
121
+
122
+
123
+ def perform_approve (request , comment ):
124
+ flag , created = comments .models .CommentFlag .objects .get_or_create (
125
+ comment = comment ,
126
+ user = request .user ,
127
+ flag = comments .models .CommentFlag .MODERATOR_APPROVAL ,
128
+ )
129
+
130
+ comment .is_removed = False
131
+ comment .is_public = True
132
+ comment .save ()
133
+
134
+ signals .comment_was_flagged .send (
135
+ sender = comment .__class__ ,
136
+ comment = comment ,
137
+ flag = flag ,
138
+ created = created ,
139
+ request = request ,
140
+ )
141
+
142
+ # Confirmation views.
192
143
193
144
flag_done = confirmation_view (
194
145
template = "comments/flagged.html" ,
0 commit comments