""" 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",)