""" flagged for moderation """ from django.apps import apps from django.db import models from django.db.models import F, Q from .base_model import BookWyrmModel class Report(BookWyrmModel): """ reported status or user """ reporter = models.ForeignKey( "User", related_name="reporter", on_delete=models.PROTECT ) note = models.TextField(null=True, blank=True) user = models.ForeignKey("User", on_delete=models.PROTECT) statuses = models.ManyToManyField("Status", blank=True) resolved = models.BooleanField(default=False) def save(self, *args, **kwargs): """ notify admins when a report is created """ super().save(*args, **kwargs) user_model = apps.get_model("bookwyrm.User", require_ready=True) # moderators and superusers should be notified admins = user_model.objects.filter( Q(user_permissions__name__in=["moderate_user", "moderate_post"]) | Q(is_superuser=True) ).all() notification_model = apps.get_model("bookwyrm.Notification", require_ready=True) for admin in admins: notification_model.objects.create( user=admin, related_report=self, notification_type="REPORT", ) class Meta: """ don't let users report themselves """ constraints = [ models.CheckConstraint(check=~Q(reporter=F("user")), name="self_report") ] ordering = ("-created_date",) class ReportComment(BookWyrmModel): """ updates on a report """ user = models.ForeignKey("User", on_delete=models.PROTECT) note = models.TextField() report = models.ForeignKey(Report, on_delete=models.PROTECT) class Meta: """ sort comments """ ordering = ("-created_date",)