modusers.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from datetime import timedelta
  2. from django.utils.translation import ugettext_lazy as _, ungettext
  3. from django.utils import timezone
  4. from misago.core import forms
  5. from misago.users.forms.admin import BanUsersForm
  6. from misago.users.models import Ban, BAN_EMAIL, BAN_USERNAME
  7. class BanForm(BanUsersForm):
  8. def __init__(self, *args, **kwargs):
  9. self.user = kwargs.pop('user')
  10. super(BanForm, self).__init__(*args, **kwargs)
  11. if self.user.acl_['max_ban_length']:
  12. message = ungettext(
  13. "Required. Can't be longer than %(days)s day.",
  14. "Required. Can't be longer than %(days)s days.",
  15. self.user.acl_['max_ban_length'])
  16. message = message % {'days': self.user.acl_['max_ban_length']}
  17. self['valid_until'].field.help_text = message
  18. def clean_valid_until(self):
  19. data = self.cleaned_data['valid_until']
  20. if self.user.acl_['max_ban_length']:
  21. max_ban_length = timedelta(days=self.user.acl_['max_ban_length'])
  22. if not data or data > (timezone.now() + max_ban_length).date():
  23. message = ungettext(
  24. "You can't set bans longer than %(days)s day.",
  25. "You can't set bans longer than %(days)s days.",
  26. self.user.acl_['max_ban_length'])
  27. message = message % {'days': self.user.acl_['max_ban_length']}
  28. raise forms.ValidationError(message)
  29. elif data and data < timezone.now().date():
  30. raise forms.ValidationError(_("Expiration date is in past."))
  31. return data
  32. def ban_user(self):
  33. new_ban = Ban(banned_value=self.user.username,
  34. user_message=self.cleaned_data['user_message'],
  35. staff_message=self.cleaned_data['staff_message'],
  36. valid_until=self.cleaned_data['valid_until'])
  37. new_ban.save()
  38. Ban.objects.invalidate_cache()