reports.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from misago.markup import parse
  2. from misago.threads.checksums import update_report_checksum
  3. from misago.threads.models import Report
  4. def make_posts_reports_aware(user, thread, posts):
  5. make_posts_aware = (
  6. user.is_authenticated() and
  7. thread.has_reported_posts and
  8. thread.acl['can_report']
  9. )
  10. if not make_posts_aware:
  11. return
  12. posts_dict = {}
  13. for post in posts:
  14. post.is_reported = False
  15. post.report = None
  16. posts_dict[post.pk] = post
  17. for report in user.report_set.filter(post_id__in=posts_dict.keys()):
  18. posts_dict[report.post_id].is_reported = True
  19. posts_dict[report.post_id].report = report
  20. def user_has_reported_post(user, post):
  21. if not post.has_reports:
  22. return False
  23. return post.report_set.filter(reported_by=user).exists()
  24. def report_post(request, post, message):
  25. if message:
  26. message = parse(message, request, request.user,
  27. allow_images=False, allow_blocks=False)
  28. message = message['parsed_text']
  29. report = Report.objects.create(
  30. category=post.category,
  31. thread=post.thread,
  32. post=post,
  33. reported_by=request.user,
  34. reported_by_name=request.user.username,
  35. reported_by_slug=request.user.slug,
  36. reported_by_ip=request.user_ip,
  37. message=message,
  38. checksum=''
  39. )
  40. if message:
  41. update_report_checksum(report)
  42. report.save(update_fields=['checksum'])
  43. post.thread.has_reported_posts = True
  44. post.thread.has_open_reports = True
  45. post.thread.save(update_fields=['has_reported_posts', 'has_open_reports'])
  46. post.has_reports = True
  47. post.has_open_reports = True
  48. post.save(update_fields=['has_reports', 'has_open_reports'])
  49. return report