models.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from datetime import timedelta
  2. from django.core.exceptions import ValidationError
  3. from django.db import models
  4. from django.db.models import Q
  5. from django.utils import timezone
  6. from django.utils.translation import ugettext_lazy as _
  7. from misago.users.models import User
  8. class Policy(models.Model):
  9. """
  10. Pruning policy
  11. """
  12. name = models.CharField(max_length=255)
  13. email = models.CharField(max_length=255,null=True,blank=True)
  14. posts = models.PositiveIntegerField(default=0)
  15. registered = models.PositiveIntegerField(default=0)
  16. last_visit = models.PositiveIntegerField(default=0)
  17. def clean(self):
  18. if not (self.email and self.posts and self.registered and self.last_visit):
  19. raise ValidationError(_("Pruning policy must have at least one pruning criteria set to be valid."))
  20. def get_model(self):
  21. model = User.objects
  22. if self.email:
  23. if ',' in self.email:
  24. qs = None
  25. for name in self.email.split(','):
  26. name = name.strip().lower()
  27. if name:
  28. if qs:
  29. qs = qs | Q(email__iendswith=name)
  30. else:
  31. qs = Q(email__iendswith=name)
  32. if qs:
  33. model = model.filter(qs)
  34. else:
  35. model = model.filter(email__iendswith=self.email)
  36. if self.posts:
  37. model = model.filter(posts__lt=self.posts)
  38. if self.registered:
  39. date = timezone.now() - timedelta(days=self.registered)
  40. model = model.filter(join_date__gte=date)
  41. if self.last_visit:
  42. date = timezone.now() - timedelta(days=self.last_visit)
  43. model = model.filter(last_date__gte=date)
  44. return model