123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- 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.contrib import comments
- from django.contrib.comments import signals
- from django.views.decorators.csrf import csrf_protect
- @csrf_protect
- @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':
- perform_flag(request, comment)
- 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)
- )
- @csrf_protect
- @permission_required("comments.can_moderate")
- 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.
- perform_delete(request, comment)
- 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)
- )
- @csrf_protect
- @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.
- perform_approve(request, comment)
- 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)
- )
- # The following functions actually perform the various flag/aprove/delete
- # actions. They've been broken out into seperate functions to that they
- # may be called from admin actions.
- def perform_flag(request, comment):
- """
- Actually perform the flagging of a comment from a request.
- """
- 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,
- )
- def perform_delete(request, comment):
- 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,
- )
- def perform_approve(request, comment):
- 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,
- )
- # Confirmation views.
- 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.'
- )
|