Files
web2.0-backend/webapp/forms.py
T
2018-01-25 23:28:49 +02:00

106 lines
4.0 KiB
Python

"""File containing webapp forms."""
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.core.exceptions import ValidationError
from webapp.models import CustomKaehmyRole, PresetKaehmyRole, BaseRole
from webapp.models import OhlhafvChallenge, KaehmyForm, KaehmyMessage
class KaehmyCheckboxSelectMultiple(forms.widgets.CheckboxSelectMultiple):
option_template_name = 'checkbox_option.html'
def create_option(self, name, value, label, selected, index, subindex=None, attrs=None):
dic = super(KaehmyCheckboxSelectMultiple, self).create_option(name, value, label, selected, index, subindex, attrs)
description = PresetKaehmyRole.objects.get(id=value).description
dic['description'] = description
return dic
def __init__(self, *args, **kwargs):
super(KaehmyCheckboxSelectMultiple, self).__init__(*args, **kwargs)
class KaehmyForm_Form(forms.ModelForm):
"""Class representing Kaehmy form."""
class Meta:
"""Meta for class KaehmyForm."""
model = KaehmyForm
fields = ['name', 'email', 'phone_number', 'year',
'preset_roles', 'custom_roles', 'custom_role_name',
'custom_role_is_board', 'text']
def __init__(self, *args, **kwargs):
super(KaehmyForm_Form, self).__init__(*args, **kwargs)
self.fields["email"].label = _('Email (not public)')
self.fields["phone_number"].label = _('Phone number (not public)')
custom_roles_exist = CustomKaehmyRole.objects.all().exists()
self.fields["custom_roles"].widget = forms.widgets.CheckboxSelectMultiple() if custom_roles_exist else forms.HiddenInput()
self.fields["custom_roles"].help_text = ""
self.fields["custom_roles"].label = _('Custom roles')
self.fields["custom_roles"].queryset = CustomKaehmyRole.objects.all()
for cat_id, category in BaseRole.CATEGORIES:
key = 'preset_roles_{}'.format(cat_id)
qset = PresetKaehmyRole.objects.filter(category=cat_id).order_by('category', '-is_board')
self.fields[key] = forms.ModelMultipleChoiceField(qset)
self.fields[key].widget = KaehmyCheckboxSelectMultiple(attrs={
'title': _('Preset roles'),
'name': 'preset_roles',
})
self.fields[key].help_text = ""
self.fields[key].queryset = qset
self.fields[key].label = _(category)
self.fields[key].required = False
def clean(self):
cleaned_data = super(KaehmyForm_Form, self).clean()
print(cleaned_data)
for key in cleaned_data.keys():
if 'preset_roles_' in key:
cleaned_data['preset_roles'] = cleaned_data['preset_roles'] | cleaned_data[key]
print(cleaned_data)
return cleaned_data
def clean_phone_number(self):
"""Clean phone number field."""
number = self.cleaned_data.get('phone_number')
if number.isdigit():
return number
else:
raise ValidationError(_('Invalid phone number'))
def clean_custom_role_name(self):
"""Check that no other custom role with same name exists."""
custom_name = self.cleaned_data.get('custom_role_name')
if not CustomKaehmyRole.objects.filter(name=custom_name).exists():
return custom_name
else:
raise ValidationError(_('Custom role with the same name already exists.'))
def non_role_fields(self):
return [self.fields[k] for k in self.fields.keys() if k not in ["preset_roles", "custom_roles"]]
class KaehmyCommentForm(forms.ModelForm):
class Meta:
model = KaehmyMessage
fields = ['name', 'email', 'message', 'parent']
class OhlhafvForm(forms.ModelForm):
"""Class representing Ohlhafv form."""
class Meta:
"""Meta class for Ohlhafv form."""
model = OhlhafvChallenge
fields = ['challenger', 'challenger_email',
'victim', 'victim_email', 'series', 'message']