summaryrefslogtreecommitdiff
path: root/app/lib/django_comments/models.py
diff options
context:
space:
mode:
authorlxf <sng@luxagraf.net>2022-05-14 16:38:07 -0400
committerlxf <sng@luxagraf.net>2022-05-14 16:38:07 -0400
commitbb3973ffb714c932e9ec6dd6a751228dc71fe1d3 (patch)
tree6fa32f9392ad2ec32271349b86a4c1388fd6ba95 /app/lib/django_comments/models.py
initial commit
Diffstat (limited to 'app/lib/django_comments/models.py')
-rw-r--r--app/lib/django_comments/models.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/app/lib/django_comments/models.py b/app/lib/django_comments/models.py
new file mode 100644
index 0000000..204cf2e
--- /dev/null
+++ b/app/lib/django_comments/models.py
@@ -0,0 +1,62 @@
+from six import python_2_unicode_compatible
+from django.conf import settings
+from django.db import models
+from django.utils import timezone
+from django.utils.translation import ugettext_lazy as _
+
+from .abstracts import (
+ COMMENT_MAX_LENGTH, BaseCommentAbstractModel, CommentAbstractModel,
+)
+
+
+class Comment(CommentAbstractModel):
+ class Meta(CommentAbstractModel.Meta):
+ db_table = "django_comments"
+
+
+@python_2_unicode_compatible
+class CommentFlag(models.Model):
+ """
+ Records a flag on a comment. This is intentionally flexible; right now, a
+ flag could be:
+
+ * A "removal suggestion" -- where a user suggests a comment for (potential) removal.
+
+ * A "moderator deletion" -- used when a moderator deletes a comment.
+
+ You can (ab)use this model to add other flags, if needed. However, by
+ design users are only allowed to flag a comment with a given flag once;
+ if you want rating look elsewhere.
+ """
+ user = models.ForeignKey(
+ settings.AUTH_USER_MODEL, verbose_name=_('user'), related_name="comment_flags",
+ on_delete=models.CASCADE,
+ )
+ comment = models.ForeignKey(
+ # Translators: 'comment' is a noun here.
+ Comment, verbose_name=_('comment'), related_name="flags", on_delete=models.CASCADE,
+ )
+ # Translators: 'flag' is a noun here.
+ flag = models.CharField(_('flag'), max_length=30, db_index=True)
+ flag_date = models.DateTimeField(_('date'), default=None)
+
+ # Constants for flag types
+ SUGGEST_REMOVAL = "removal suggestion"
+ MODERATOR_DELETION = "moderator deletion"
+ MODERATOR_APPROVAL = "moderator approval"
+
+ class Meta:
+ db_table = 'django_comment_flags'
+ unique_together = [('user', 'comment', 'flag')]
+ verbose_name = _('comment flag')
+ verbose_name_plural = _('comment flags')
+
+ def __str__(self):
+ return "%s flag of comment ID %s by %s" % (
+ self.flag, self.comment_id, self.user.get_username()
+ )
+
+ def save(self, *args, **kwargs):
+ if self.flag_date is None:
+ self.flag_date = timezone.now()
+ super(CommentFlag, self).save(*args, **kwargs)