warnings.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from django.db import models
  2. from django.utils.translation import ugettext_lazy as _
  3. from misago.core.cache import cache
  4. from misago.core.utils import time_amount
  5. __all__ = [
  6. 'RESTRICT_NO', 'RESTRICT_MODERATOR_REVIEW', 'RESTRICT_DISALLOW',
  7. 'RESTRICTIONS_CHOICES', 'WarningLevel'
  8. ]
  9. RESTRICT_NO = 0
  10. RESTRICT_MODERATOR_REVIEW = 1
  11. RESTRICT_DISALLOW = 2
  12. RESTRICTIONS_CHOICES = (
  13. (RESTRICT_NO, _("No restrictions")),
  14. (RESTRICT_MODERATOR_REVIEW, _("Review by moderator")),
  15. (RESTRICT_DISALLOW, _("Disallowed")),
  16. )
  17. class WarningLevel(models.Model):
  18. name = models.CharField(max_length=255)
  19. description = models.TextField(null=True, blank=True)
  20. level = models.PositiveIntegerField(default=1, db_index=True)
  21. length_in_minutes = models.PositiveIntegerField(default=0)
  22. restricts_posting_replies = models.PositiveIntegerField(
  23. default=RESTRICT_NO)
  24. restricts_posting_threads = models.PositiveIntegerField(
  25. default=RESTRICT_NO)
  26. def save(self, *args, **kwargs):
  27. if not self.pk:
  28. self.set_level()
  29. super(WarningLevel, self).save(*args, **kwargs)
  30. cache.delete('warning_levels')
  31. def delete(self, *args, **kwargs):
  32. super(WarningLevel, self).delete(*args, **kwargs)
  33. cache.delete('warning_levels')
  34. @property
  35. def length(self):
  36. if self.length_in_minutes:
  37. return time_amount(self.length_in_minutes * 60)
  38. else:
  39. return _("permanent")
  40. def set_level(self):
  41. try:
  42. self.level = WarningLevel.objects.latest('level').level + 1
  43. except WarningLevel.DoesNotExist:
  44. self.level = 1