from misago.markup import parse from misago.threads.checksums import update_report_checksum from misago.threads.models import Report def make_posts_reports_aware(user, thread, posts): make_posts_aware = ( user.is_authenticated() and thread.has_reported_posts and thread.acl['can_report'] ) if not make_posts_aware: return posts_dict = {} for post in posts: post.is_reported = False post.report = None posts_dict[post.pk] = post for report in user.report_set.filter(post_id__in=posts_dict.keys()): posts_dict[report.post_id].is_reported = True posts_dict[report.post_id].report = report def user_has_reported_post(user, post): if not post.has_reports: return False return post.report_set.filter(reported_by=user).exists() def report_post(request, post, message): if message: message = parse(message, request, request.user, allow_images=False, allow_blocks=False) message = message['parsed_text'] report = Report.objects.create( category=post.category, thread=post.thread, post=post, reported_by=request.user, reported_by_name=request.user.username, reported_by_slug=request.user.slug, reported_by_ip=request.user_ip, message=message, checksum='' ) if message: update_report_checksum(report) report.save(update_fields=['checksum']) post.thread.has_reported_posts = True post.thread.has_open_reports = True post.thread.save(update_fields=['has_reported_posts', 'has_open_reports']) post.has_reports = True post.has_open_reports = True post.save(update_fields=['has_reports', 'has_open_reports']) return report