12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- from datetime import timedelta
- from django.utils.translation import ugettext_lazy as _, ungettext
- from django.utils import timezone
- from misago.core import forms
- from misago.users.forms.admin import BanUsersForm
- from misago.users.models import Ban, BAN_EMAIL, BAN_USERNAME
- class BanForm(BanUsersForm):
- def __init__(self, *args, **kwargs):
- self.user = kwargs.pop('user')
- super(BanForm, self).__init__(*args, **kwargs)
- if self.user.acl_['max_ban_length']:
- message = ungettext(
- "Required. Can't be longer than %(days)s day.",
- "Required. Can't be longer than %(days)s days.",
- self.user.acl_['max_ban_length'])
- message = message % {'days': self.user.acl_['max_ban_length']}
- self['valid_until'].field.help_text = message
- def clean_valid_until(self):
- data = self.cleaned_data['valid_until']
- if self.user.acl_['max_ban_length']:
- max_ban_length = timedelta(days=self.user.acl_['max_ban_length'])
- if not data or data > (timezone.now() + max_ban_length).date():
- message = ungettext(
- "You can't set bans longer than %(days)s day.",
- "You can't set bans longer than %(days)s days.",
- self.user.acl_['max_ban_length'])
- message = message % {'days': self.user.acl_['max_ban_length']}
- raise forms.ValidationError(message)
- elif data and data < timezone.now().date():
- raise forms.ValidationError(_("Expiration date is in past."))
- return data
- def ban_user(self):
- new_ban = Ban(banned_value=self.user.username,
- user_message=self.cleaned_data['user_message'],
- staff_message=self.cleaned_data['staff_message'],
- valid_until=self.cleaned_data['valid_until'])
- new_ban.save()
- Ban.objects.invalidate_cache()
|