--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/django/contrib/comments/views/moderation.py Tue Oct 14 16:00:59 2008 +0000
@@ -0,0 +1,204 @@
+from django import template
+from django.conf import settings
+from django.shortcuts import get_object_or_404, render_to_response
+from django.contrib.auth.decorators import login_required, permission_required
+from utils import next_redirect, confirmation_view
+from django.core.paginator import Paginator, InvalidPage
+from django.http import Http404
+from django.contrib import comments
+from django.contrib.comments import signals
+
+#@login_required
+def flag(request, comment_id, next=None):
+ """
+ Flags a comment. Confirmation on GET, action on POST.
+
+ Templates: `comments/flag.html`,
+ Context:
+ comment
+ the flagged `comments.comment` object
+ """
+ comment = get_object_or_404(comments.get_model(), pk=comment_id, site__pk=settings.SITE_ID)
+
+ # Flag on POST
+ if request.method == 'POST':
+ flag, created = comments.models.CommentFlag.objects.get_or_create(
+ comment = comment,
+ user = request.user,
+ flag = comments.models.CommentFlag.SUGGEST_REMOVAL
+ )
+ signals.comment_was_flagged.send(
+ sender = comment.__class__,
+ comment = comment,
+ flag = flag,
+ created = created,
+ request = request,
+ )
+ return next_redirect(request.POST.copy(), next, flag_done, c=comment.pk)
+
+ # Render a form on GET
+ else:
+ return render_to_response('comments/flag.html',
+ {'comment': comment, "next": next},
+ template.RequestContext(request)
+ )
+flag = login_required(flag)
+
+#@permission_required("comments.delete_comment")
+def delete(request, comment_id, next=None):
+ """
+ Deletes a comment. Confirmation on GET, action on POST. Requires the "can
+ moderate comments" permission.
+
+ Templates: `comments/delete.html`,
+ Context:
+ comment
+ the flagged `comments.comment` object
+ """
+ comment = get_object_or_404(comments.get_model(), pk=comment_id, site__pk=settings.SITE_ID)
+
+ # Delete on POST
+ if request.method == 'POST':
+ # Flag the comment as deleted instead of actually deleting it.
+ flag, created = comments.models.CommentFlag.objects.get_or_create(
+ comment = comment,
+ user = request.user,
+ flag = comments.models.CommentFlag.MODERATOR_DELETION
+ )
+ comment.is_removed = True
+ comment.save()
+ signals.comment_was_flagged.send(
+ sender = comment.__class__,
+ comment = comment,
+ flag = flag,
+ created = created,
+ request = request,
+ )
+ return next_redirect(request.POST.copy(), next, delete_done, c=comment.pk)
+
+ # Render a form on GET
+ else:
+ return render_to_response('comments/delete.html',
+ {'comment': comment, "next": next},
+ template.RequestContext(request)
+ )
+delete = permission_required("comments.can_moderate")(delete)
+
+#@permission_required("comments.can_moderate")
+def approve(request, comment_id, next=None):
+ """
+ Approve a comment (that is, mark it as public and non-removed). Confirmation
+ on GET, action on POST. Requires the "can moderate comments" permission.
+
+ Templates: `comments/approve.html`,
+ Context:
+ comment
+ the `comments.comment` object for approval
+ """
+ comment = get_object_or_404(comments.get_model(), pk=comment_id, site__pk=settings.SITE_ID)
+
+ # Delete on POST
+ if request.method == 'POST':
+ # Flag the comment as approved.
+ flag, created = comments.models.CommentFlag.objects.get_or_create(
+ comment = comment,
+ user = request.user,
+ flag = comments.models.CommentFlag.MODERATOR_APPROVAL,
+ )
+
+ comment.is_removed = False
+ comment.is_public = True
+ comment.save()
+
+ signals.comment_was_flagged.send(
+ sender = comment.__class__,
+ comment = comment,
+ flag = flag,
+ created = created,
+ request = request,
+ )
+ return next_redirect(request.POST.copy(), next, approve_done, c=comment.pk)
+
+ # Render a form on GET
+ else:
+ return render_to_response('comments/approve.html',
+ {'comment': comment, "next": next},
+ template.RequestContext(request)
+ )
+
+approve = permission_required("comments.can_moderate")(approve)
+
+
+#@permission_required("comments.can_moderate")
+def moderation_queue(request):
+ """
+ Displays a list of unapproved comments to be approved.
+
+ Templates: `comments/moderation_queue.html`
+ Context:
+ comments
+ Comments to be approved (paginated).
+ empty
+ Is the comment list empty?
+ is_paginated
+ Is there more than one page?
+ results_per_page
+ Number of comments per page
+ has_next
+ Is there a next page?
+ has_previous
+ Is there a previous page?
+ page
+ The current page number
+ next
+ The next page number
+ pages
+ Number of pages
+ hits
+ Total number of comments
+ page_range
+ Range of page numbers
+
+ """
+ qs = comments.get_model().objects.filter(is_public=False, is_removed=False)
+ paginator = Paginator(qs, 100)
+
+ try:
+ page = int(request.GET.get("page", 1))
+ except ValueError:
+ raise Http404
+
+ try:
+ comments_per_page = paginator.page(page)
+ except InvalidPage:
+ raise Http404
+
+ return render_to_response("comments/moderation_queue.html", {
+ 'comments' : comments_per_page.object_list,
+ 'empty' : page == 1 and paginator.count == 0,
+ 'is_paginated': paginator.num_pages > 1,
+ 'results_per_page': 100,
+ 'has_next': comments_per_page.has_next(),
+ 'has_previous': comments_per_page.has_previous(),
+ 'page': page,
+ 'next': page + 1,
+ 'previous': page - 1,
+ 'pages': paginator.num_pages,
+ 'hits' : paginator.count,
+ 'page_range' : paginator.page_range
+ }, context_instance=template.RequestContext(request))
+
+moderation_queue = permission_required("comments.can_moderate")(moderation_queue)
+
+flag_done = confirmation_view(
+ template = "comments/flagged.html",
+ doc = 'Displays a "comment was flagged" success page.'
+)
+delete_done = confirmation_view(
+ template = "comments/deleted.html",
+ doc = 'Displays a "comment was deleted" success page.'
+)
+approve_done = confirmation_view(
+ template = "comments/approved.html",
+ doc = 'Displays a "comment was approved" success page.'
+)