modusers.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. from datetime import timedelta
  2. from django.contrib.auth import get_user_model
  3. from django.utils.translation import ugettext_lazy as _, ungettext
  4. from django.utils import timezone
  5. from misago.conf import settings
  6. from misago.core import forms
  7. from misago.users.forms.admin import BanUsersForm
  8. from misago.users.models import Ban, BAN_EMAIL, BAN_USERNAME
  9. class BanForm(BanUsersForm):
  10. def __init__(self, *args, **kwargs):
  11. self.user = kwargs.pop('user')
  12. super(BanForm, self).__init__(*args, **kwargs)
  13. if self.user.acl_['max_ban_length']:
  14. message = ungettext(
  15. "Required. Can't be longer than %(days)s day.",
  16. "Required. Can't be longer than %(days)s days.",
  17. self.user.acl_['max_ban_length'])
  18. message = message % {'days': self.user.acl_['max_ban_length']}
  19. self['valid_until'].field.help_text = message
  20. def clean_valid_until(self):
  21. data = self.cleaned_data['valid_until']
  22. if self.user.acl_['max_ban_length']:
  23. max_ban_length = timedelta(days=self.user.acl_['max_ban_length'])
  24. if not data or data > (timezone.now() + max_ban_length).date():
  25. message = ungettext(
  26. "You can't set bans longer than %(days)s day.",
  27. "You can't set bans longer than %(days)s days.",
  28. self.user.acl_['max_ban_length'])
  29. message = message % {'days': self.user.acl_['max_ban_length']}
  30. raise forms.ValidationError(message)
  31. elif data and data < timezone.now().date():
  32. raise forms.ValidationError(_("Expiration date is in past."))
  33. return data
  34. def ban_user(self):
  35. new_ban = Ban(banned_value=self.user.username,
  36. user_message=self.cleaned_data['user_message'],
  37. staff_message=self.cleaned_data['staff_message'],
  38. valid_until=self.cleaned_data['valid_until'])
  39. new_ban.save()
  40. Ban.objects.invalidate_cache()
  41. class ModerateAvatarForm(forms.ModelForm):
  42. is_avatar_locked = forms.YesNoSwitch(
  43. label=_("Lock avatar"),
  44. help_text=_("Setting this to yes will stop user from "
  45. "changing his/her avatar, and will reset "
  46. "his/her avatar to procedurally generated one."))
  47. avatar_lock_user_message = forms.CharField(
  48. label=_("User message"),
  49. help_text=_("Optional message for user explaining "
  50. "why he/she is banned form changing avatar."),
  51. widget=forms.Textarea(attrs={'rows': 3}),
  52. required=False)
  53. avatar_lock_staff_message = forms.CharField(
  54. label=_("Staff message"),
  55. help_text=_("Optional message for forum team members explaining "
  56. "why user is banned form changing avatar."),
  57. widget=forms.Textarea(attrs={'rows': 3}),
  58. required=False)
  59. class Meta:
  60. model = get_user_model()
  61. fields = [
  62. 'is_avatar_locked',
  63. 'avatar_lock_user_message',
  64. 'avatar_lock_staff_message',
  65. ]
  66. class ModerateSignatureForm(forms.ModelForm):
  67. signature = forms.CharField(
  68. label=_("Signature contents"),
  69. widget=forms.Textarea(attrs={'rows': 3}),
  70. required=False)
  71. is_signature_locked = forms.YesNoSwitch(
  72. label=_("Lock signature"),
  73. help_text=_("Setting this to yes will stop user from "
  74. "making changes to his/her signature."))
  75. signature_lock_user_message = forms.CharField(
  76. label=_("User message"),
  77. help_text=_("Optional message to user explaining "
  78. "why his/hers signature is locked."),
  79. widget=forms.Textarea(attrs={'rows': 3}),
  80. required=False)
  81. signature_lock_staff_message = forms.CharField(
  82. label=_("Staff message"),
  83. help_text=_("Optional message to team members explaining "
  84. "why user signature is locked."),
  85. widget=forms.Textarea(attrs={'rows': 3}),
  86. required=False)
  87. class Meta:
  88. model = get_user_model()
  89. fields = [
  90. 'signature',
  91. 'is_signature_locked',
  92. 'signature_lock_user_message',
  93. 'signature_lock_staff_message'
  94. ]
  95. def clean_signature(self):
  96. data = self.cleaned_data['signature']
  97. length_limit = settings.signature_length_max
  98. if len(data) > length_limit:
  99. raise forms.ValidationError(ungettext(
  100. "Signature can't be longer than %(limit)s character.",
  101. "Signature can't be longer than %(limit)s characters.",
  102. length_limit) % {'limit': length_limit})
  103. return data