forms.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from django.conf import settings
  2. from django.core.exceptions import ValidationError
  3. from django.utils.translation import ugettext_lazy as _
  4. from django import forms
  5. from misago.forms import Form
  6. from misago.themes.models import ThemeAdjustment
  7. from misago.utils.validators import validate_sluggable
  8. available_themes = []
  9. for theme in settings.INSTALLED_THEMES[0:-1]:
  10. available_themes.append((theme, theme))
  11. class ThemeAdjustmentForm(Form):
  12. theme = forms.ChoiceField(choices=available_themes, required=False)
  13. useragents = forms.CharField(widget=forms.Textarea, required=False)
  14. layout = (
  15. (
  16. _("Theme Adjustment"),
  17. (
  18. ('theme', {'label': _("Theme"), 'help_text': _("Select theme that is to replace default one.")}),
  19. ('useragents', {'label': _("UserAgent Strings"), 'help_text': _("Enter UserAgent strings for which selected theme has to replace default one. Each string has to be entered in new line. This is case insensitive")}),
  20. ),
  21. ),
  22. )
  23. def __init__(self, adjustment=None, *args, **kwargs):
  24. self.request = kwargs['request']
  25. if adjustment:
  26. self.adjustment = adjustment
  27. else:
  28. self.adjustment = ThemeAdjustment()
  29. super(ThemeAdjustmentForm, self).__init__(*args, **kwargs)
  30. def clean_theme(self):
  31. self.adjustment.theme = self.cleaned_data['theme']
  32. self.adjustment.full_clean()
  33. return self.cleaned_data['theme']
  34. def clean_useragents(self):
  35. agents_raw = self.cleaned_data['useragents'].strip().lower().splitlines()
  36. agents = []
  37. for line in agents_raw:
  38. line = line.strip()
  39. if line and not line in agents:
  40. agents.append(line)
  41. self.cleaned_data['useragents'] = agents
  42. if not agents:
  43. raise ValidationError(_("You have to enter at least one UserAgent."))
  44. return self.cleaned_data['useragents']