123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- from django import forms
- from django.utils.translation import gettext_lazy as _
- from ....admin.forms import YesNoSwitch
- from ....users.validators import validate_username_content
- from ... import settings
- from .base import ChangeSettingsForm
- class ChangeUsersSettingsForm(ChangeSettingsForm):
- settings = [
- "account_activation",
- "allow_custom_avatars",
- "avatar_upload_limit",
- "default_avatar",
- "default_gravatar_fallback",
- "blank_avatar",
- "signature_length_max",
- "subscribe_reply",
- "subscribe_start",
- "username_length_max",
- "username_length_min",
- "anonymous_username",
- "users_per_page",
- "users_per_page_orphans",
- "top_posters_ranking_length",
- "top_posters_ranking_size",
- "allow_data_downloads",
- "data_downloads_expiration",
- "allow_delete_own_account",
- "new_inactive_accounts_delete",
- "ip_storage_time",
- ]
- account_activation = forms.ChoiceField(
- label=_("Require new accounts activation"),
- choices=[
- ("none", _("No activation required")),
- ("user", _("Activation token sent to user e-mail")),
- ("admin", _("Activation by administrator")),
- ("closed", _("Disable new registrations")),
- ],
- widget=forms.RadioSelect(),
- )
- new_inactive_accounts_delete = forms.IntegerField(
- label=_(
- "Delete new inactive accounts if they weren't activated "
- "within this number of days"
- ),
- help_text=_("Enter 0 to never delete inactive new accounts."),
- min_value=0,
- )
- username_length_min = forms.IntegerField(
- label=_("Minimum allowed username length"), min_value=2, max_value=20
- )
- username_length_max = forms.IntegerField(
- label=_("Maximum allowed username length"), min_value=2, max_value=20
- )
- allow_custom_avatars = YesNoSwitch(
- label=_("Allow custom avatar uploads"),
- help_text=_(
- "Turning this option off will forbid forum users from uploading custom "
- "avatars. Good for forums adressed at young users."
- ),
- )
- avatar_upload_limit = forms.IntegerField(
- label=_("Maximum size of uploaded avatar"),
- help_text=_("Enter maximum allowed file size (in KB) for avatar uploads."),
- min_value=0,
- )
- default_avatar = forms.ChoiceField(
- label=_("Default avatar"),
- choices=[
- ("dynamic", _("Individual")),
- ("gravatar", _("Gravatar")),
- ("gallery", _("Random avatar from gallery")),
- ],
- widget=forms.RadioSelect(),
- )
- default_gravatar_fallback = forms.ChoiceField(
- label=_("Fallback for default gravatar"),
- help_text=_(
- "Select which avatar to use when user has no gravatar associated with "
- "their e-mail address."
- ),
- choices=[
- ("dynamic", _("Individual")),
- ("gallery", _("Random avatar from gallery")),
- ],
- widget=forms.RadioSelect(),
- )
- blank_avatar = forms.ImageField(
- label=_("Blank avatar"),
- help_text=_(
- "Blank avatar is displayed in the interface when user's avatar is not "
- "available: when user was deleted or is guest. Uploaded image should be "
- "a square."
- ),
- required=False,
- )
- blank_avatar_delete = forms.BooleanField(
- label=_("Delete custom blank avatar"), required=False
- )
- signature_length_max = forms.IntegerField(
- label=_("Maximum allowed signature length"), min_value=10, max_value=5000
- )
- subscribe_start = forms.ChoiceField(
- label=_("Started threads"),
- choices=[
- ("no", _("Don't watch")),
- ("watch", _("Put on watched threads list")),
- (
- "watch_email",
- _("Put on watched threads list and e-mail user when somebody replies"),
- ),
- ],
- widget=forms.RadioSelect(),
- )
- subscribe_reply = forms.ChoiceField(
- label=_("Replied threads"),
- choices=[
- ("no", _("Don't watch")),
- ("watch", _("Put on watched threads list")),
- (
- "watch_email",
- _("Put on watched threads list and e-mail user when somebody replies"),
- ),
- ],
- widget=forms.RadioSelect(),
- )
- users_per_page = forms.IntegerField(
- label=_("Number of users displayed on a single page"), min_value=4
- )
- users_per_page_orphans = forms.IntegerField(
- label=_("Maximum orphans"),
- help_text=_(
- "If number of users to be displayed on the last page is less or equal to "
- "number specified in this setting, those users will instead be displayed "
- "on previous page, reducing the total number of pages on the list."
- ),
- min_value=0,
- )
- top_posters_ranking_length = forms.IntegerField(
- label=_("Maximum age in days of posts that should count to the ranking"),
- min_value=1,
- )
- top_posters_ranking_size = forms.IntegerField(
- label=_("Maximum number of ranked users"), min_value=2
- )
- allow_data_downloads = YesNoSwitch(label=_("Allow users to download their data"))
- data_downloads_expiration = forms.IntegerField(
- label=_("Maximum age in hours of data downloads before they expire"),
- help_text=_(
- "Data downloads older than specified will have their files deleted and "
- "will be marked as expired."
- ),
- min_value=1,
- )
- allow_delete_own_account = YesNoSwitch(
- label=_("Allow users to delete their own accounts")
- )
- ip_storage_time = forms.IntegerField(
- label=_("IP storage time"),
- help_text=_(
- "Number of days for which users IP addresses are stored in forum database. "
- "Enter zero to store registered IP addresses forever. Deleting user "
- "account always deletes the IP addresses associated with it."
- ),
- min_value=0,
- )
- anonymous_username = forms.CharField(
- label=_("Anonymous username"),
- help_text=_(
- "This username is displayed instead of delete user's actual name "
- "next to their content."
- ),
- min_length=1,
- max_length=15,
- validators=[validate_username_content],
- )
- def clean_blank_avatar(self):
- upload = self.cleaned_data.get("blank_avatar")
- if not upload or upload == self.initial.get("blank_avatar"):
- return None
- if upload.image.width != upload.image.height:
- raise forms.ValidationError(_("Submitted image is not a square."))
- min_size = max(settings.MISAGO_AVATARS_SIZES)
- if upload.image.width < min_size:
- raise forms.ValidationError(
- _("Submitted image's edge should be at least %(size)s pixels long.")
- % {"size": min_size}
- )
- return upload
- def clean(self):
- cleaned_data = super().clean()
- if cleaned_data.get("users_per_page_orphans") > cleaned_data.get(
- "users_per_page"
- ):
- self.add_error(
- "users_per_page_orphans",
- _("This value must be lower than number of users per page."),
- )
- return cleaned_data
|