namechanges.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. """
  2. Service for tracking namechanges
  3. """
  4. from datetime import timedelta
  5. from django.utils import timezone
  6. from misago.users.models import UsernameChange
  7. class UsernameChanges(object):
  8. def __init__(self, user):
  9. self.left = 0
  10. self.next_on = None
  11. if user.acl['name_changes_allowed']:
  12. self.count_namechanges(user)
  13. def count_namechanges(self, user):
  14. name_changes_allowed = user.acl['name_changes_allowed']
  15. name_changes_expire = user.acl['name_changes_expire']
  16. valid_changes_qs = user.namechanges.filter(changed_by=user)
  17. if name_changes_expire:
  18. cutoff = timezone.now() - timedelta(days=name_changes_expire)
  19. valid_changes_qs = valid_changes_qs.filter(changed_on__gte=cutoff)
  20. used_changes = valid_changes_qs.count()
  21. if name_changes_allowed <= used_changes:
  22. self.left = 0
  23. else:
  24. self.left = name_changes_allowed - used_changes
  25. if not self.left and name_changes_expire:
  26. try:
  27. self.next_on = valid_changes_qs.latest().changed_on
  28. self.next_on += timedelta(days=name_changes_expire)
  29. except UsernameChange.DoesNotExist:
  30. pass