userflags.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from django.shortcuts import render_to_response, get_object_or_404
  2. from django.template import RequestContext
  3. from django.http import Http404
  4. from django.contrib.comments.models import Comment, ModeratorDeletion, UserFlag
  5. from django.contrib.auth.decorators import login_required
  6. from django.http import HttpResponseRedirect
  7. from django.conf import settings
  8. def flag(request, comment_id, extra_context=None, context_processors=None):
  9. """
  10. Flags a comment. Confirmation on GET, action on POST.
  11. Templates: `comments/flag_verify`, `comments/flag_done`
  12. Context:
  13. comment
  14. the flagged `comments.comments` object
  15. """
  16. if extra_context is None: extra_context = {}
  17. comment = get_object_or_404(Comment,pk=comment_id, site__id__exact=settings.SITE_ID)
  18. if request.POST:
  19. UserFlag.objects.flag(comment, request.user)
  20. return HttpResponseRedirect('%sdone/' % request.path)
  21. return render_to_response('comments/flag_verify.html', {'comment': comment},
  22. context_instance=RequestContext(request, extra_context, context_processors))
  23. flag = login_required(flag)
  24. def flag_done(request, comment_id, extra_context=None, context_processors=None):
  25. if extra_context is None: extra_context = {}
  26. comment = get_object_or_404(Comment,pk=comment_id, site__id__exact=settings.SITE_ID)
  27. return render_to_response('comments/flag_done.html', {'comment': comment},
  28. context_instance=RequestContext(request, extra_context, context_processors))
  29. def delete(request, comment_id, extra_context=None, context_processors=None):
  30. """
  31. Deletes a comment. Confirmation on GET, action on POST.
  32. Templates: `comments/delete_verify`, `comments/delete_done`
  33. Context:
  34. comment
  35. the flagged `comments.comments` object
  36. """
  37. if extra_context is None: extra_context = {}
  38. comment = get_object_or_404(Comment,pk=comment_id, site__id__exact=settings.SITE_ID)
  39. if not Comment.objects.user_is_moderator(request.user):
  40. raise Http404
  41. if request.POST:
  42. # If the comment has already been removed, silently fail.
  43. if not comment.is_removed:
  44. comment.is_removed = True
  45. comment.save()
  46. m = ModeratorDeletion(None, request.user.id, comment.id, None)
  47. m.save()
  48. return HttpResponseRedirect('%sdone/' % request.path)
  49. return render_to_response('comments/delete_verify.html', {'comment': comment},
  50. context_instance=RequestContext(request, extra_context, context_processors))
  51. delete = login_required(delete)
  52. def delete_done(request, comment_id, extra_context=None, context_processors=None):
  53. if extra_context is None: extra_context = {}
  54. comment = get_object_or_404(Comment,pk=comment_id, site__id__exact=settings.SITE_ID)
  55. return render_to_response('comments/delete_done.html', {'comment': comment},
  56. context_instance=RequestContext(request, extra_context, context_processors))